def _interpret(self, op, evaluator, element, is_evaluating): parts = op.split('.') if len(parts) == 1: cmd = 'function' else: cmd = parts.pop(0) name, _ = GetPrefix.get_prefix(self.table, cmd) name = getattr(Names, name.upper()) if name == Names.CONFIGURATION: from echomesh.base import Config # TODO: Why can't this import be at the top? Does it even work?! return is_evaluating and Config.get(*parts) if name == Names.FUNCTION: return (is_evaluating and self.functions.get('.'.join(parts))(evaluator())) if name == Names.SYSTEM: func, is_constant = self.system.get('.'.join(parts)) if not is_evaluating: return is_constant elif name in ELEMENT_NAMES: func = Locator.get_variable(element, Names.reverse(name).lower(), parts) else: raise Exception("Shouldn't get here.") return Call.call(func) if is_evaluating else func.is_constant()
def entry(self, name): try: entry = GetPrefix.get_prefix( self._registry, name, allow_prefixes=self.allow_prefixes)[1] entry.resolve_function() return entry except: add_exception_suffix(' in registry "%s"' % self.name)
def entry(self, name): try: entry = GetPrefix.get_prefix(self._registry, name, allow_prefixes=self.allow_prefixes)[1] entry.resolve_function() return entry except: add_exception_suffix(' in registry "%s"' % self.name)
def merge_assignments(config, assignments): results = [] for address, value in assignments: try: cfg, changes = config, LOCAL_CHANGES path = [] for i, field in enumerate(address): k, v = GetPrefix.get_prefix(cfg, field) path.append(k) if i < len(address) - 1: cfg = v changes = changes.setdefault(k, {}) else: cfg[k] = changes[k] = value results.append([path, value]) except GetPrefix.PrefixException: raise Exception('Configuration variable "%s" doesn\'t exist' % '.'.join(address)) return results
def test_prefix(self): self.assertEqual(GetPrefix.get_prefix(TABLE, 'o'), ('one', 1))
def assertException(self, key, message, allow_prefixes=True): with self.assertRaises(GetPrefix.PrefixException) as cm: GetPrefix.get_prefix(TABLE, key, allow_prefixes=allow_prefixes) self.assertEqual(str(cm.exception), message)
def get(self, name, allow_prefixes=True): return GetPrefix.get_prefix(self.__dict__, name.upper(), allow_prefixes=allow_prefixes)
def test_prefix_dict(self): pdict = GetPrefix.PrefixDict(TABLE) self.assertEqual(pdict['o'], 1) with self.assertRaises(GetPrefix.PrefixException) as cm: GetPrefix.get_prefix(TABLE, 'x') self.assertEqual(str(cm.exception), '"x" is not valid')
def test_no_prefix2(self): try: GetPrefix.get_prefix(TABLE, 'x', allow_prefixes=False) except Exception as e: self.assertEqual(str(e), '"x" is not valid')
def _get(self, name): return GetPrefix.get_prefix(self.registry, name, allow_prefixes=self.allow_prefixes)
def get_prefix(self, name): return GetPrefix.get_prefix(self.elements, name)
def get_prefix(self, *args): try: return GetPrefix.get_prefix(self, *args) except GetPrefix.PrefixException: return None
def test_no_prefix(self): self.assertEqual( GetPrefix.get_prefix(TABLE, 'one', allow_prefixes=False), ('one', 1))
def test_no_prefix(self): self.assertEqual(GetPrefix.get_prefix(TABLE, 'one', allow_prefixes=False), ('one', 1))
def test_many_prefixes(self): try: GetPrefix.get_prefix(TABLE, 't') except Exception as e: self.assertEqual(str(e), '"t" matches more than one: three and two')
def entry(self, name): try: return GetPrefix.get_prefix(self._registry, name, allow_prefixes=self.allow_prefixes)[1] except: add_exception_suffix(' in registry "%s"' % self.name)