예제 #1
0
 def parse(self):
     """Parse this Berksfile into a dict."""
     self.flush()
     self.seek(0)
     data = utils.ruby_lines(self.readlines())
     data = [tuple(j.strip() for j in line.split(None, 1))
             for line in data]
     datamap = {}
     for line in data:
         if len(line) == 1:
             datamap[line[0]] = True
         elif len(line) == 2:
             key, value = line
             if key == 'cookbook':
                 datamap.setdefault('cookbook', {})
                 value = [utils.ruby_strip(v) for v in value.split(',')]
                 lib, detail = value[0], value[1:]
                 datamap['cookbook'].setdefault(lib, {})
                 # if there is additional dependency data but its
                 # not the ruby hash, its the version constraint
                 if detail and not any("".join(detail).startswith(o)
                                       for o in self.berks_options):
                     constraint, detail = detail[0], detail[1:]
                     datamap['cookbook'][lib]['constraint'] = constraint
                 if detail:
                     for deet in detail:
                         opt, val = [
                             utils.ruby_strip(i)
                             for i in deet.split(':', 1)
                         ]
                         if not any(opt == o for o in self.berks_options):
                             raise ValueError(
                                 "Cookbook detail '%s' does not specify "
                                 "one of '%s'" % (opt, self.berks_options))
                         else:
                             datamap['cookbook'][lib][opt.strip(':')] = (
                                 utils.ruby_strip(val))
             elif key == 'source':
                 datamap.setdefault(key, [])
                 datamap[key].append(utils.ruby_strip(value))
             elif key:
                 datamap[key] = utils.ruby_strip(value)
     self.seek(0)
     return datamap
예제 #2
0
 def _parse_metadata(self):
     """Open metadata.rb and generate useful map."""
     assert os.path.isfile(self.metadata_path), "metadata.rb not found"
     with open(self.metadata_path) as meta:
         data = utils.ruby_lines(meta.readlines())
     data = [tuple(j.strip() for j in line.split(None, 1)) for line in data]
     depends = {}
     for line in data:
         if not len(line) == 2:
             continue
         key, value = line
         if key == 'depends':
             value = value.split(',')
             lib = utils.ruby_strip(value[0])
             detail = [utils.ruby_strip(j) for j in value[1:]]
             depends[lib] = detail
     data = {key: utils.ruby_strip(val) for key, val in data}
     if depends:
         data['depends'] = depends
     return data
예제 #3
0
 def parse(self):
     """Parse the metadata.rb into a dict."""
     data = utils.ruby_lines(self.readlines())
     data = [tuple(j.strip() for j in line.split(None, 1))
             for line in data]
     depends = {}
     for line in data:
         if not len(line) == 2:
             continue
         key, value = line
         if key == 'depends':
             value = value.split(',')
             lib = utils.ruby_strip(value[0])
             detail = [utils.ruby_strip(j) for j in value[1:]]
             depends[lib] = detail
     datamap = {key: utils.ruby_strip(val) for key, val in data}
     if depends:
         datamap['depends'] = depends
     self.seek(0)
     return datamap
예제 #4
0
 def _parse_berksfile(self):
     assert os.path.isfile(self.berks_path), "Berksfile not found"
     with open(self.berks_path) as berks:
         data = utils.ruby_lines(berks.readlines())
     data = [tuple(j.strip() for j in line.split(None, 1)) for line in data]
     datamap = {}
     for line in data:
         if len(line) == 1:
             datamap[line[0]] = True
         elif len(line) == 2:
             key, value = line
             if key == 'cookbook':
                 datamap.setdefault('cookbook', {})
                 value = [utils.ruby_strip(v) for v in value.split(',')]
                 lib, detail = value[0], value[1:]
                 datamap['cookbook'].setdefault(lib, {})
                 # if there is additional dependency data but its
                 # not the ruby hash, its the version constraint
                 if detail and not any("".join(detail).startswith(o)
                                       for o in self.berks_options):
                     constraint, detail = detail[0], detail[1:]
                     datamap['cookbook'][lib]['constraint'] = constraint
                 if detail:
                     for deet in detail:
                         opt, val = [
                             utils.ruby_strip(i)
                             for i in deet.split(':', 1)
                         ]
                         if not any(opt == o for o in self.berks_options):
                             raise ValueError(
                                 "Cookbook detail '%s' does not specify "
                                 "one of '%s'" % (opt, self.berks_options))
                         else:
                             datamap['cookbook'][lib][opt.strip(':')] = (
                                 utils.ruby_strip(val))
             else:
                 datamap[key] = utils.ruby_strip(value)
     return datamap