summaryrefslogtreecommitdiff
path: root/testapp/exam/language_registry.py
diff options
context:
space:
mode:
Diffstat (limited to 'testapp/exam/language_registry.py')
-rw-r--r--testapp/exam/language_registry.py30
1 files changed, 22 insertions, 8 deletions
diff --git a/testapp/exam/language_registry.py b/testapp/exam/language_registry.py
index 4d56de2..8700d32 100644
--- a/testapp/exam/language_registry.py
+++ b/testapp/exam/language_registry.py
@@ -1,17 +1,31 @@
-#!/usr/bin/env python
+from settings import language_register
+registry = None
-class LanguageRegistry(object):
+def set_registry():
+ globals registry = _LanguageRegistry()
+
+def get_registry():
+ return registry
+
+class _LanguageRegistry(object):
def __init__(self):
- self._registry = {}
+ for language, module in language_register.iteritems():
+ self._register[language] = None
# Public Protocol ##########
def get_class(self, language):
- return self._registry[language]
+ if not self._register[language]:
+ self._register[language] = language_register[language]
- # Public Protocol ##########
- def register(self, language, cls):
- self._registry[language] = cls
+ cls = self._register[language]
+ module_name, class_name = cls.split(".")
+ # load the module, will raise ImportError if module cannot be loaded
+ get_module = importlib.import_module(module_name)
+ # get the class, will raise AttributeError if class cannot be found
+ get_class = getattr(get_module, class_name)
+ return get_class
+ # def register(self, language, cls):
+ # self._register[language] = cls
-registry = LanguageRegistry()