From c80982c7a0d64f01cb4dd44bfde334782f2a72c0 Mon Sep 17 00:00:00 2001 From: Jakob Kramer Date: Wed, 18 Jul 2012 19:25:53 +0200 Subject: [PATCH] make mg_globals.translations thread-safe I added mg_globals.thread_scope (an instance of threading.local) and made `translations' an attribute of it. --- mediagoblin/mg_globals.py | 6 +++++- mediagoblin/tools/template.py | 4 ++-- mediagoblin/tools/translate.py | 9 ++++----- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/mediagoblin/mg_globals.py b/mediagoblin/mg_globals.py index 3bd2070d..fffa1dda 100644 --- a/mediagoblin/mg_globals.py +++ b/mediagoblin/mg_globals.py @@ -19,6 +19,7 @@ In some places, we need to access the database, public_store, queue_store import gettext import pkg_resources +import threading ############################# @@ -41,8 +42,11 @@ queue_store = None # A WorkBenchManager workbench_manager = None +# A thread-local scope +thread_scope = threading.local() + # gettext -translations = gettext.find( +thread_scope.translations = gettext.find( 'mediagoblin', pkg_resources.resource_filename( 'mediagoblin', 'translations'), ['en']) diff --git a/mediagoblin/tools/template.py b/mediagoblin/tools/template.py index 72c87a99..158d5321 100644 --- a/mediagoblin/tools/template.py +++ b/mediagoblin/tools/template.py @@ -49,8 +49,8 @@ def get_jinja_env(template_loader, locale): extensions=['jinja2.ext.i18n', 'jinja2.ext.autoescape']) template_env.install_gettext_callables( - mg_globals.translations.ugettext, - mg_globals.translations.ungettext) + mg_globals.thread_scope.translations.ugettext, + mg_globals.thread_scope.translations.ungettext) # All templates will know how to ... # ... fetch all waiting messages and remove them from the queue diff --git a/mediagoblin/tools/translate.py b/mediagoblin/tools/translate.py index 33ee889a..65f636bb 100644 --- a/mediagoblin/tools/translate.py +++ b/mediagoblin/tools/translate.py @@ -100,7 +100,7 @@ def setup_gettext(locale): # TODO: fallback nicely on translations from pt_PT to pt if not # available, etc. - if SETUP_GETTEXTS.has_key(locale): + if locale in SETUP_GETTEXTS: this_gettext = SETUP_GETTEXTS[locale] else: this_gettext = gettext.translation( @@ -108,8 +108,7 @@ def setup_gettext(locale): if exists(locale): SETUP_GETTEXTS[locale] = this_gettext - mg_globals.setup_globals( - translations=this_gettext) + mg_globals.thread_scope.translations = this_gettext # Force en to be setup before anything else so that @@ -124,7 +123,7 @@ def pass_to_ugettext(*args, **kwargs): The reason we can't have a global ugettext method is because mg_globals gets swapped out by the application per-request. """ - return mg_globals.translations.ugettext( + return mg_globals.thread_scope.translations.ugettext( *args, **kwargs) @@ -146,7 +145,7 @@ def pass_to_ngettext(*args, **kwargs): The reason we can't have a global ngettext method is because mg_globals gets swapped out by the application per-request. """ - return mg_globals.translations.ngettext( + return mg_globals.thread_scope.translations.ngettext( *args, **kwargs) -- 2.25.1