From d715f2d32f3da32e511dd56779cd05b09f2758eb Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Sat, 16 Nov 2019 19:58:55 +0100 Subject: Manage migrations before overload translation is initialized --- overload_translation/utils.py | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) (limited to 'overload_translation/utils.py') diff --git a/overload_translation/utils.py b/overload_translation/utils.py index 2b9b69ab0..575de0102 100644 --- a/overload_translation/utils.py +++ b/overload_translation/utils.py @@ -1,5 +1,6 @@ from django.conf import settings from django.core.cache import cache +from django.db import connection from django.db.utils import DatabaseError from django.utils.functional import lazy from django.utils.translation import ugettext as _, pgettext as _p, get_language @@ -12,6 +13,35 @@ from overload_translation import models NO_VALUE = "<>" +def check_db_is_init(): + """ + Not yet initialized for first migrations + """ + with connection.cursor() as cursor: + sql = """SELECT EXISTS ( + SELECT 1 FROM information_schema.tables + WHERE table_name = 'overload_translation_translationoverload');""" + cursor.execute(sql) + res = cursor.fetchall() + return res and res[0][0] + + +def check_has_translations(): + if not check_db_is_init(): + return False + try: + nb = models.TranslationOverload.objects.count() + except DatabaseError: + return False + has_translation_key = "{}-has-dynamic-translation".format( + settings.PROJECT_SLUG) + if not nb: + cache.set(has_translation_key, False, settings.CACHE_TIMEOUT) + return False + cache.set(has_translation_key, True, settings.CACHE_TIMEOUT) + return True + + def simple_trans(message, context): if context: s = _p(context, message) @@ -33,14 +63,7 @@ def ugettext(message, context=""): if has_translations is False: return simple_trans(message, context) elif has_translations is None: - try: - nb = models.TranslationOverload.objects.count() - except DatabaseError: - return simple_trans(message, context) - if nb: - cache.set(has_translation_key, True, settings.CACHE_TIMEOUT) - else: - cache.set(has_translation_key, False, settings.CACHE_TIMEOUT) + if not check_has_translations(): return simple_trans(message, context) current_language = get_language() if not current_language: -- cgit v1.2.3