From 057c39d268cdd1827627d10192f4c2dd045ced6e Mon Sep 17 00:00:00 2001 From: Anthony Wright Date: Fri, 10 Jul 2026 11:33:00 -0500 Subject: [PATCH] Resolving Railway issue --- ...3f_normalize_segment_status_enum_values.py | 74 +++++++++++++++++++ backend/app/main.py | 15 +++- backend/scripts/reseed_demo.py | 13 +++- 3 files changed, 95 insertions(+), 7 deletions(-) create mode 100644 backend/alembic/versions/9a7b6c5d4e3f_normalize_segment_status_enum_values.py diff --git a/backend/alembic/versions/9a7b6c5d4e3f_normalize_segment_status_enum_values.py b/backend/alembic/versions/9a7b6c5d4e3f_normalize_segment_status_enum_values.py new file mode 100644 index 0000000..c9eb827 --- /dev/null +++ b/backend/alembic/versions/9a7b6c5d4e3f_normalize_segment_status_enum_values.py @@ -0,0 +1,74 @@ +"""Normalize segment status enum values + +Revision ID: 9a7b6c5d4e3f +Revises: f2b7c9d1e4a6 +Create Date: 2026-07-10 11:25:00.000000 + +""" +from alembic import op +import sqlalchemy as sa + + +revision = "9a7b6c5d4e3f" +down_revision = "f2b7c9d1e4a6" +branch_labels = None +depends_on = None + + +def _rename_segment_status_values(pairs: list[tuple[str, str]]) -> None: + conn = op.get_bind() + for old_value, new_value in pairs: + conn.execute( + sa.text( + """ + DO $$ + BEGIN + IF EXISTS ( + SELECT 1 + FROM pg_enum e + JOIN pg_type t ON t.oid = e.enumtypid + WHERE t.typname = 'segment_status_enum' + AND e.enumlabel = :old_value + ) + AND NOT EXISTS ( + SELECT 1 + FROM pg_enum e + JOIN pg_type t ON t.oid = e.enumtypid + WHERE t.typname = 'segment_status_enum' + AND e.enumlabel = :new_value + ) THEN + EXECUTE format( + 'ALTER TYPE segment_status_enum RENAME VALUE %L TO %L', + :old_value, + :new_value + ); + END IF; + END $$; + """ + ), + {"old_value": old_value, "new_value": new_value}, + ) + + +def upgrade() -> None: + _rename_segment_status_values( + [ + ("NOT_STARTED", "not_started"), + ("IN_PROGRESS", "in_progress"), + ("SKIPPED", "skipped"), + ("DELIVERED", "delivered"), + ("COMPLETED", "completed"), + ] + ) + + +def downgrade() -> None: + _rename_segment_status_values( + [ + ("not_started", "NOT_STARTED"), + ("in_progress", "IN_PROGRESS"), + ("skipped", "SKIPPED"), + ("delivered", "DELIVERED"), + ("completed", "COMPLETED"), + ] + ) diff --git a/backend/app/main.py b/backend/app/main.py index 340cc68..2600107 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -46,9 +46,18 @@ app.mount("/colorings", StaticFiles(directory=COLORINGS_PATH), name="colorings") app.mount("/badges", StaticFiles(directory=BADGES_PATH), name="badges") -allowed_origins = os.getenv( - "FRONTEND_URL", "http://localhost:4200,http://127.0.0.1:4200" -).split(",") + +def _parse_allowed_origins(raw_origins: str) -> list[str]: + return [ + origin.strip().rstrip("/") + for origin in raw_origins.split(",") + if origin.strip() + ] + + +allowed_origins = _parse_allowed_origins( + os.getenv("FRONTEND_URL", "http://localhost:4200,http://127.0.0.1:4200") +) app.add_middleware( CORSMiddleware, diff --git a/backend/scripts/reseed_demo.py b/backend/scripts/reseed_demo.py index 7aa748f..e156410 100644 --- a/backend/scripts/reseed_demo.py +++ b/backend/scripts/reseed_demo.py @@ -4,10 +4,15 @@ from pathlib import Path -REPO_ROOT = Path(__file__).resolve().parents[2] -BACKEND_ROOT = REPO_ROOT / "backend" -if str(BACKEND_ROOT) not in sys.path: - sys.path.insert(0, str(BACKEND_ROOT)) +SCRIPT_PATH = Path(__file__).resolve() +BACKEND_ROOT_CANDIDATES = ( + SCRIPT_PATH.parents[1], + SCRIPT_PATH.parents[2] / "backend", +) +for backend_root in BACKEND_ROOT_CANDIDATES: + if (backend_root / "app").exists() and str(backend_root) not in sys.path: + sys.path.insert(0, str(backend_root)) + break from app import seed_demo # noqa: E402 from app import seed_v2_demo # noqa: E402