"""email translation: a message's detected language, and translations kept ``messages.content_language``: NULL until the message is first shown, '' when the language could not be told. ``message_translations``: one translated HTML per message, target language and remote-images choice (app/translation.py); dropped with the message. Revision ID: 0030 Revises: 0029 Create Date: 2026-10-18 """ from __future__ import annotations from collections.abc import Sequence from alembic import op revision: str = "0030" down_revision: str | None = "0029" branch_labels: str | Sequence[str] | None = None depends_on: str | Sequence[str] | None = None def upgrade() -> None: op.execute("ALTER TABLE messages ADD COLUMN content_language text") op.execute( """ CREATE TABLE message_translations ( message_id uuid NOT NULL REFERENCES messages(id) ON DELETE CASCADE, target text NOT NULL, images boolean NOT NULL, source text NOT NULL, html text NOT NULL, sanitizer_v integer NOT NULL, created_at timestamptz NOT NULL DEFAULT now(), PRIMARY KEY (message_id, target, images) ) """ ) def downgrade() -> None: op.execute("DROP TABLE IF EXISTS message_translations") op.execute("ALTER TABLE messages DROP COLUMN IF EXISTS content_language")