Files
office_translator/alembic/versions/b7c8d9e0f1a2_set_multilingual_target_language.py
sepehr ebfa784b0a
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 2m4s
fix: also rename multilingual glossaries from 'Anglais' to 'Multilingue' in migration
The migration already sets target_language='multi' but the glossary name
in the DB still said 'Français → Anglais'. Now it renames them to
'Français → Multilingue' so users aren't confused when translating to
Persian, Arabic, etc.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 22:48:29 +02:00

63 lines
1.9 KiB
Python

"""Set multilingual glossaries target_language to 'multi'
Revision ID: b7c8d9e0f1a2
Revises: f6a7b8c9d0e1
Create Date: 2026-05-31
Glossary templates that were enriched with multilingual translations
(via enrich_glossary_templates.py) contain translations for 11 languages
(de, es, it, pt, nl, ru, ja, ko, zh, ar, fa) in each term's translations
field. These should be marked as target_language='multi' instead of 'en'.
This migration detects glossaries whose terms have multilingual translations
and sets their target_language to 'multi'.
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers
revision = "b7c8d9e0f1a2"
down_revision = "f6a7b8c9d0e1"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
# Glossaries with terms containing 5+ translation keys are multilingual templates
# (enriched glossaries have 11 translations: de, es, it, pt, nl, ru, ja, ko, zh, ar, fa)
op.execute("""
UPDATE glossaries
SET target_language = 'multi'
WHERE id IN (
SELECT DISTINCT g.id
FROM glossaries g
JOIN glossary_terms gt ON gt.glossary_id = g.id
WHERE gt.translations IS NOT NULL
AND jsonb_typeof(gt.translations) = 'object'
AND (
SELECT count(*)
FROM jsonb_object_keys(gt.translations)
) >= 5
)
""")
# Also rename glossaries: replace "Anglais" with "Multilingue" in the name
op.execute("""
UPDATE glossaries
SET name = REPLACE(name, 'Anglais', 'Multilingue')
WHERE target_language = 'multi'
AND name LIKE '%%Anglais%%'
""")
def downgrade() -> None:
# Revert multilingual glossaries back to 'en'
op.execute("""
UPDATE glossaries
SET target_language = 'en'
WHERE target_language = 'multi'
""")