language-learning-app/api/alembic/versions/20260523_0019_add_procrastinate_schema.py
wilson fecb5839ea
Some checks failed
/ test (push) Has been cancelled
feats: use Procrastinate for persistant jobs; try using Gemini for text
generation
2026-05-27 18:45:52 +01:00

56 lines
2.6 KiB
Python

"""add procrastinate schema
Revision ID: 0019
Revises: 0018
Create Date: 2026-05-23
"""
from typing import Sequence, Union
from alembic import op
revision: str = "0019"
down_revision: Union[str, None] = "0018"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
from procrastinate.schema import SchemaManager
from app.config import settings
import psycopg
schema_sql = SchemaManager.get_schema()
# asyncpg (used by SQLAlchemy async) cannot execute multi-statement DDL via
# its prepare() path, so we open a direct psycopg connection instead.
with psycopg.connect(settings.procrastinate_database_url, autocommit=True) as conn:
conn.execute(schema_sql)
def downgrade() -> None:
op.execute("""
DROP TABLE IF EXISTS procrastinate_events CASCADE;
DROP TABLE IF EXISTS procrastinate_periodic_defers CASCADE;
DROP TABLE IF EXISTS procrastinate_jobs CASCADE;
DROP TABLE IF EXISTS procrastinate_workers CASCADE;
DROP FUNCTION IF EXISTS procrastinate_defer_jobs_v1 CASCADE;
DROP FUNCTION IF EXISTS procrastinate_defer_periodic_job_v2 CASCADE;
DROP FUNCTION IF EXISTS procrastinate_fetch_job_v2 CASCADE;
DROP FUNCTION IF EXISTS procrastinate_finish_job_v1 CASCADE;
DROP FUNCTION IF EXISTS procrastinate_cancel_job_v1 CASCADE;
DROP FUNCTION IF EXISTS procrastinate_retry_job_v1 CASCADE;
DROP FUNCTION IF EXISTS procrastinate_retry_job_v2 CASCADE;
DROP FUNCTION IF EXISTS procrastinate_notify_queue_job_inserted_v1 CASCADE;
DROP FUNCTION IF EXISTS procrastinate_notify_queue_abort_job_v1 CASCADE;
DROP FUNCTION IF EXISTS procrastinate_trigger_function_status_events_insert_v1 CASCADE;
DROP FUNCTION IF EXISTS procrastinate_trigger_function_status_events_update_v1 CASCADE;
DROP FUNCTION IF EXISTS procrastinate_trigger_function_scheduled_events_v1 CASCADE;
DROP FUNCTION IF EXISTS procrastinate_trigger_abort_requested_events_procedure_v1 CASCADE;
DROP FUNCTION IF EXISTS procrastinate_unlink_periodic_defers_v1 CASCADE;
DROP FUNCTION IF EXISTS procrastinate_register_worker_v1 CASCADE;
DROP FUNCTION IF EXISTS procrastinate_unregister_worker_v1 CASCADE;
DROP FUNCTION IF EXISTS procrastinate_update_heartbeat_v1 CASCADE;
DROP FUNCTION IF EXISTS procrastinate_prune_stalled_workers_v1 CASCADE;
DROP TYPE IF EXISTS procrastinate_job_to_defer_v1 CASCADE;
DROP TYPE IF EXISTS procrastinate_job_event_type CASCADE;
DROP TYPE IF EXISTS procrastinate_job_status CASCADE;
""")