summaryrefslogtreecommitdiff
path: root/yaksh/language_registry.py
diff options
context:
space:
mode:
authorPrabhu Ramachandran2016-05-10 20:09:08 +0530
committerPrabhu Ramachandran2016-05-10 20:09:08 +0530
commit5c74697b00ea08a2b78615637d8b322410fca4b0 (patch)
treed5b937e90bc7d3051b9c9128c4e1560b09db1c2c /yaksh/language_registry.py
parentd386d24aaa662f91e4314060926dc9bc02426c7d (diff)
parentc384c60c6d7fb5d30f3f929c518e0b41e084c4c4 (diff)
downloadonline_test-5c74697b00ea08a2b78615637d8b322410fca4b0.tar.gz
online_test-5c74697b00ea08a2b78615637d8b322410fca4b0.tar.bz2
online_test-5c74697b00ea08a2b78615637d8b322410fca4b0.zip
Merge pull request #96 from ankitjavalkar/code-eval-refactor-clean2
Code evaluator refactor
Diffstat (limited to 'yaksh/language_registry.py')
-rw-r--r--yaksh/language_registry.py29
1 files changed, 21 insertions, 8 deletions
diff --git a/yaksh/language_registry.py b/yaksh/language_registry.py
index 76a23d7..24aef7d 100644
--- a/yaksh/language_registry.py
+++ b/yaksh/language_registry.py
@@ -1,15 +1,26 @@
from settings import code_evaluators
import importlib
+import json
registry = None
-
-def set_registry():
- global registry
- registry = _LanguageRegistry()
def get_registry():
+ global registry
+ if registry is None:
+ registry = _LanguageRegistry()
return registry
+def unpack_json(json_data):
+ data = json.loads(json_data)
+ return data
+
+def create_evaluator_instance(language, test_case_type, json_data, in_dir):
+ """Create instance of relevant EvaluateCode class based on language"""
+ registry = get_registry()
+ cls = registry.get_class(language, test_case_type)
+ instance = cls(in_dir)
+ return instance
+
class _LanguageRegistry(object):
def __init__(self):
self._register = {}
@@ -17,20 +28,22 @@ class _LanguageRegistry(object):
self._register[language] = None
# Public Protocol ##########
- def get_class(self, language):
+ def get_class(self, language, test_case_type):
""" 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]
+ test_case_register = self._register[language]
+ cls = test_case_register.get(test_case_type)
module_name, class_name = cls.rsplit(".", 1)
+ import yaksh.python_assertion_evaluator
# 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):
+ def register(self, language, class_names):
""" Register a new code evaluator class for language"""
- self._register[language] = class_name
+ self._register[language] = class_names