示例#1
0
 def _extract_conf(self, cfg):
     """Extract cluster nodes configuration"""
     conf = {"default": {}}
     for key, val in cfg.iteritems():
         if key == 'default':
             conf['default'].update(val)
         elif isinstance(val, dict):
             if isinstance(key, int):
                 rset = RangeSet.fromone(key)
             else:
                 try:
                     rset = RangeSet(key)
                 except RangeSetParseError as err:
                     _LOGGER.warning(
                         "Error in configuration file:"
                         " %s. Ingnoring this part", err)
                     continue
             for idx in rset:
                 conf[idx] = val
         else:
             conf['default'][key] = val
     try:
         conf = clustdock.format_dict(conf, **self.__dict__)
     except KeyError:
         _LOGGER.exception("Key not found:")
     return conf
示例#2
0
 def _iterbase(self):
     """Iterator on single, one-item NodeSetBase objects."""
     for pat, ivec, pad, autostep in self._iter():
         rset = None     # 'no node index' by default
         if ivec is not None:
             assert len(ivec) > 0
             if len(ivec) == 1:
                 rset = RangeSet.fromone(ivec[0], pad[0] or 0, autostep)
             else:
                 rset = RangeSetND([ivec], pad, autostep)
         yield NodeSetBase(pat, rset)
示例#3
0
 def testFromOneConstructor(self):
     """test RangeSet.fromone() constructor"""
     rgs = RangeSet.fromone(42)
     self.assertEqual(str(rgs), "42")
     self.assertEqual(len(rgs), 1)
     # also support slice object (v1.6+)
     rgs = RangeSet.fromone(slice(42))
     self.assertEqual(str(rgs), "0-41")
     self.assertEqual(len(rgs), 42)
     self.assertRaises(ValueError, RangeSet.fromone, slice(12, None))
     rgs = RangeSet.fromone(slice(42, 43))
     self.assertEqual(str(rgs), "42")
     self.assertEqual(len(rgs), 1)
     rgs = RangeSet.fromone(slice(42, 48))
     self.assertEqual(str(rgs), "42-47")
     self.assertEqual(len(rgs), 6)
     rgs = RangeSet.fromone(slice(42, 57, 2))
     self.assertEqual(str(rgs), "42,44,46,48,50,52,54,56")
     rgs.autostep = 3
     self.assertEqual(str(rgs), "42-56/2")
     self.assertEqual(len(rgs), 8)
 def testFromOneConstructor(self):
     """test RangeSet.fromone() constructor"""
     rgs = RangeSet.fromone(42)
     self.assertEqual(str(rgs), "42")
     self.assertEqual(len(rgs), 1)
     # also support slice object (v1.6+)
     rgs = RangeSet.fromone(slice(42))
     self.assertEqual(str(rgs), "0-41")
     self.assertEqual(len(rgs), 42)
     self.assertRaises(ValueError, RangeSet.fromone, slice(12, None))
     rgs = RangeSet.fromone(slice(42, 43))
     self.assertEqual(str(rgs), "42")
     self.assertEqual(len(rgs), 1)
     rgs = RangeSet.fromone(slice(42, 48))
     self.assertEqual(str(rgs), "42-47")
     self.assertEqual(len(rgs), 6)
     rgs = RangeSet.fromone(slice(42, 57, 2))
     self.assertEqual(str(rgs), "42,44,46,48,50,52,54,56")
     rgs.autostep = 3
     self.assertEqual(str(rgs), "42-56/2")
     self.assertEqual(len(rgs), 8)
示例#5
0
 def nsiter(self):
     """Object-based NodeSet iterator on single nodes."""
     for pat, ivec, pad, autostep in self._iter():
         nodeset = self.__class__()
         if ivec is not None:
             if len(ivec) == 1:
                 nodeset._add_new(pat, \
                                  RangeSet.fromone(ivec[0], pad[0] or 0))
             else:
                 nodeset._add_new(pat, RangeSetND([ivec], None, autostep))
         else:
             nodeset._add_new(pat, None)
         yield nodeset
示例#6
0
    def _scan_string_single(self, nsstr, autostep):
        """Single node scan, returns (pat, list of rangesets)"""
        # ignore whitespace(s)
        node = nsstr.strip()
        if len(node) == 0:
            raise NodeSetParseError(nsstr, "empty node name")

        # single node parsing
        pfx_nd = [mobj.groups() for mobj in self.base_node_re.finditer(node)]
        pfx_nd = pfx_nd[:-1]
        if not pfx_nd:
            raise NodeSetParseError(node, "parse error")

        # pfx+sfx cannot be empty
        if len(pfx_nd) == 1 and len(pfx_nd[0][0]) == 0:
            raise NodeSetParseError(node, "empty node name")

        pat = ""
        rangesets = []
        for pfx, idx in pfx_nd:
            if idx:
                # optimization: process single index padding directly
                pad = 0
                if int(idx) != 0:
                    idxs = idx.lstrip("0")
                    if len(idx) - len(idxs) > 0:
                        pad = len(idx)
                    idxint = int(idxs)
                else:
                    if len(idx) > 1:
                        pad = len(idx)
                    idxint = 0
                if idxint > 1e100:
                    raise NodeSetParseRangeError( \
                        RangeSetParseError(idx, "invalid rangeset index"))
                # optimization: use numerical RangeSet constructor
                pat += "%s%%s" % pfx
                rangesets.append(RangeSet.fromone(idxint, pad, autostep))
            else:
                # undefined pad means no node index
                pat += pfx
        return pat, rangesets