refactor: finish declutter - test_flow removal, NOT NULL schema, parametrized tests, smoke harness, docs

This commit is contained in:
Jonas Miederer 2026-10-01 00:11:43 +02:00
parent 696db34c90
commit 92bb3bacba
23 changed files with 552 additions and 1261 deletions

View file

@ -0,0 +1,65 @@
"""Backfill + require FlowVersion.input_schema.
Revision ID: e8f3a1c2b4d6
Revises: c4d8f2a1e6b9
Create Date: 2026-09-30 00:00:00.000000
Pre-Phase-3 rows have input_schema NULL. Backfill them from the stored
langflow_json (same parser the write choke point uses); unparseable rows
get the textarea fallback so reads never crash. Then enforce NOT NULL.
"""
from collections.abc import Sequence
import sqlalchemy as sa
from alembic import op
# revision identifiers, used by Alembic.
revision: str = "e8f3a1c2b4d6"
down_revision: str | Sequence[str] | None = "c4d8f2a1e6b9"
branch_labels: str | Sequence[str] | None = None
depends_on: str | Sequence[str] | None = None
_FALLBACK = {
"json_schema": {"type": "object", "properties": {}},
"ui_schema": {},
"fallback": "textarea",
}
def _derive(langflow_json) -> dict:
import json as stdlib_json
try:
from app.flows import input_schema as parser
if isinstance(langflow_json, str):
# SQLite stores JSON columns as TEXT; Postgres returns dict.
langflow_json = stdlib_json.loads(langflow_json)
return parser.extract_form_schema(langflow_json)
except Exception: # noqa: BLE001 -- backfill must never fail the migration
return dict(_FALLBACK)
def upgrade() -> None:
"""Upgrade schema."""
import json as stdlib_json
connection = op.get_bind()
rows = connection.execute(
sa.text("SELECT id, langflow_json FROM flow_versions WHERE input_schema IS NULL")
).all()
for row_id, langflow_json in rows:
schema = _derive(langflow_json)
connection.execute(
sa.text("UPDATE flow_versions SET input_schema = :schema WHERE id = :id"),
{"schema": stdlib_json.dumps(schema), "id": str(row_id)},
)
with op.batch_alter_table("flow_versions") as batch:
batch.alter_column("input_schema", existing_type=sa.JSON(), nullable=False)
def downgrade() -> None:
"""Downgrade schema (data kept, nullability restored)."""
with op.batch_alter_table("flow_versions") as batch:
batch.alter_column("input_schema", existing_type=sa.JSON(), nullable=True)