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( return db.Column(
db.Enum( db.Enum(
*[i.value for i in enum_type], *[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, **kwargs,
) )
@@ -1449,7 +1450,13 @@ class NotificationAllTimeView(db.Model):
sent_at = db.Column(db.DateTime) sent_at = db.Column(db.DateTime)
sent_by = db.Column(db.String) sent_by = db.Column(db.String)
updated_at = db.Column(db.DateTime) 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) reference = db.Column(db.String)
client_reference = db.Column(db.String) client_reference = db.Column(db.String)
international = db.Column(db.Boolean) international = db.Column(db.Boolean)

View File

@@ -118,6 +118,7 @@ _enum_params: dict[Enum, EnumValues] = {
CodeType: {"values": ["email", "sms"], "name": "code_types"}, CodeType: {"values": ["email", "sms"], "name": "code_types"},
} }
def enum_create(values: list[str], name: str) -> None: def enum_create(values: list[str], name: str) -> None:
enum_db_type = postgresql.ENUM(*values, name=name) enum_db_type = postgresql.ENUM(*values, name=name)
enum_db_type.create(op.get_bind()) 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: 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: 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(): def upgrade():
@@ -251,14 +256,22 @@ def upgrade():
existing_nullable=False, existing_nullable=False,
postgresql_using=enum_using("status", InvitedUserStatus), 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( op.alter_column(
"invited_users", "invited_users",
"auth_type", "auth_type",
existing_type=sa.VARCHAR(), existing_type=sa.VARCHAR(),
type_=enum_type(AuthType), type_=enum_type(AuthType),
existing_nullable=False, existing_nullable=False,
existing_server_default=sa.text("'sms_auth'::character varying"), postgresql_using="auth_type::auth_types",
postgresql_using=enum_using("auth_type", AuthType),
) )
op.alter_column( op.alter_column(
"jobs", "jobs",
@@ -456,10 +469,17 @@ def upgrade():
"users", "users",
"auth_type", "auth_type",
existing_type=sa.VARCHAR(), existing_type=sa.VARCHAR(),
type_=enum_type(AuthType), type_=sa.VARCHAR(),
server_default=None,
existing_nullable=False, existing_nullable=False,
existing_server_default=sa.text("'sms_auth'::character varying"), 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( op.alter_column(
"verify_codes", "verify_codes",
@@ -509,7 +529,7 @@ def downgrade():
existing_type=enum_type(AuthType), existing_type=enum_type(AuthType),
type_=sa.VARCHAR(), type_=sa.VARCHAR(),
existing_nullable=False, existing_nullable=False,
existing_server_default=sa.text("'sms_auth'::character varying"), server_default=sa.text("'sms_auth'::character varying"),
) )
op.alter_column( op.alter_column(
"templates_history", "templates_history",
@@ -684,7 +704,7 @@ def downgrade():
existing_type=enum_type(AuthType), existing_type=enum_type(AuthType),
type_=sa.VARCHAR(), type_=sa.VARCHAR(),
existing_nullable=False, existing_nullable=False,
existing_server_default=sa.text("'sms_auth'::character varying"), server_default=sa.text("'sms_auth'::character varying"),
) )
op.alter_column( op.alter_column(
"invited_users", "invited_users",