Exemple #1
0
  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()
Exemple #2
0
 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)
Exemple #3
0
  def _assignment_to_config(self, args, error):
    args = ' '.join(args)
    config = {}
    base_config = self.file_configs[0][1][0]
    assert isinstance(base_config, dict)
    try:
      split_args = Args.split(args)
    except Exception as e:
      e.arg = '%s %s' % (error, args)
      raise

    for addr, value in split_args:
      try:
        GetPrefix.set_assignment(addr, value, base_config, config,
                                 unmapped_names=Merge.CONFIG_EXCEPTIONS)
      except GetPrefix.PrefixException:
        raise Exception('Can\'t understand configuration address "%s"' % addr)
      except Exception:
        raise Exception('Can\'t understand configuration value "%s" in %s=%s' %
                        (value, addr, value))
    return config
    def _args_to_settings(self, args, error):
        args = ' '.join(args)
        settings = {}
        base_settings = self.file_settings[0][1][0]
        assert isinstance(base_settings, dict)
        try:
            split_args = Args.split(args)
        except Exception as e:
            e.arg = '%s %s' % (error, args)
            raise

        for addr, value in split_args:
            try:
                GetPrefix.set_assignment(
                    addr, value, base_settings, settings,
                    unmapped_keys=Merge.SETTINGS_EXCEPTIONS)
            except GetPrefix.PrefixException:
                raise Exception('Can\'t understand settings address "%s"' %
                                addr)
            except Exception:
                raise Exception(
                    'Can\'t understand settings value "%s" in %s=%s' %
                    (value, addr, value))
        return settings
Exemple #5
0
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
Exemple #6
0
 def test_assignment_prefix(self):
   GetPrefix.set_assignment('f.b.b', 19, MASTER, self.slave)
   self.assertEqual(self.slave, {'foo': {'bar': {'baz': 19}}})
Exemple #7
0
 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')
Exemple #8
0
 def test_no_prefix(self):
   self.assertEqual(GetPrefix.get_prefix(TABLE, 'one', allow_prefixes=False),
                    ('one', 1))
Exemple #9
0
 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')
Exemple #10
0
 def test_assignment(self):
     GetPrefix.set_assignment('foo.bar.baz', 32, MASTER, self.slave)
     self.assertEqual(self.slave, {'foo': {'bar': {'baz': 32}}})
Exemple #11
0
 def test_prefix(self):
     self.assertEqual(GetPrefix.get_prefix(TABLE, 'o'), ('one', 1))
Exemple #12
0
 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
Exemple #14
0
 def get_prefix(self, name):
   return GetPrefix.get_prefix(self.elements, name)
Exemple #15
0
 def get(self, name, allow_prefixes=True):
     return GetPrefix.get_prefix(self.__dict__, name.upper(), allow_prefixes=allow_prefixes)
Exemple #16
0
 def get_prefix(self, *args):
   return GetPrefix.get(self, *args)
Exemple #17
0
 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)
Exemple #18
0
 def _get(self, name):
   return GetPrefix.get_prefix(self.registry, name,
                               allow_prefixes=self.allow_prefixes)
Exemple #19
0
 def test_no_prefix(self):
     self.assertEqual(
         GetPrefix.get_prefix(TABLE, 'one', allow_prefixes=False),
         ('one', 1))
Exemple #20
0
 def get_or_none(self, name, allow_prefixes=None):
   if allow_prefixes is None:
     allow_prefixes = self.allow_prefixes
   return GetPrefix.get(self.registry, name, allow_prefixes)
Exemple #21
0
 def test_assignment_prefix(self):
     GetPrefix.set_assignment('f.b.b', 19, MASTER, self.slave)
     self.assertEqual(self.slave, {'foo': {'bar': {'baz': 19}}})
Exemple #22
0
 def get_prefix(self, *args):
     try:
         return GetPrefix.get_prefix(self, *args)
     except GetPrefix.PrefixException:
         return None
Exemple #23
0
 def test_prefix(self):
   self.assertEqual(GetPrefix.get_prefix(TABLE, 'o'), ('one', 1))
Exemple #24
0
 def get(self, name, allow_prefixes=True):
     return GetPrefix.get_prefix(self.__dict__,
                                 name.upper(),
                                 allow_prefixes=allow_prefixes)
Exemple #25
0
 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 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)
Exemple #27
0
 def test_assignment(self):
   GetPrefix.set_assignment('foo.bar.baz', 32, MASTER, self.slave)
   self.assertEqual(self.slave, {'foo': {'bar': {'baz': 32}}})
 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')
Exemple #29
0
 def test_assignment_unmapped(self):
   GetPrefix.set_assignment('new.foo', 23, MASTER, self.slave,
                            unmapped_names=set(['new']))
   self.assertEqual(self.slave, {'new': {'foo': 23}})
Exemple #30
0
 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)