From 5605b2aa44443f09d3b1f93330fa21e55a822315 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Sun, 27 Aug 2023 20:04:15 -0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A5=20refactor(alembic):=20remove=20fl?= =?UTF-8?q?owstyles=20table=20migration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🔥 refactor(alembic): remove add_flow_table migration ✨ feat(alembic): add adds_tables migration to create user and apikey tables 🔥 chore(alembic): remove unnecessary alembic migration files The following alembic migration files were removed: - `5512e39b4012_add_apikey_table.py` - `6384181fb7e8_update_api_key.py` - `d3749cf7ac7e_update_all_tables.py` These files are no longer needed as they are no longer relevant to the current state of the database schema. Removing them helps to keep the project's codebase clean and organized. --- .../0a534bdfd84b_remove_flowstyles_table.py | 42 ------ .../versions/260dbcc8b680_adds_tables.py | 141 ++++++++++++++++++ .../versions/4814b6f4abfd_add_flow_table.py | 65 -------- .../versions/5512e39b4012_add_apikey_table.py | 103 ------------- .../versions/6384181fb7e8_update_api_key.py | 54 ------- .../d3749cf7ac7e_update_all_tables.py | 59 -------- 6 files changed, 141 insertions(+), 323 deletions(-) delete mode 100644 src/backend/langflow/alembic/versions/0a534bdfd84b_remove_flowstyles_table.py create mode 100644 src/backend/langflow/alembic/versions/260dbcc8b680_adds_tables.py delete mode 100644 src/backend/langflow/alembic/versions/4814b6f4abfd_add_flow_table.py delete mode 100644 src/backend/langflow/alembic/versions/5512e39b4012_add_apikey_table.py delete mode 100644 src/backend/langflow/alembic/versions/6384181fb7e8_update_api_key.py delete mode 100644 src/backend/langflow/alembic/versions/d3749cf7ac7e_update_all_tables.py diff --git a/src/backend/langflow/alembic/versions/0a534bdfd84b_remove_flowstyles_table.py b/src/backend/langflow/alembic/versions/0a534bdfd84b_remove_flowstyles_table.py deleted file mode 100644 index 0100df44d..000000000 --- a/src/backend/langflow/alembic/versions/0a534bdfd84b_remove_flowstyles_table.py +++ /dev/null @@ -1,42 +0,0 @@ -"""Remove FlowStyles table - -Revision ID: 0a534bdfd84b -Revises: 4814b6f4abfd -Create Date: 2023-08-07 14:09:06.844104 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = "0a534bdfd84b" -down_revision: Union[str, None] = "4814b6f4abfd" -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table("flowstyle") - # ### end Alembic commands ### - - -def downgrade() -> None: - # ### commands auto generated by Alembic - please adjust! ### - op.create_table( - "flowstyle", - sa.Column("color", sa.VARCHAR(), nullable=False), - sa.Column("emoji", sa.VARCHAR(), nullable=False), - sa.Column("flow_id", sa.CHAR(length=32), nullable=True), - sa.Column("id", sa.CHAR(length=32), nullable=False), - sa.ForeignKeyConstraint( - ["flow_id"], - ["flow.id"], - ), - sa.PrimaryKeyConstraint("id"), - sa.UniqueConstraint("id"), - ) - # ### end Alembic commands ### diff --git a/src/backend/langflow/alembic/versions/260dbcc8b680_adds_tables.py b/src/backend/langflow/alembic/versions/260dbcc8b680_adds_tables.py new file mode 100644 index 000000000..c0b9c60c9 --- /dev/null +++ b/src/backend/langflow/alembic/versions/260dbcc8b680_adds_tables.py @@ -0,0 +1,141 @@ +"""Adds tables + +Revision ID: 260dbcc8b680 +Revises: +Create Date: 2023-08-27 19:49:02.681355 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +import sqlmodel +from sqlalchemy.engine.reflection import Inspector + +# revision identifiers, used by Alembic. +revision: str = "260dbcc8b680" +down_revision: Union[str, None] = None +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + + conn = op.get_bind() + inspector = Inspector.from_engine(conn) + # List existing tables + existing_tables = inspector.get_table_names() + existing_indices_flow = [] + if "flow" in existing_tables: + existing_indices_flow = [ + index["name"] for index in inspector.get_indexes("flow") + ] + # Existing foreign keys for the 'flow' table, if it exists + existing_fks_flow = [] + if "flow" in existing_tables: + existing_fks_flow = [ + fk["referred_table"] + "." + fk["referred_columns"][0] + for fk in inspector.get_foreign_keys("flow") + ] + + op.create_table( + "user", + sa.Column("id", sqlmodel.sql.sqltypes.GUID(), nullable=False), + sa.Column("username", sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column("password", sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column("is_active", sa.Boolean(), nullable=False), + sa.Column("is_superuser", sa.Boolean(), nullable=False), + sa.Column("create_at", sa.DateTime(), nullable=False), + sa.Column("updated_at", sa.DateTime(), nullable=False), + sa.Column("last_login_at", sa.DateTime(), nullable=True), + sa.PrimaryKeyConstraint("id"), + sa.UniqueConstraint("id"), + ) + with op.batch_alter_table("user", schema=None) as batch_op: + batch_op.create_index(batch_op.f("ix_user_username"), ["username"], unique=True) + + op.create_table( + "apikey", + sa.Column("name", sqlmodel.sql.sqltypes.AutoString(), nullable=True), + sa.Column("created_at", sa.DateTime(), nullable=False), + sa.Column("last_used_at", sa.DateTime(), nullable=True), + sa.Column("total_uses", sa.Integer(), nullable=False), + sa.Column("is_active", sa.Boolean(), nullable=False), + sa.Column("id", sqlmodel.sql.sqltypes.GUID(), nullable=False), + sa.Column("api_key", sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column("user_id", sqlmodel.sql.sqltypes.GUID(), nullable=False), + sa.ForeignKeyConstraint( + ["user_id"], + ["user.id"], + ), + sa.PrimaryKeyConstraint("id"), + sa.UniqueConstraint("id"), + ) + with op.batch_alter_table("apikey", schema=None) as batch_op: + batch_op.create_index(batch_op.f("ix_apikey_api_key"), ["api_key"], unique=True) + batch_op.create_index(batch_op.f("ix_apikey_name"), ["name"], unique=False) + batch_op.create_index( + batch_op.f("ix_apikey_user_id"), ["user_id"], unique=False + ) + if "flow" not in existing_tables: + op.create_table( + "flow", + sa.Column("data", sa.JSON(), nullable=True), + sa.Column("name", sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column("description", sqlmodel.sql.sqltypes.AutoString(), nullable=True), + sa.Column("id", sqlmodel.sql.sqltypes.GUID(), nullable=False), + sa.Column("user_id", sqlmodel.sql.sqltypes.GUID(), nullable=False), + sa.ForeignKeyConstraint( + ["user_id"], + ["user.id"], + ), + sa.PrimaryKeyConstraint("id"), + sa.UniqueConstraint("id"), + ) + elif "user.id" not in existing_fks_flow: + with op.batch_alter_table("flow") as batch_op: + batch_op.create_foreign_key("fk_flow_user_id", "user", ["user_id"], ["id"]) + # Conditionally create indices for 'flow' table + with op.batch_alter_table("flow", schema=None) as batch_op: + if "ix_flow_description" not in existing_indices_flow: + batch_op.create_index( + batch_op.f("ix_flow_description"), ["description"], unique=False + ) + if "ix_flow_name" not in existing_indices_flow: + batch_op.create_index(batch_op.f("ix_flow_name"), ["name"], unique=False) + if "ix_flow_user_id" not in existing_indices_flow: + batch_op.create_index( + batch_op.f("ix_flow_user_id"), ["user_id"], unique=False + ) + + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + + conn = op.get_bind() + inspector = Inspector.from_engine(conn) + # List existing tables + existing_tables = inspector.get_table_names() + if "flow" in existing_tables: + with op.batch_alter_table("flow", schema=None) as batch_op: + batch_op.drop_index(batch_op.f("ix_flow_user_id")) + batch_op.drop_index(batch_op.f("ix_flow_name")) + batch_op.drop_index(batch_op.f("ix_flow_description")) + + op.drop_table("flow") + if "apikey" in existing_tables: + with op.batch_alter_table("apikey", schema=None) as batch_op: + batch_op.drop_index(batch_op.f("ix_apikey_user_id")) + batch_op.drop_index(batch_op.f("ix_apikey_name")) + batch_op.drop_index(batch_op.f("ix_apikey_api_key")) + + op.drop_table("apikey") + if "user" in existing_tables: + with op.batch_alter_table("user", schema=None) as batch_op: + batch_op.drop_index(batch_op.f("ix_user_username")) + + op.drop_table("user") + # ### end Alembic commands ### diff --git a/src/backend/langflow/alembic/versions/4814b6f4abfd_add_flow_table.py b/src/backend/langflow/alembic/versions/4814b6f4abfd_add_flow_table.py deleted file mode 100644 index 0b2f32657..000000000 --- a/src/backend/langflow/alembic/versions/4814b6f4abfd_add_flow_table.py +++ /dev/null @@ -1,65 +0,0 @@ -"""Add Flow table - -Revision ID: 4814b6f4abfd -Revises: -Create Date: 2023-08-05 17:47:42.879824 - -""" - -import contextlib -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa -import sqlmodel - - -# revision identifiers, used by Alembic. -revision: str = "4814b6f4abfd" -down_revision: Union[str, None] = None -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - # ### commands auto generated by Alembic - please adjust! ### - - # This suppress is used to not break the migration if the table already exists. - with contextlib.suppress(sa.exc.OperationalError): - op.create_table( - "flow", - sa.Column("data", sa.JSON(), nullable=True), - sa.Column("name", sqlmodel.sql.sqltypes.AutoString(), nullable=False), - sa.Column("description", sqlmodel.sql.sqltypes.AutoString(), nullable=True), - sa.Column("id", sqlmodel.sql.sqltypes.GUID(), nullable=False), - sa.PrimaryKeyConstraint("id"), - sa.UniqueConstraint("id"), - ) - op.create_index( - op.f("ix_flow_description"), "flow", ["description"], unique=False - ) - op.create_index(op.f("ix_flow_name"), "flow", ["name"], unique=False) - with contextlib.suppress(sa.exc.OperationalError): - op.create_table( - "flowstyle", - sa.Column("color", sqlmodel.sql.sqltypes.AutoString(), nullable=False), - sa.Column("emoji", sqlmodel.sql.sqltypes.AutoString(), nullable=False), - sa.Column("flow_id", sqlmodel.sql.sqltypes.GUID(), nullable=True), - sa.Column("id", sqlmodel.sql.sqltypes.GUID(), nullable=False), - sa.ForeignKeyConstraint( - ["flow_id"], - ["flow.id"], - ), - sa.PrimaryKeyConstraint("id"), - sa.UniqueConstraint("id"), - ) - # ### end Alembic commands ### - - -def downgrade() -> None: - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table("flowstyle") - op.drop_index(op.f("ix_flow_name"), table_name="flow") - op.drop_index(op.f("ix_flow_description"), table_name="flow") - op.drop_table("flow") - # ### end Alembic commands ### diff --git a/src/backend/langflow/alembic/versions/5512e39b4012_add_apikey_table.py b/src/backend/langflow/alembic/versions/5512e39b4012_add_apikey_table.py deleted file mode 100644 index ebf549eda..000000000 --- a/src/backend/langflow/alembic/versions/5512e39b4012_add_apikey_table.py +++ /dev/null @@ -1,103 +0,0 @@ -"""Add ApiKey table - -Revision ID: 5512e39b4012 -Revises: 0a534bdfd84b -Create Date: 2023-08-23 21:05:51.042203 - -""" - -import contextlib -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa -import sqlmodel - - -# revision identifiers, used by Alembic. -revision: str = "5512e39b4012" -down_revision: Union[str, None] = "0a534bdfd84b" -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - # ### commands auto generated by Alembic - please adjust! ### - with contextlib.suppress(sa.exc.OperationalError): - op.create_table( - "apikey", - sa.Column("api_key", sqlmodel.sql.sqltypes.AutoString(), nullable=False), - sa.Column( - "hashed_api_key", sqlmodel.sql.sqltypes.AutoString(), nullable=False - ), - sa.Column("name", sqlmodel.sql.sqltypes.AutoString(), nullable=False), - sa.Column("create_at", sa.DateTime(), nullable=False), - sa.Column("last_used_at", sa.DateTime(), nullable=True), - sa.Column("id", sqlmodel.sql.sqltypes.GUID(), nullable=False), - sa.PrimaryKeyConstraint("id"), - sa.UniqueConstraint("id"), - ) - op.create_index(op.f("ix_apikey_api_key"), "apikey", ["api_key"], unique=True) - - with contextlib.suppress(sa.exc.OperationalError): - op.create_table( - "user", - sa.Column("id", sqlmodel.sql.sqltypes.GUID(), nullable=False), - sa.Column("username", sqlmodel.sql.sqltypes.AutoString(), nullable=False), - sa.Column("password", sqlmodel.sql.sqltypes.AutoString(), nullable=False), - sa.Column("is_active", sa.Boolean(), nullable=False), - sa.Column("is_superuser", sa.Boolean(), nullable=False), - sa.Column("create_at", sa.DateTime(), nullable=False), - sa.Column("updated_at", sa.DateTime(), nullable=False), - sa.Column("last_login_at", sa.DateTime(), nullable=True), - sa.PrimaryKeyConstraint("id"), - sa.UniqueConstraint("id"), - ) - op.create_index(op.f("ix_user_username"), "user", ["username"], unique=True) - with contextlib.suppress(sa.exc.OperationalError): - op.drop_table("flowstyle") - with contextlib.suppress(sa.exc.OperationalError): - op.drop_index("ix_component_frontend_node_id", table_name="component") - op.drop_index("ix_component_name", table_name="component") - op.drop_table("component") - # ### end Alembic commands ### - - -def downgrade() -> None: - # ### commands auto generated by Alembic - please adjust! ### - op.create_table( - "component", - sa.Column("id", sa.CHAR(length=32), nullable=False), - sa.Column("frontend_node_id", sa.CHAR(length=32), nullable=False), - sa.Column("name", sa.VARCHAR(), nullable=False), - sa.Column("description", sa.VARCHAR(), nullable=True), - sa.Column("python_code", sa.VARCHAR(), nullable=True), - sa.Column("return_type", sa.VARCHAR(), nullable=True), - sa.Column("is_disabled", sa.BOOLEAN(), nullable=False), - sa.Column("is_read_only", sa.BOOLEAN(), nullable=False), - sa.Column("create_at", sa.DATETIME(), nullable=False), - sa.Column("update_at", sa.DATETIME(), nullable=False), - sa.PrimaryKeyConstraint("id"), - ) - op.create_index("ix_component_name", "component", ["name"], unique=False) - op.create_index( - "ix_component_frontend_node_id", "component", ["frontend_node_id"], unique=False - ) - op.create_table( - "flowstyle", - sa.Column("color", sa.VARCHAR(), nullable=False), - sa.Column("emoji", sa.VARCHAR(), nullable=False), - sa.Column("flow_id", sa.CHAR(length=32), nullable=True), - sa.Column("id", sa.CHAR(length=32), nullable=False), - sa.ForeignKeyConstraint( - ["flow_id"], - ["flow.id"], - ), - sa.PrimaryKeyConstraint("id"), - sa.UniqueConstraint("id"), - ) - op.drop_index(op.f("ix_user_username"), table_name="user") - op.drop_table("user") - op.drop_index(op.f("ix_apikey_api_key"), table_name="apikey") - op.drop_table("apikey") - # ### end Alembic commands ### diff --git a/src/backend/langflow/alembic/versions/6384181fb7e8_update_api_key.py b/src/backend/langflow/alembic/versions/6384181fb7e8_update_api_key.py deleted file mode 100644 index 6b5f30ca6..000000000 --- a/src/backend/langflow/alembic/versions/6384181fb7e8_update_api_key.py +++ /dev/null @@ -1,54 +0,0 @@ -"""Update API key - -Revision ID: 6384181fb7e8 -Revises: d3749cf7ac7e -Create Date: 2023-08-25 20:00:22.889883 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa -import sqlmodel -import contextlib - -# revision identifiers, used by Alembic. -revision: str = "6384181fb7e8" -down_revision: Union[str, None] = "d3749cf7ac7e" -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - # ### commands auto generated by Alembic - please adjust! ### - with contextlib.suppress(sa.exc.OperationalError): - op.add_column( - "apikey", - sa.Column( - "hashed_api_key", sqlmodel.sql.sqltypes.AutoString(), nullable=False - ), - ) - op.alter_column("apikey", "name", existing_type=sa.VARCHAR(), nullable=True) - op.create_index( - op.f("ix_apikey_hashed_api_key"), "apikey", ["hashed_api_key"], unique=False - ) - op.create_index(op.f("ix_apikey_name"), "apikey", ["name"], unique=False) - op.create_foreign_key(None, "apikey", "user", ["user_id"], ["id"]) - with contextlib.suppress(sa.exc.OperationalError): - op.alter_column( - "flow", "user_id", existing_type=sa.CHAR(length=32), nullable=False - ) - op.create_foreign_key(None, "flow", "user", ["user_id"], ["id"]) - # ### end Alembic commands ### - - -def downgrade() -> None: - # ### commands auto generated by Alembic - please adjust! ### - op.drop_constraint(None, "flow", type_="foreignkey") - op.alter_column("flow", "user_id", existing_type=sa.CHAR(length=32), nullable=True) - op.drop_constraint(None, "apikey", type_="foreignkey") - op.drop_index(op.f("ix_apikey_name"), table_name="apikey") - op.drop_index(op.f("ix_apikey_hashed_api_key"), table_name="apikey") - op.alter_column("apikey", "name", existing_type=sa.VARCHAR(), nullable=False) - op.drop_column("apikey", "hashed_api_key") - # ### end Alembic commands ### diff --git a/src/backend/langflow/alembic/versions/d3749cf7ac7e_update_all_tables.py b/src/backend/langflow/alembic/versions/d3749cf7ac7e_update_all_tables.py deleted file mode 100644 index 27664d8b7..000000000 --- a/src/backend/langflow/alembic/versions/d3749cf7ac7e_update_all_tables.py +++ /dev/null @@ -1,59 +0,0 @@ -"""Update all tables - -Revision ID: d3749cf7ac7e -Revises: 5512e39b4012 -Create Date: 2023-08-25 15:16:00.970071 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa -import sqlmodel -import contextlib - -# revision identifiers, used by Alembic. -revision: str = "d3749cf7ac7e" -down_revision: Union[str, None] = "5512e39b4012" -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - # ### commands auto generated by Alembic - please adjust! ### - with contextlib.suppress(sa.exc.OperationalError): - op.add_column("apikey", sa.Column("created_at", sa.DateTime(), nullable=False)) - with contextlib.suppress(sa.exc.OperationalError): - op.add_column( - "apikey", sa.Column("user_id", sqlmodel.sql.sqltypes.GUID(), nullable=False) - ) - op.create_index(op.f("ix_apikey_user_id"), "apikey", ["user_id"], unique=False) - op.create_foreign_key(None, "apikey", "user", ["user_id"], ["id"]) - with contextlib.suppress(sa.exc.OperationalError): - op.alter_column("apikey", "name", existing_type=sa.VARCHAR(), nullable=True) - op.create_index(op.f("ix_apikey_name"), "apikey", ["name"], unique=False) - - with contextlib.suppress(sa.exc.OperationalError): - op.drop_column("apikey", "create_at") - with contextlib.suppress(sa.exc.OperationalError): - op.add_column( - "flow", sa.Column("user_id", sqlmodel.sql.sqltypes.GUID(), nullable=True) - ) - op.create_index(op.f("ix_flow_user_id"), "flow", ["user_id"], unique=False) - op.create_foreign_key(None, "flow", "user", ["user_id"], ["id"]) - # ### end Alembic commands ### - - -def downgrade() -> None: - # ### commands auto generated by Alembic - please adjust! ### - op.drop_constraint(None, "flow", type_="foreignkey") - op.drop_index(op.f("ix_flow_user_id"), table_name="flow") - op.drop_column("flow", "user_id") - op.add_column("apikey", sa.Column("create_at", sa.DATETIME(), nullable=False)) - op.drop_constraint(None, "apikey", type_="foreignkey") - op.drop_index(op.f("ix_apikey_user_id"), table_name="apikey") - op.drop_index(op.f("ix_apikey_name"), table_name="apikey") - op.alter_column("apikey", "name", existing_type=sa.VARCHAR(), nullable=False) - op.drop_column("apikey", "user_id") - op.drop_column("apikey", "created_at") - # ### end Alembic commands ###