"""add object metadata columns to upload_sessions Stores file_name / usage_type / visibility / is_immutable at session creation so the server-proxied PUT step can build the StorageObjects row without re-sending them. Replaces the old CompleteUploadRequest payload that bridged the presign-PUT and head()-validate steps. Revision ID: c3d4e5f6a7b8 Revises: a2b3c4d5e6f7 Create Date: 2026-08-05 12:00:00 """ from collections.abc import Sequence from alembic import op import sqlalchemy as sa revision: str = "c3d4e5f6a7b8" down_revision: str | Sequence[str] | None = "a2b3c4d5e6f7" branch_labels: str | Sequence[str] | None = None depends_on: str | Sequence[str] | None = None def upgrade() -> None: op.add_column( "upload_sessions", sa.Column( "file_name", sa.String(length=255), nullable=False, server_default="", ), ) op.add_column( "upload_sessions", sa.Column( "usage_type", sa.String(length=32), nullable=False, server_default="working_copy", comment=( "data_resource/version_artifact/snapshot/run_log/run_result/" "working_copy/public_script" ), ), ) op.add_column( "upload_sessions", sa.Column( "visibility", sa.String(length=16), nullable=False, server_default="private", comment="private/workspace/public", ), ) op.add_column( "upload_sessions", sa.Column( "is_immutable", sa.TINYINT(1), nullable=False, server_default="0", ), ) def downgrade() -> None: op.drop_column("upload_sessions", "is_immutable") op.drop_column("upload_sessions", "visibility") op.drop_column("upload_sessions", "usage_type") op.drop_column("upload_sessions", "file_name")