123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- """create annotation table
- Revision ID: 7f8b8920355f
- Revises: c1d316c60985
- Create Date: 2022-01-29 20:23:29.996133
- """
- from alembic import op
- import click
- import sqlalchemy as sa
- # revision identifiers, used by Alembic.
- revision = "7f8b8920355f"
- down_revision = "c1d316c60985"
- branch_labels = None
- depends_on = None
- def upgrade():
- create_annotation_table()
- create_annotation_account_relationship_table()
- create_annotation_asset_relationship_table()
- create_annotation_sensor_relationship_table()
- create_user_roles_unique_constraints()
- create_account_roles_unique_constraints()
- def downgrade():
- click.confirm(
- "This downgrade drops the tables 'annotations_accounts', 'annotations_assets', 'annotations_sensors' and 'annotation'. Continue?",
- abort=True,
- )
- op.drop_constraint(
- op.f("roles_accounts_role_id_key"),
- "roles_accounts",
- type_="unique",
- )
- op.drop_constraint(
- op.f("roles_users_role_id_key"),
- "roles_users",
- type_="unique",
- )
- op.drop_constraint(
- op.f("annotations_accounts_annotation_id_key"),
- "annotations_accounts",
- type_="unique",
- )
- op.drop_constraint(
- op.f("annotations_assets_annotation_id_key"),
- "annotations_assets",
- type_="unique",
- )
- op.drop_constraint(
- op.f("annotations_sensors_annotation_id_key"),
- "annotations_sensors",
- type_="unique",
- )
- op.drop_table("annotations_accounts")
- op.drop_table("annotations_assets")
- op.drop_table("annotations_sensors")
- op.drop_constraint(op.f("annotation_content_key"), "annotation", type_="unique")
- op.drop_table("annotation")
- op.execute("DROP TYPE annotation_type;")
- def create_account_roles_unique_constraints():
- """Remove any duplicate relationships, then constrain any new relationships to be unique."""
- op.execute(
- "DELETE FROM roles_accounts WHERE id in (SELECT r1.id FROM roles_accounts r1, roles_accounts r2 WHERE r1.id > r2.id AND r1.role_id = r2.role_id and r1.account_id = r2.account_id);"
- )
- op.create_unique_constraint(
- op.f("roles_accounts_role_id_key"),
- "roles_accounts",
- ["role_id", "account_id"],
- )
- def create_user_roles_unique_constraints():
- """Remove any duplicate relationships, then constrain any new relationships to be unique."""
- op.execute(
- "DELETE FROM roles_users WHERE id in (SELECT r1.id FROM roles_users r1, roles_users r2 WHERE r1.id > r2.id AND r1.role_id = r2.role_id and r1.user_id = r2.user_id);"
- )
- op.create_unique_constraint(
- op.f("roles_users_role_id_key"),
- "roles_users",
- ["role_id", "user_id"],
- )
- def create_annotation_sensor_relationship_table():
- op.create_table(
- "annotations_sensors",
- sa.Column("id", sa.Integer(), primary_key=True),
- sa.Column("sensor_id", sa.Integer()),
- sa.Column("annotation_id", sa.Integer()),
- sa.ForeignKeyConstraint(("sensor_id",), ["sensor.id"]),
- sa.ForeignKeyConstraint(("annotation_id",), ["annotation.id"]),
- )
- op.create_unique_constraint(
- op.f("annotations_sensors_annotation_id_key"),
- "annotations_sensors",
- ["annotation_id", "sensor_id"],
- )
- def create_annotation_asset_relationship_table():
- op.create_table(
- "annotations_assets",
- sa.Column("id", sa.Integer(), primary_key=True),
- sa.Column("generic_asset_id", sa.Integer()),
- sa.Column("annotation_id", sa.Integer()),
- sa.ForeignKeyConstraint(("generic_asset_id",), ["generic_asset.id"]),
- sa.ForeignKeyConstraint(("annotation_id",), ["annotation.id"]),
- )
- op.create_unique_constraint(
- op.f("annotations_assets_annotation_id_key"),
- "annotations_assets",
- ["annotation_id", "generic_asset_id"],
- )
- def create_annotation_account_relationship_table():
- op.create_table(
- "annotations_accounts",
- sa.Column("id", sa.Integer(), primary_key=True),
- sa.Column("account_id", sa.Integer()),
- sa.Column("annotation_id", sa.Integer()),
- sa.ForeignKeyConstraint(("account_id",), ["account.id"]),
- sa.ForeignKeyConstraint(("annotation_id",), ["annotation.id"]),
- )
- op.create_unique_constraint(
- op.f("annotations_accounts_annotation_id_key"),
- "annotations_accounts",
- ["annotation_id", "account_id"],
- )
- def create_annotation_table():
- op.create_table(
- "annotation",
- sa.Column(
- "id", sa.Integer(), nullable=False, autoincrement=True, primary_key=True
- ),
- sa.Column("start", sa.DateTime(timezone=True), nullable=False),
- sa.Column("end", sa.DateTime(timezone=True), nullable=False),
- sa.Column("belief_time", sa.DateTime(timezone=True), nullable=True),
- sa.Column("source_id", sa.Integer(), nullable=False),
- sa.Column(
- "type",
- sa.Enum("alert", "holiday", "label", "feedback", name="annotation_type"),
- nullable=False,
- ),
- sa.Column("content", sa.String(1024), nullable=False),
- sa.ForeignKeyConstraint(("source_id",), ["data_source.id"]),
- )
- op.create_unique_constraint(
- op.f("annotation_content_key"),
- "annotation",
- ["content", "start", "belief_time", "source_id", "type"],
- )
|