make mg_globals.translations thread-safe
authorJakob Kramer <jakob.kramer@gmx.de>
Wed, 18 Jul 2012 17:25:53 +0000 (19:25 +0200)
committerJakob Kramer <jakob.kramer@gmx.de>
Wed, 18 Jul 2012 17:25:53 +0000 (19:25 +0200)
I added mg_globals.thread_scope (an instance of threading.local)
and made `translations' an attribute of it.

mediagoblin/mg_globals.py
mediagoblin/tools/template.py
mediagoblin/tools/translate.py

index 3bd2070de2143036eebbf621f0128fdbbb4703ba..fffa1ddae9f083e0aa49fc126607728e5dff6245 100644 (file)
@@ -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'])
index 72c87a99b7d739cf919f7a5f5b0ad9a8fcbe2ff4..158d532111f452a96ac293b057521b865db9177a 100644 (file)
@@ -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
index 33ee889a77ae848d7e9abddd21287c1223caa5c3..65f636bb5633a8245add51b7de8d521fb6427e26 100644 (file)
@@ -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)