Another thing needs an enum.

Signed-off-by: Cliff Hill <Clifford.hill@gsa.gov>
This commit is contained in:
Cliff Hill
2024-01-25 14:25:00 -05:00
parent 6a8f7ffeb3
commit ced386b0c5
2 changed files with 37 additions and 10 deletions

View File

@@ -78,7 +78,8 @@ def enum_column(enum_type, **kwargs):
return db.Column(
db.Enum(
*[i.value for i in enum_type],
name=_enum_column_names[enum_type]
name=_enum_column_names[enum_type],
values_callable=(lambda x: [i.value for i in x]),
),
**kwargs,
)
@@ -1449,7 +1450,13 @@ class NotificationAllTimeView(db.Model):
sent_at = db.Column(db.DateTime)
sent_by = db.Column(db.String)
updated_at = db.Column(db.DateTime)
status = db.Column("notification_status", db.Text)
status = enum_column(
NotificationStatus,
name="notification_status",
nullable=True,
default=NotificationStatus.CREATED,
key="status",
)
reference = db.Column(db.String)
client_reference = db.Column(db.String)
international = db.Column(db.Boolean)

View File

@@ -118,6 +118,7 @@ _enum_params: dict[Enum, EnumValues] = {
CodeType: {"values": ["email", "sms"], "name": "code_types"},
}
def enum_create(values: list[str], name: str) -> None:
enum_db_type = postgresql.ENUM(*values, name=name)
enum_db_type.create(op.get_bind())
@@ -129,11 +130,15 @@ def enum_drop(values: list[str], name: str) -> None:
def enum_using(column_name: str, enum: Enum) -> str:
return f"{column_name}::{_enum_params[enum]['name']}"
return f"{column_name}::text::{_enum_params[enum]['name']}"
def enum_type(enum: Enum) -> sa.Enum:
return sa.Enum(*_enum_params[enum]["values"], name=_enum_params[enum]["name"])
return sa.Enum(
*_enum_params[enum]["values"],
name=_enum_params[enum]["name"],
values_callable=(lambda x: [e.value for e in x]),
)
def upgrade():
@@ -251,14 +256,22 @@ def upgrade():
existing_nullable=False,
postgresql_using=enum_using("status", InvitedUserStatus),
)
op.alter_column(
"invited_users",
"auth_type",
existing_type=sa.VARCHAR(),
type_=sa.VARCHAR(),
existing_nullable=False,
server_default=None,
existing_server_default=sa.text("'sms_auth'::character varying"),
)
op.alter_column(
"invited_users",
"auth_type",
existing_type=sa.VARCHAR(),
type_=enum_type(AuthType),
existing_nullable=False,
existing_server_default=sa.text("'sms_auth'::character varying"),
postgresql_using=enum_using("auth_type", AuthType),
postgresql_using="auth_type::auth_types",
)
op.alter_column(
"jobs",
@@ -456,10 +469,17 @@ def upgrade():
"users",
"auth_type",
existing_type=sa.VARCHAR(),
type_=enum_type(AuthType),
type_=sa.VARCHAR(),
server_default=None,
existing_nullable=False,
existing_server_default=sa.text("'sms_auth'::character varying"),
postgresql_using=enum_using("auth_type", AuthType),
)
op.alter_column(
"users",
"auth_type",
existing_type=sa.VARCHAR(),
type_=enum_type(AuthType),
existing_nullable=False,
)
op.alter_column(
"verify_codes",
@@ -509,7 +529,7 @@ def downgrade():
existing_type=enum_type(AuthType),
type_=sa.VARCHAR(),
existing_nullable=False,
existing_server_default=sa.text("'sms_auth'::character varying"),
server_default=sa.text("'sms_auth'::character varying"),
)
op.alter_column(
"templates_history",
@@ -684,7 +704,7 @@ def downgrade():
existing_type=enum_type(AuthType),
type_=sa.VARCHAR(),
existing_nullable=False,
existing_server_default=sa.text("'sms_auth'::character varying"),
server_default=sa.text("'sms_auth'::character varying"),
)
op.alter_column(
"invited_users",