From fc3029b43f681ccf838bd484c4a4ea8e670eed9a Mon Sep 17 00:00:00 2001 From: Tudor Date: Sun, 31 Jul 2016 17:36:37 -0400 Subject: [PATCH] Mistakes were made --- dmoj/config.py | 46 ++++++++++++++++++++++++---------------------- dmoj/judgeenv.py | 2 +- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/dmoj/config.py b/dmoj/config.py index c93e5b7e2..dbfca61f5 100644 --- a/dmoj/config.py +++ b/dmoj/config.py @@ -44,7 +44,8 @@ class ConfigNode(object): node.test_cases[0].batched[1].output_prefix_length == 0 """ - def __init__(self, raw_config=None, parent=None, defaults=None): + def __init__(self, raw_config=None, parent=None, defaults=None, dynamic=True): + self.dynamic = dynamic if defaults: self.raw_config = defaults self.raw_config.update(raw_config or {}) @@ -78,27 +79,28 @@ def __getattr__(self, item): def __getitem__(self, item): try: - def run_dynamic_key(dynamic_key, run_func): - # Wrap in a ConfigNode so dynamic keys can benefit from the nice features of ConfigNode - local = {'node': ConfigNode(self.raw_config.get(item, {}), self)} - try: - cfg = run_func(self.raw_config[dynamic_key], local) - except Exception as e: - import traceback - - traceback.print_exc() - raise InvalidInitException('exception executing dynamic key ' + str(dynamic_key) + ': ' + e.message) - del self.raw_config[dynamic_key] - self.raw_config[item] = cfg - - if item + '++' in self.raw_config: - def full(code, local): - exec code in local - return local['node'] - - run_dynamic_key(item + '++', full) - elif item + '+' in self.raw_config: - run_dynamic_key(item + '+', lambda code, local: eval(code, local)) + if self.dynamic: + def run_dynamic_key(dynamic_key, run_func): + # Wrap in a ConfigNode so dynamic keys can benefit from the nice features of ConfigNode + local = {'node': ConfigNode(self.raw_config.get(item, {}), self)} + try: + cfg = run_func(self.raw_config[dynamic_key], local) + except Exception as e: + import traceback + + traceback.print_exc() + raise InvalidInitException('exception executing dynamic key ' + str(dynamic_key) + ': ' + e.message) + del self.raw_config[dynamic_key] + self.raw_config[item] = cfg + + if item + '++' in self.raw_config: + def full(code, local): + exec code in local + return local['node'] + + run_dynamic_key(item + '++', full) + elif item + '+' in self.raw_config: + run_dynamic_key(item + '+', lambda code, local: eval(code, local)) cfg = self.raw_config[item] if isinstance(cfg, list) or isinstance(cfg, dict): diff --git a/dmoj/judgeenv.py b/dmoj/judgeenv.py index 53e58303c..95eb612b7 100644 --- a/dmoj/judgeenv.py +++ b/dmoj/judgeenv.py @@ -9,7 +9,7 @@ env = ConfigNode(defaults={ 'selftest_sandboxing': True, 'runtime': {}, -}) +}, dynamic=False) _root = os.path.dirname(__file__) fs_encoding = os.environ.get('DMOJ_ENCODING', sys.getfilesystemencoding())