feat(skills): add metadata and branch fields to skill packs and marketplace skills
This commit is contained in:
@@ -23,6 +23,13 @@ def _has_table(table_name: str) -> bool:
|
||||
return sa.inspect(op.get_bind()).has_table(table_name)
|
||||
|
||||
|
||||
def _has_column(table_name: str, column_name: str) -> bool:
|
||||
if not _has_table(table_name):
|
||||
return False
|
||||
columns = sa.inspect(op.get_bind()).get_columns(table_name)
|
||||
return any(column["name"] == column_name for column in columns)
|
||||
|
||||
|
||||
def _has_index(table_name: str, index_name: str) -> bool:
|
||||
if not _has_table(table_name):
|
||||
return False
|
||||
@@ -30,6 +37,13 @@ def _has_index(table_name: str, index_name: str) -> bool:
|
||||
return any(index["name"] == index_name for index in indexes)
|
||||
|
||||
|
||||
def _has_constraint(table_name: str, constraint_name: str) -> bool:
|
||||
if not _has_table(table_name):
|
||||
return False
|
||||
constraints = sa.inspect(op.get_bind()).get_check_constraints(table_name)
|
||||
return any(constraint["name"] == constraint_name for constraint in constraints)
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
if not _has_table("marketplace_skills"):
|
||||
op.create_table(
|
||||
@@ -42,6 +56,12 @@ def upgrade() -> None:
|
||||
sa.Column("risk", sqlmodel.sql.sqltypes.AutoString(), nullable=True),
|
||||
sa.Column("source", sqlmodel.sql.sqltypes.AutoString(), nullable=True),
|
||||
sa.Column("source_url", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
||||
sa.Column(
|
||||
"metadata",
|
||||
sa.JSON(),
|
||||
nullable=False,
|
||||
server_default=sa.text("'{}'"),
|
||||
),
|
||||
sa.Column("created_at", sa.DateTime(), nullable=False),
|
||||
sa.Column("updated_at", sa.DateTime(), nullable=False),
|
||||
sa.ForeignKeyConstraint(
|
||||
@@ -55,6 +75,32 @@ def upgrade() -> None:
|
||||
name="uq_marketplace_skills_org_source_url",
|
||||
),
|
||||
)
|
||||
if not _has_column("marketplace_skills", "metadata"):
|
||||
op.add_column(
|
||||
"marketplace_skills",
|
||||
sa.Column(
|
||||
"metadata",
|
||||
sa.JSON(),
|
||||
nullable=False,
|
||||
server_default=sa.text("'{}'"),
|
||||
),
|
||||
)
|
||||
if _has_column("marketplace_skills", "resolution_metadata") and not _has_column(
|
||||
"marketplace_skills", "metadata",
|
||||
):
|
||||
op.execute(
|
||||
sa.text(
|
||||
"UPDATE marketplace_skills SET metadata = resolution_metadata WHERE resolution_metadata IS NOT NULL"
|
||||
)
|
||||
)
|
||||
elif _has_column("marketplace_skills", "path_metadata") and not _has_column(
|
||||
"marketplace_skills", "metadata"
|
||||
):
|
||||
op.execute(
|
||||
sa.text(
|
||||
"UPDATE marketplace_skills SET metadata = path_metadata WHERE path_metadata IS NOT NULL"
|
||||
)
|
||||
)
|
||||
|
||||
marketplace_org_idx = op.f("ix_marketplace_skills_organization_id")
|
||||
if not _has_index("marketplace_skills", marketplace_org_idx):
|
||||
@@ -116,6 +162,18 @@ def upgrade() -> None:
|
||||
sa.Column("name", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
||||
sa.Column("description", sqlmodel.sql.sqltypes.AutoString(), nullable=True),
|
||||
sa.Column("source_url", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
||||
sa.Column(
|
||||
"branch",
|
||||
sqlmodel.sql.sqltypes.AutoString(),
|
||||
nullable=False,
|
||||
server_default=sa.text("'main'"),
|
||||
),
|
||||
sa.Column(
|
||||
"metadata",
|
||||
sa.JSON(),
|
||||
nullable=False,
|
||||
server_default=sa.text("'{}'"),
|
||||
),
|
||||
sa.Column("created_at", sa.DateTime(), nullable=False),
|
||||
sa.Column("updated_at", sa.DateTime(), nullable=False),
|
||||
sa.ForeignKeyConstraint(
|
||||
@@ -129,6 +187,51 @@ def upgrade() -> None:
|
||||
name="uq_skill_packs_org_source_url",
|
||||
),
|
||||
)
|
||||
if not _has_constraint(
|
||||
"skill_packs",
|
||||
"ck_skill_packs_source_url_github",
|
||||
):
|
||||
op.create_check_constraint(
|
||||
"ck_skill_packs_source_url_github",
|
||||
"skill_packs",
|
||||
"source_url LIKE 'https://github.com/%/%'",
|
||||
)
|
||||
if not _has_column("skill_packs", "branch"):
|
||||
op.add_column(
|
||||
"skill_packs",
|
||||
sa.Column(
|
||||
"branch",
|
||||
sqlmodel.sql.sqltypes.AutoString(),
|
||||
nullable=False,
|
||||
server_default=sa.text("'main'"),
|
||||
),
|
||||
)
|
||||
if not _has_column("skill_packs", "metadata"):
|
||||
op.add_column(
|
||||
"skill_packs",
|
||||
sa.Column(
|
||||
"metadata",
|
||||
sa.JSON(),
|
||||
nullable=False,
|
||||
server_default=sa.text("'{}'"),
|
||||
),
|
||||
)
|
||||
if _has_column("skill_packs", "resolution_metadata") and not _has_column(
|
||||
"skill_packs", "metadata"
|
||||
):
|
||||
op.execute(
|
||||
sa.text(
|
||||
"UPDATE skill_packs SET metadata = resolution_metadata WHERE resolution_metadata IS NOT NULL"
|
||||
)
|
||||
)
|
||||
elif _has_column("skill_packs", "path_metadata") and not _has_column(
|
||||
"skill_packs", "metadata"
|
||||
):
|
||||
op.execute(
|
||||
sa.text(
|
||||
"UPDATE skill_packs SET metadata = path_metadata WHERE path_metadata IS NOT NULL"
|
||||
)
|
||||
)
|
||||
|
||||
skill_packs_org_idx = op.f("ix_skill_packs_organization_id")
|
||||
if not _has_index("skill_packs", skill_packs_org_idx):
|
||||
@@ -141,6 +244,14 @@ def upgrade() -> None:
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
skill_pack_github_constraint = "ck_skill_packs_source_url_github"
|
||||
if _has_constraint("skill_packs", skill_pack_github_constraint):
|
||||
op.drop_constraint(
|
||||
skill_pack_github_constraint,
|
||||
"skill_packs",
|
||||
type_="check",
|
||||
)
|
||||
|
||||
skill_packs_org_idx = op.f("ix_skill_packs_organization_id")
|
||||
if _has_index("skill_packs", skill_packs_org_idx):
|
||||
op.drop_index(
|
||||
|
||||
Reference in New Issue
Block a user