def _parse_item(clazz, s):
   parts = string_util.split_by_white_space(s, strip = True)
   assert len(parts) == 3
   name = parts[0]
   mtime = float(parts[1])
   checksum = parts[2]
   return E(name, mtime, checksum)
Пример #2
0
 def _parse_package_header(self, node):
     parts = string_util.split_by_white_space(node.data.text, strip=True)
     num_parts = len(parts)
     if num_parts not in [3, 4]:
         self._error(
             'package section should begin with \"package $name $ver $rev\" instead of \"%s\"'
             % (node.data.text), node)
     if parts[0] != 'package':
         self._error(
             'package section should begin with \"package $name $ver $rev\" instead of \"%s\"'
             % (node.data.text), node)
     if num_parts == 3:
         name = parts[1].strip()
         version = build_version.parse(parts[2])
         return name, version
     elif num_parts == 4:
         name = parts[1].strip()
         version = build_version.parse(parts[2])
         if version.revision != 0:
             self._error(
                 'revision given multiple times: %s' % (node.data.text),
                 node)
         revision = parts[3].strip()
         return name, build_version(version.upstream_version, revision,
                                    version.epoch)
 def _parse_metadata(self, node):
     parts = string_util.split_by_white_space(node.data.text, strip=True)
     assert parts[0] == 'fake_package'
     parts.pop(0)
     if len(parts) != len(artifact_descriptor._fields):
         self._error(
             'invalid metadata for fake_package: \"%s\"' %
             (' '.join(parts)), node)
     return artifact_descriptor(*parts)
Пример #4
0
 def installed_packages(clazz):
     'Return a list of installed pacakge.'
     cmd = 'dpkg -l'
     rv = clazz._call_dpkg(cmd)
     if rv.exit_code != 0:
         raise RuntimeError('Failed to execute: %s' % (cmd))
     lines = rv.stdout.strip().split('\n')
     lines = [l for l in lines if l.startswith('ii')]
     lines = [string_util.split_by_white_space(l)[1] for l in lines]
     return sorted(lines)
Пример #5
0
 def _command_loop(self):
   try:
     cmd = string_util.split_by_white_space(input('CMD> '), strip = True)
     if cmd:
       return self._handle_command(cmd)
   except KeyboardInterrupt as ex:
     return False
   except EOFError as ex:
     return False
   return True
Пример #6
0
 def __parse_ldd_line(clazz, line):
     line = line.strip()
     if not line:
         return None
     parts = string_util.split_by_white_space(line, strip=True)
     if len(parts) >= 2 and parts[1] == '=>' and path.exists(parts[2]):
         return parts[2]
     elif path.exists(parts[0]):
         return parts[0]
     else:
         return None
Пример #7
0
 def archs(clazz, archive, lipo_exe=None):
     rv = clazz.__call_lipo_info(archive, lipo_exe=lipo_exe)
     ex = re.findall(clazz.FAT_EXPRESSION, rv.stdout)
     if ex:
         archs = string_util.split_by_white_space(ex[0])
     else:
         ex = re.findall(clazz.THIN_EXPRESSION, rv.stdout)
         if len(ex) != 1:
             raise RuntimeError('Invalid archive for lipo: %s' % (archive))
         archs = ex
     return sorted([arch.strip() for arch in archs])
Пример #8
0
 def parse(clazz, origin, text, node):
     if origin:
         check.check_value_origin(origin)
     check.check_node(node)
     parts = string_util.split_by_white_space(text)
     if len(parts) < 1:
         raise ValueError('%s: expected filename instead of: %s' %
                          (origin, text))
     where = parts[0]
     rest = string_util.replace(text, {where: ''})
     properties = clazz.parse_properties(rest)
     return clazz(origin=origin, where=where, properties=properties)
Пример #9
0
 def parse(clazz, text, line_number):
     if not text:
         return None
     parts = string_util.split_by_white_space(text, strip=True)
     if len(parts) < 2:
         raise RuntimeError('invalid arg spec: "%s"' % (text))
     name = parts[0]
     class_name = parts[1].lower()
     default = None
     if len(parts) > 2:
         default = ' '.join(parts[2:])
     return clazz(name, class_name, default, line_number)
Пример #10
0
 def test_split_by_white_space(self):
   self.assertEqual( [ 'a', 'b', 'c' ], SU.split_by_white_space('a b c') )
   self.assertEqual( [ 'a', 'b', 'c' ], SU.split_by_white_space(' a b c') )
   self.assertEqual( [ 'a', 'b', 'c' ], SU.split_by_white_space(' a b c ') )
   self.assertEqual( [ 'a', 'b', 'c' ], SU.split_by_white_space(' a b  c ') )
   self.assertEqual( [], SU.split_by_white_space('') )
   self.assertEqual( ['a'], SU.split_by_white_space('a') )
