summaryrefslogtreecommitdiff
path: root/testapp/exam/language_registry.py
diff options
context:
space:
mode:
authorPrabhu Ramachandran2015-07-31 12:49:57 +0530
committerPrabhu Ramachandran2015-07-31 12:49:57 +0530
commit0225aad1492600ed53504b0986fd13da24c28ae9 (patch)
tree06e1598081ed64fcc2b034a0cac263f7fe46e354 /testapp/exam/language_registry.py
parentbbb991f8c6dbbcc6d12e93f3574ffcfbec2cb810 (diff)
parent3f0bb01600535b105c265e9da63814af06c0ab9d (diff)
downloadonline_test-0225aad1492600ed53504b0986fd13da24c28ae9.tar.gz
online_test-0225aad1492600ed53504b0986fd13da24c28ae9.tar.bz2
online_test-0225aad1492600ed53504b0986fd13da24c28ae9.zip
Merge pull request #51 from ankitjavalkar/add-travis
Add travis CI
Diffstat (limited to 'testapp/exam/language_registry.py')
-rw-r--r--testapp/exam/language_registry.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/testapp/exam/language_registry.py b/testapp/exam/language_registry.py
new file mode 100644
index 0000000..76a23d7
--- /dev/null
+++ b/testapp/exam/language_registry.py
@@ -0,0 +1,36 @@
+from settings import code_evaluators
+import importlib
+
+registry = None
+
+def set_registry():
+ global registry
+ registry = _LanguageRegistry()
+
+def get_registry():
+ return registry
+
+class _LanguageRegistry(object):
+ def __init__(self):
+ self._register = {}
+ for language, module in code_evaluators.iteritems():
+ self._register[language] = None
+
+ # Public Protocol ##########
+ def get_class(self, language):
+ """ Get the code evaluator class for the given language """
+ if not self._register.get(language):
+ self._register[language] = code_evaluators.get(language)
+
+ cls = self._register[language]
+ module_name, class_name = cls.rsplit(".", 1)
+ # 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, class_name):
+ """ Register a new code evaluator class for language"""
+ self._register[language] = class_name
+