mirror of
https://github.com/GNS3/gns3-server.git
synced 2026-11-03 05:51:15 +02:00
refactor: ruff autofixes
This commit is contained in:
455 files changed
+12322
-14762
No files matched your search
@@ -5,13 +5,14 @@ Revises: 98083573d011
|
||||
Create Date: 2026-03-03
|
||||
|
||||
"""
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy import inspect
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '20260303_create_llm_model_configs'
|
||||
down_revision = '98083573d011'
|
||||
revision = "20260303_create_llm_model_configs"
|
||||
down_revision = "98083573d011"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
@@ -25,43 +26,44 @@ def upgrade() -> None:
|
||||
# Check if table already exists (idempotent for databases created from code)
|
||||
tables = inspector.get_table_names()
|
||||
|
||||
if 'llm_model_configs' in tables:
|
||||
if "llm_model_configs" in tables:
|
||||
# Table already exists from Base.metadata.create_all, skip creation
|
||||
return
|
||||
|
||||
# Create llm_model_configs table with cross-database compatible types
|
||||
op.create_table(
|
||||
'llm_model_configs',
|
||||
sa.Column('config_id', sa.String(32), primary_key=True),
|
||||
sa.Column('name', sa.String(100), nullable=False),
|
||||
sa.Column('model_type', sa.String(50), nullable=False),
|
||||
sa.Column('config', sa.JSON(), nullable=False),
|
||||
sa.Column('user_id', sa.String(32), sa.ForeignKey('users.user_id', ondelete='CASCADE'), nullable=True),
|
||||
sa.Column('group_id', sa.String(32), sa.ForeignKey('user_groups.user_group_id', ondelete='CASCADE'), nullable=True),
|
||||
sa.Column('is_default', sa.Boolean(), default=False, nullable=False),
|
||||
sa.Column('version', sa.Integer(), nullable=False, server_default='0'),
|
||||
sa.Column('created_at', sa.DateTime(), nullable=True),
|
||||
sa.Column('updated_at', sa.DateTime(), nullable=True),
|
||||
"llm_model_configs",
|
||||
sa.Column("config_id", sa.String(32), primary_key=True),
|
||||
sa.Column("name", sa.String(100), nullable=False),
|
||||
sa.Column("model_type", sa.String(50), nullable=False),
|
||||
sa.Column("config", sa.JSON(), nullable=False),
|
||||
sa.Column("user_id", sa.String(32), sa.ForeignKey("users.user_id", ondelete="CASCADE"), nullable=True),
|
||||
sa.Column(
|
||||
"group_id", sa.String(32), sa.ForeignKey("user_groups.user_group_id", ondelete="CASCADE"), nullable=True
|
||||
),
|
||||
sa.Column("is_default", sa.Boolean(), default=False, nullable=False),
|
||||
sa.Column("version", sa.Integer(), nullable=False, server_default="0"),
|
||||
sa.Column("created_at", sa.DateTime(), nullable=True),
|
||||
sa.Column("updated_at", sa.DateTime(), nullable=True),
|
||||
sa.CheckConstraint(
|
||||
"(user_id IS NOT NULL AND group_id IS NULL) OR "
|
||||
"(user_id IS NULL AND group_id IS NOT NULL)",
|
||||
name='single_owner_check'
|
||||
"(user_id IS NOT NULL AND group_id IS NULL) OR (user_id IS NULL AND group_id IS NOT NULL)",
|
||||
name="single_owner_check",
|
||||
),
|
||||
sa.CheckConstraint(
|
||||
"model_type IN ('text', 'vision', 'stt', 'tts', 'multimodal', 'embedding', 'reranking', 'other')",
|
||||
name='valid_model_type_check'
|
||||
name="valid_model_type_check",
|
||||
),
|
||||
)
|
||||
|
||||
# Create indexes for efficient queries
|
||||
op.create_index('idx_llm_model_configs_user_id', 'llm_model_configs', ['user_id'])
|
||||
op.create_index('idx_llm_model_configs_group_id', 'llm_model_configs', ['group_id'])
|
||||
op.create_index('idx_llm_model_configs_model_type', 'llm_model_configs', ['model_type'])
|
||||
op.create_index("idx_llm_model_configs_user_id", "llm_model_configs", ["user_id"])
|
||||
op.create_index("idx_llm_model_configs_group_id", "llm_model_configs", ["group_id"])
|
||||
op.create_index("idx_llm_model_configs_model_type", "llm_model_configs", ["model_type"])
|
||||
|
||||
# PostgreSQL-specific indexes
|
||||
if dialect_name == 'postgresql':
|
||||
if dialect_name == "postgresql":
|
||||
# GIN index for JSONB config column
|
||||
op.create_index('idx_llm_model_configs_config', 'llm_model_configs', ['config'], postgresql_using='gin')
|
||||
op.create_index("idx_llm_model_configs_config", "llm_model_configs", ["config"], postgresql_using="gin")
|
||||
|
||||
# Partial unique indexes for default configs
|
||||
op.execute("""
|
||||
@@ -82,14 +84,14 @@ def downgrade() -> None:
|
||||
dialect_name = conn.dialect.name
|
||||
|
||||
# Drop indexes
|
||||
op.drop_index('idx_llm_model_configs_model_type', table_name='llm_model_configs')
|
||||
op.drop_index('idx_llm_model_configs_group_id', table_name='llm_model_configs')
|
||||
op.drop_index('idx_llm_model_configs_user_id', table_name='llm_model_configs')
|
||||
op.drop_index("idx_llm_model_configs_model_type", table_name="llm_model_configs")
|
||||
op.drop_index("idx_llm_model_configs_group_id", table_name="llm_model_configs")
|
||||
op.drop_index("idx_llm_model_configs_user_id", table_name="llm_model_configs")
|
||||
|
||||
if dialect_name == 'postgresql':
|
||||
op.drop_index('idx_llm_model_configs_config', table_name='llm_model_configs')
|
||||
op.drop_index('unique_user_default', table_name='llm_model_configs')
|
||||
op.drop_index('unique_group_default', table_name='llm_model_configs')
|
||||
if dialect_name == "postgresql":
|
||||
op.drop_index("idx_llm_model_configs_config", table_name="llm_model_configs")
|
||||
op.drop_index("unique_user_default", table_name="llm_model_configs")
|
||||
op.drop_index("unique_group_default", table_name="llm_model_configs")
|
||||
|
||||
# Drop table
|
||||
op.drop_table('llm_model_configs')
|
||||
op.drop_table("llm_model_configs")
|
||||
@@ -1,16 +1,17 @@
|
||||
"""init
|
||||
|
||||
Revision ID: 7ceeddd9c9a8
|
||||
Revises:
|
||||
Revises:
|
||||
Create Date: 2023-01-11 08:55:25.116126
|
||||
|
||||
"""
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '7ceeddd9c9a8'
|
||||
revision = "7ceeddd9c9a8"
|
||||
down_revision = None
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
+5
-4
@@ -5,22 +5,23 @@ Revises: f0b0de2a9
|
||||
Create Date: 2026-08-14 10:00:00.000000
|
||||
|
||||
"""
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '8f2a1c4e9d3b'
|
||||
down_revision = 'f0b0de2a9'
|
||||
revision = "8f2a1c4e9d3b"
|
||||
down_revision = "f0b0de2a9"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
|
||||
op.add_column('docker_templates', sa.Column('extra_configs', sa.JSON()))
|
||||
op.add_column("docker_templates", sa.Column("extra_configs", sa.JSON()))
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
|
||||
op.drop_column('docker_templates', 'extra_configs')
|
||||
op.drop_column("docker_templates", "extra_configs")
|
||||
@@ -5,22 +5,23 @@ Revises: 9a5292aa4389
|
||||
Create Date: 2026-02-23 18:23:59.857607
|
||||
|
||||
"""
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '98083573d011'
|
||||
down_revision = '9a5292aa4389'
|
||||
revision = "98083573d011"
|
||||
down_revision = "9a5292aa4389"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
|
||||
op.add_column('templates', sa.Column('tags', sa.String()))
|
||||
op.add_column("templates", sa.Column("tags", sa.String()))
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
|
||||
op.drop_column('templates', 'tags')
|
||||
op.drop_column("templates", "tags")
|
||||
@@ -5,23 +5,23 @@ Revises: 7ceeddd9c9a8
|
||||
Create Date: 2024-09-18 17:52:53.429522
|
||||
|
||||
"""
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '9a5292aa4389'
|
||||
down_revision = '7ceeddd9c9a8'
|
||||
revision = "9a5292aa4389"
|
||||
down_revision = "7ceeddd9c9a8"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
|
||||
op.add_column('docker_templates', sa.Column('mac_address', sa.String()))
|
||||
op.add_column("docker_templates", sa.Column("mac_address", sa.String()))
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
|
||||
op.drop_column('docker_templates', 'mac_address')
|
||||
|
||||
op.drop_column("docker_templates", "mac_address")
|
||||
@@ -5,33 +5,34 @@ Revises: aff810fc119a
|
||||
Create Date: 2026-05-26
|
||||
|
||||
"""
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
from uuid import uuid4
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'a8829e6c069b'
|
||||
down_revision = 'aff810fc119a'
|
||||
revision = "a8829e6c069b"
|
||||
down_revision = "aff810fc119a"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
privileges_table = sa.table(
|
||||
'privileges',
|
||||
sa.column('privilege_id', sa.String),
|
||||
sa.column('name', sa.String),
|
||||
sa.column('description', sa.String),
|
||||
"privileges",
|
||||
sa.column("privilege_id", sa.String),
|
||||
sa.column("name", sa.String),
|
||||
sa.column("description", sa.String),
|
||||
)
|
||||
|
||||
roles_table = sa.table(
|
||||
'roles',
|
||||
sa.column('role_id', sa.String),
|
||||
sa.column('name', sa.String),
|
||||
"roles",
|
||||
sa.column("role_id", sa.String),
|
||||
sa.column("name", sa.String),
|
||||
)
|
||||
|
||||
privilege_role_map = sa.table(
|
||||
'privilege_role_map',
|
||||
sa.column('privilege_id', sa.String),
|
||||
sa.column('role_id', sa.String),
|
||||
"privilege_role_map",
|
||||
sa.column("privilege_id", sa.String),
|
||||
sa.column("role_id", sa.String),
|
||||
)
|
||||
|
||||
|
||||
@@ -48,9 +49,7 @@ def upgrade() -> None:
|
||||
privilege_ids = {}
|
||||
for priv in new_privileges:
|
||||
result = conn.execute(
|
||||
sa.select(privileges_table.c.privilege_id).where(
|
||||
privileges_table.c.name == priv["name"]
|
||||
)
|
||||
sa.select(privileges_table.c.privilege_id).where(privileges_table.c.name == priv["name"])
|
||||
).fetchone()
|
||||
|
||||
if result:
|
||||
@@ -67,9 +66,7 @@ def upgrade() -> None:
|
||||
privilege_ids[priv["name"]] = priv_id
|
||||
|
||||
# Add LLMConfig.Audit and LLMConfig.Modify to the User role
|
||||
user_role = conn.execute(
|
||||
sa.select(roles_table.c.role_id).where(roles_table.c.name == "User")
|
||||
).fetchone()
|
||||
user_role = conn.execute(sa.select(roles_table.c.role_id).where(roles_table.c.name == "User")).fetchone()
|
||||
|
||||
if user_role:
|
||||
user_role_id = user_role[0]
|
||||
@@ -85,17 +82,13 @@ def upgrade() -> None:
|
||||
def downgrade() -> None:
|
||||
conn = op.get_bind()
|
||||
|
||||
user_role = conn.execute(
|
||||
sa.select(roles_table.c.role_id).where(roles_table.c.name == "User")
|
||||
).fetchone()
|
||||
user_role = conn.execute(sa.select(roles_table.c.role_id).where(roles_table.c.name == "User")).fetchone()
|
||||
|
||||
if user_role:
|
||||
user_role_id = user_role[0]
|
||||
for priv_name in ("LLMConfig.Audit", "LLMConfig.Modify"):
|
||||
priv = conn.execute(
|
||||
sa.select(privileges_table.c.privilege_id).where(
|
||||
privileges_table.c.name == priv_name
|
||||
)
|
||||
sa.select(privileges_table.c.privilege_id).where(privileges_table.c.name == priv_name)
|
||||
).fetchone()
|
||||
if priv:
|
||||
conn.execute(
|
||||
@@ -106,8 +99,4 @@ def downgrade() -> None:
|
||||
)
|
||||
|
||||
for priv_name in ("LLMConfig.Allocate", "LLMConfig.Audit", "LLMConfig.Modify"):
|
||||
conn.execute(
|
||||
privileges_table.delete().where(
|
||||
privileges_table.c.name == priv_name
|
||||
)
|
||||
)
|
||||
conn.execute(privileges_table.delete().where(privileges_table.c.name == priv_name))
|
||||
@@ -5,20 +5,22 @@ Revises: ec4b7b198555
|
||||
Create Date: 2026-04-06 19:49:12.155446
|
||||
|
||||
"""
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'aff810fc119a'
|
||||
down_revision = 'ec4b7b198555'
|
||||
revision = "aff810fc119a"
|
||||
down_revision = "ec4b7b198555"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
|
||||
op.add_column('users', sa.Column('token_version', sa.Integer(), nullable=False, server_default='0'))
|
||||
op.add_column("users", sa.Column("token_version", sa.Integer(), nullable=False, server_default="0"))
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
|
||||
op.drop_column('users', 'token_version')
|
||||
op.drop_column("users", "token_version")
|
||||
+5
-4
@@ -5,22 +5,23 @@ Revises: 8f2a1c4e9d3b
|
||||
Create Date: 2026-08-16 10:00:00.000000
|
||||
|
||||
"""
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'b3c7e2a91d4f'
|
||||
down_revision = '8f2a1c4e9d3b'
|
||||
revision = "b3c7e2a91d4f"
|
||||
down_revision = "8f2a1c4e9d3b"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
|
||||
op.add_column('templates', sa.Column('netmiko_device_type', sa.String()))
|
||||
op.add_column("templates", sa.Column("netmiko_device_type", sa.String()))
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
|
||||
op.drop_column('templates', 'netmiko_device_type')
|
||||
op.drop_column("templates", "netmiko_device_type")
|
||||
+5
-4
@@ -5,22 +5,23 @@ Revises: b3c7e2a91d4f
|
||||
Create Date: 2026-08-16 12:00:00.000000
|
||||
|
||||
"""
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'c7e4a9f1d2b6'
|
||||
down_revision = 'b3c7e2a91d4f'
|
||||
revision = "c7e4a9f1d2b6"
|
||||
down_revision = "b3c7e2a91d4f"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
|
||||
op.add_column('templates', sa.Column('appliance_metadata', sa.JSON()))
|
||||
op.add_column("templates", sa.Column("appliance_metadata", sa.JSON()))
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
|
||||
op.drop_column('templates', 'appliance_metadata')
|
||||
op.drop_column("templates", "appliance_metadata")
|
||||
+38
-36
@@ -5,12 +5,13 @@ Revises: 20260303_create_llm_model_configs
|
||||
Create Date: 2026-04-03 19:51:06.173013
|
||||
|
||||
"""
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'ec4b7b198555'
|
||||
down_revision = '20260303_create_llm_model_configs'
|
||||
revision = "ec4b7b198555"
|
||||
down_revision = "20260303_create_llm_model_configs"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
@@ -33,13 +34,13 @@ def convert_pickle_to_json(conn, table_name: str, column_name: str) -> None:
|
||||
json_data = json.dumps(data)
|
||||
conn.execute(
|
||||
sa.text(f"UPDATE {table_name} SET {column_name} = :data WHERE template_id = :template_id"),
|
||||
{"data": json_data, "template_id": row.template_id}
|
||||
{"data": json_data, "template_id": row.template_id},
|
||||
)
|
||||
else:
|
||||
# Set NULL if there is no data to be converted
|
||||
conn.execute(
|
||||
sa.text(f"UPDATE {table_name} SET {column_name} = NULL WHERE template_id = :template_id"),
|
||||
{"template_id": row.template_id}
|
||||
{"template_id": row.template_id},
|
||||
)
|
||||
|
||||
|
||||
@@ -61,13 +62,13 @@ def convert_json_to_pickle(conn, table_name: str, column_name: str) -> None:
|
||||
pickle_data = pickle.dumps(data)
|
||||
conn.execute(
|
||||
sa.text(f"UPDATE {table_name} SET {column_name} = :data WHERE template_id = :template_id"),
|
||||
{"data": pickle_data, "template_id": row.template_id}
|
||||
{"data": pickle_data, "template_id": row.template_id},
|
||||
)
|
||||
else:
|
||||
# Set NULL if there is no data to be converted
|
||||
conn.execute(
|
||||
sa.text(f"UPDATE {table_name} SET {column_name} = NULL WHERE template_id = :template_id"),
|
||||
{"template_id": row.template_id}
|
||||
{"template_id": row.template_id},
|
||||
)
|
||||
|
||||
|
||||
@@ -86,21 +87,22 @@ def upgrade() -> None:
|
||||
convert_pickle_to_json(conn, "virtualbox_templates", "custom_adapters")
|
||||
convert_pickle_to_json(conn, "vmware_templates", "custom_adapters")
|
||||
|
||||
with op.batch_alter_table('cloud_templates') as batch_op:
|
||||
batch_op.alter_column('ports_mapping', type_=sa.JSON())
|
||||
with op.batch_alter_table('docker_templates') as batch_op:
|
||||
batch_op.alter_column('extra_volumes', type_=sa.JSON())
|
||||
batch_op.alter_column('custom_adapters', type_=sa.JSON())
|
||||
with op.batch_alter_table('ethernet_hub_templates') as batch_op:
|
||||
batch_op.alter_column('ports_mapping', type_=sa.JSON())
|
||||
with op.batch_alter_table('ethernet_switch_templates') as batch_op:
|
||||
batch_op.alter_column('ports_mapping', type_=sa.JSON())
|
||||
with op.batch_alter_table('qemu_templates') as batch_op:
|
||||
batch_op.alter_column('custom_adapters', type_=sa.JSON())
|
||||
with op.batch_alter_table('virtualbox_templates') as batch_op:
|
||||
batch_op.alter_column('custom_adapters', type_=sa.JSON())
|
||||
with op.batch_alter_table('vmware_templates') as batch_op:
|
||||
batch_op.alter_column('custom_adapters', type_=sa.JSON())
|
||||
with op.batch_alter_table("cloud_templates") as batch_op:
|
||||
batch_op.alter_column("ports_mapping", type_=sa.JSON())
|
||||
with op.batch_alter_table("docker_templates") as batch_op:
|
||||
batch_op.alter_column("extra_volumes", type_=sa.JSON())
|
||||
batch_op.alter_column("custom_adapters", type_=sa.JSON())
|
||||
with op.batch_alter_table("ethernet_hub_templates") as batch_op:
|
||||
batch_op.alter_column("ports_mapping", type_=sa.JSON())
|
||||
with op.batch_alter_table("ethernet_switch_templates") as batch_op:
|
||||
batch_op.alter_column("ports_mapping", type_=sa.JSON())
|
||||
with op.batch_alter_table("qemu_templates") as batch_op:
|
||||
batch_op.alter_column("custom_adapters", type_=sa.JSON())
|
||||
with op.batch_alter_table("virtualbox_templates") as batch_op:
|
||||
batch_op.alter_column("custom_adapters", type_=sa.JSON())
|
||||
with op.batch_alter_table("vmware_templates") as batch_op:
|
||||
batch_op.alter_column("custom_adapters", type_=sa.JSON())
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
|
||||
@@ -117,18 +119,18 @@ def downgrade() -> None:
|
||||
convert_json_to_pickle(conn, "virtualbox_templates", "custom_adapters")
|
||||
convert_json_to_pickle(conn, "vmware_templates", "custom_adapters")
|
||||
|
||||
with op.batch_alter_table('cloud_templates') as batch_op:
|
||||
batch_op.alter_column('ports_mapping', type_=sa.PickleType())
|
||||
with op.batch_alter_table('docker_templates') as batch_op:
|
||||
batch_op.alter_column('extra_volumes', type_=sa.PickleType())
|
||||
batch_op.alter_column('custom_adapters', type_=sa.PickleType())
|
||||
with op.batch_alter_table('ethernet_hub_templates') as batch_op:
|
||||
batch_op.alter_column('ports_mapping', type_=sa.PickleType())
|
||||
with op.batch_alter_table('ethernet_switch_templates') as batch_op:
|
||||
batch_op.alter_column('ports_mapping', type_=sa.PickleType())
|
||||
with op.batch_alter_table('qemu_templates') as batch_op:
|
||||
batch_op.alter_column('custom_adapters', type_=sa.PickleType())
|
||||
with op.batch_alter_table('virtualbox_templates') as batch_op:
|
||||
batch_op.alter_column('custom_adapters', type_=sa.PickleType())
|
||||
with op.batch_alter_table('vmware_templates') as batch_op:
|
||||
batch_op.alter_column('custom_adapters', type_=sa.PickleType())
|
||||
with op.batch_alter_table("cloud_templates") as batch_op:
|
||||
batch_op.alter_column("ports_mapping", type_=sa.PickleType())
|
||||
with op.batch_alter_table("docker_templates") as batch_op:
|
||||
batch_op.alter_column("extra_volumes", type_=sa.PickleType())
|
||||
batch_op.alter_column("custom_adapters", type_=sa.PickleType())
|
||||
with op.batch_alter_table("ethernet_hub_templates") as batch_op:
|
||||
batch_op.alter_column("ports_mapping", type_=sa.PickleType())
|
||||
with op.batch_alter_table("ethernet_switch_templates") as batch_op:
|
||||
batch_op.alter_column("ports_mapping", type_=sa.PickleType())
|
||||
with op.batch_alter_table("qemu_templates") as batch_op:
|
||||
batch_op.alter_column("custom_adapters", type_=sa.PickleType())
|
||||
with op.batch_alter_table("virtualbox_templates") as batch_op:
|
||||
batch_op.alter_column("custom_adapters", type_=sa.PickleType())
|
||||
with op.batch_alter_table("vmware_templates") as batch_op:
|
||||
batch_op.alter_column("custom_adapters", type_=sa.PickleType())
|
||||
@@ -5,13 +5,14 @@ Revises: a8829e6c069b
|
||||
Create Date: 2026-06-11 10:00:00.000000
|
||||
|
||||
"""
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
import gns3server.db.models.base as models
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'f0b0de2a9'
|
||||
down_revision = 'a8829e6c069b'
|
||||
revision = "f0b0de2a9"
|
||||
down_revision = "a8829e6c069b"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
@@ -19,25 +20,25 @@ depends_on = None
|
||||
def upgrade() -> None:
|
||||
|
||||
op.create_table(
|
||||
'api_keys',
|
||||
sa.Column('api_key_id', models.GUID(), nullable=False),
|
||||
sa.Column('user_id', models.GUID(), nullable=False),
|
||||
sa.Column('name', sa.String(128), nullable=False),
|
||||
sa.Column('key_hash', sa.String(128), nullable=False),
|
||||
sa.Column('key_prefix', sa.String(8), nullable=False),
|
||||
sa.Column('last_used_at', sa.DateTime(), nullable=True),
|
||||
sa.Column('created_at', sa.DateTime(), server_default=sa.func.current_timestamp(), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(), server_default=sa.func.current_timestamp(), nullable=False),
|
||||
sa.Column('revoked', sa.Boolean(), default=False, nullable=False),
|
||||
sa.ForeignKeyConstraint(['user_id'], ['users.user_id'], ondelete='CASCADE'),
|
||||
sa.PrimaryKeyConstraint('api_key_id'),
|
||||
"api_keys",
|
||||
sa.Column("api_key_id", models.GUID(), nullable=False),
|
||||
sa.Column("user_id", models.GUID(), nullable=False),
|
||||
sa.Column("name", sa.String(128), nullable=False),
|
||||
sa.Column("key_hash", sa.String(128), nullable=False),
|
||||
sa.Column("key_prefix", sa.String(8), nullable=False),
|
||||
sa.Column("last_used_at", sa.DateTime(), nullable=True),
|
||||
sa.Column("created_at", sa.DateTime(), server_default=sa.func.current_timestamp(), nullable=False),
|
||||
sa.Column("updated_at", sa.DateTime(), server_default=sa.func.current_timestamp(), nullable=False),
|
||||
sa.Column("revoked", sa.Boolean(), default=False, nullable=False),
|
||||
sa.ForeignKeyConstraint(["user_id"], ["users.user_id"], ondelete="CASCADE"),
|
||||
sa.PrimaryKeyConstraint("api_key_id"),
|
||||
)
|
||||
op.create_index('ix_api_keys_user_id', 'api_keys', ['user_id'])
|
||||
op.create_index('ix_api_keys_key_hash', 'api_keys', ['key_hash'])
|
||||
op.create_index("ix_api_keys_user_id", "api_keys", ["user_id"])
|
||||
op.create_index("ix_api_keys_key_hash", "api_keys", ["key_hash"])
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
|
||||
op.drop_index('ix_api_keys_key_hash', table_name='api_keys')
|
||||
op.drop_index('ix_api_keys_user_id', table_name='api_keys')
|
||||
op.drop_table('api_keys')
|
||||
op.drop_index("ix_api_keys_key_hash", table_name="api_keys")
|
||||
op.drop_index("ix_api_keys_user_id", table_name="api_keys")
|
||||
op.drop_table("api_keys")
|
||||
Reference in new issue
Block a user