Пример #11
0
 def parse_city_and_state(clazz, s):
   '''
   Parse text in the form off "City, ST" "City ST" "ST, City" "ST City" for city and state
   or None if the state or format cannot be determined.
   '''
   if ',' in s:
     parts = s.split(',')
   else:
     parts = string_util.split_by_white_space(s)
   state_index = clazz._find_state_index(parts)
   if state_index < 0:
     return None
   state = parts[state_index].strip()
   parts[state_index] = ''
   city = ' '.join(parts).strip()
   return clazz._city_state(city, state)
Пример #12
0
 def parse(clazz, origin, text, node):
     if origin:
         check.check_value_origin(origin)
     check.check_node(node)
     parts = string_util.split_by_white_space(text)
     if len(parts) < 2:
         raise ValueError(
             '%s: expected filename and dst_filename instead of: %s' %
             (origin, text))
     filename = parts[0]
     dst_filename = parts[1]
     rest = text.replace(filename, '')
     rest = rest.replace(dst_filename, '')
     properties = clazz.parse_properties(rest)
     return clazz(origin=origin,
                  filename=filename,
                  dst_filename=dst_filename,
                  properties=properties)
Пример #13
0
    def _tokenize(clazz, text):
        num_colon = text.count(':')
        if num_colon > 1:
            raise ValueError('Invalid text - only one colon is allowed: %s' %
                             (text))
        elif num_colon == 0:
            global_mask = None
            req_text = text
        else:
            assert num_colon == 1
            left, _, right = text.partition(':')
            global_mask = left.strip()
            req_text = right.strip()

        last_token = None
        for word in string_util.split_by_white_space(req_text):
            if last_token:
                if clazz._word_is_operator(word):
                    token = clazz._token(clazz._TOKEN_OPERATOR, word,
                                         global_mask)
                elif clazz._word_is_hardness(word):
                    token = clazz._token(clazz._TOKEN_HARDNESS, word,
                                         global_mask)
                elif last_token.type == clazz._TOKEN_OPERATOR:
                    token = clazz._token(clazz._TOKEN_VERSION, word,
                                         global_mask)
                else:
                    token = clazz._make_name_token(word, global_mask)
            else:
                if clazz._word_is_hardness(word):
                    token = clazz._token(clazz._TOKEN_HARDNESS, word,
                                         global_mask)
                else:
                    token = clazz._make_name_token(word, global_mask)
            yield token
            last_token = token
        yield clazz._token(clazz._TOKEN_END, None, None)
Пример #14
0
 def parse(clazz, text, filename = '<unknown>'):
   name = None
   unixpath = None
   pythonpath = None
   requires = None
   for line in text_line_parser(text):
     text = line.text_no_comments.strip()
     if text:
       key, sep, value = text.partition(':')
       if sep != ':':
         raise ValueError('Invalid config line \"%s\" at %s:%s' % (line.text, filename, line.line_number))
       key = key.strip()
       value = value.strip()
       if key == 'name':
         name = value
       elif key in [ 'unixpath' ]:
         unixpath = value.split(':')
       elif key in [ 'pythonpath' ]:
         pythonpath = value.split(':')
       elif key == 'requires':
         requires = set(string_util.split_by_white_space(value))
       else:
         raise ValueError('Invalid config value \"%s\" at %s:%s' % (line.text, filename, line.line_number))
   return clazz(name, unixpath, pythonpath, requires)
Пример #15
0
 def __parse_list(clazz, s, variables):
     result = string_util.split_by_white_space(s, strip=True)
     return [variable.substitute(x, variables) for x in result]
Пример #16
0
 def _parse_flags(clazz, s):
     flags = string_util.split_by_white_space(s)
     return algorithm.unique([flag.strip() for flag in flags])
Пример #17
0
 def __parse_packages(clazz, s):
     s = comments.strip_line(s, strip_head=True, strip_tail=True)
     return [token.strip() for token in string_util.split_by_white_space(s)]
Пример #18
0
 def _parse_list_all_output(clazz, stdout):
     lines = stdout.strip().split('\n')
     return [
         string_util.split_by_white_space(line, strip=True)[0]
         for line in lines
     ]
Пример #19
0
 def __unduplicate_flags(clazz, flags):
     'Unduplicate flags.'
     v = string_util.split_by_white_space(flags)
     unique_v = algorithm.unique(v)
     return ' '.join(unique_v)
Пример #20
0
 def parse_line(clazz, s):
   v = string_util.split_by_white_space(s)
   action = v[0]
   filename = v[1]
   args = tuple(v[2:0]) or ()
   return clazz(action, filename, *args)
Пример #21
0
def parse_line(s):
  fields = string_util.split_by_white_space(s, strip = True)
  archs = fields[2].split(',')
  fields[2] = tuple(fields[2].split(','))
  return host_info(*fields)