commit: e40f31c10a79499a822596948b68fcf6ea3f647f Author: Matt Turner <mattst88 <AT> gentoo <DOT> org> AuthorDate: Mon Nov 2 17:43:34 2020 +0000 Commit: Matt Turner <mattst88 <AT> gentoo <DOT> org> CommitDate: Fri Jan 29 23:48:02 2021 +0000 URL: https://gitweb.gentoo.org/proj/catalyst.git/commit/?id=e40f31c1
catalyst: Switch spec files to TOML Signed-off-by: Matt Turner <mattst88 <AT> gentoo.org> catalyst/config.py | 120 ----------------------------------------------------- catalyst/main.py | 26 ++++-------- 2 files changed, 9 insertions(+), 137 deletions(-) diff --git a/catalyst/config.py b/catalyst/config.py deleted file mode 100644 index e1963f71..00000000 --- a/catalyst/config.py +++ /dev/null @@ -1,120 +0,0 @@ - -import re - -from catalyst import log -from catalyst.support import CatalystError - - -class ParserBase(): - - filename = "" - lines = None - values = None - key_value_separator = "=" - multiple_values = False - empty_values = True - eval_none = False - - def __getitem__(self, key): - return self.values[key] - - def get_values(self): - return self.values - - def dump(self): - dump = "" - for x in self.values: - dump += x + " = " + repr(self.values[x]) + "\n" - return dump - - def parse_file(self, filename): - try: - with open(filename, "r") as myf: - self.lines = myf.readlines() - except: - raise CatalystError("Could not open file " + filename, - print_traceback=True) - self.filename = filename - self.parse() - - def parse_lines(self, lines): - self.lines = lines - self.parse() - - def parse(self): - values = {} - cur_array = [] - - trailing_comment = re.compile(r'\s*#.*$') - - for x, myline in enumerate(self.lines): - myline = myline.strip() - - # Force the line to be clean - # Remove Comments ( anything following # ) - myline = trailing_comment.sub("", myline) - - # Skip any blank lines - if not myline: - continue - - if self.key_value_separator in myline: - # Split on the first occurence of the separator creating two strings in the array mobjs - mobjs = myline.split(self.key_value_separator, 1) - mobjs[1] = mobjs[1].strip().strip('"') - - # Start a new array using the first element of mobjs - cur_array = [mobjs[0]] - if mobjs[1]: - # do any variable substitiution embeded in it with - # the values already obtained - mobjs[1] = mobjs[1] % values - if self.multiple_values: - # split on white space creating additional array elements - subarray = mobjs[1].split() - cur_array += subarray - else: - cur_array += [mobjs[1]] - - # Else add on to the last key we were working on - else: - if self.multiple_values: - cur_array += myline.split() - else: - raise CatalystError("Syntax error: %s" % - x, print_traceback=True) - - # XXX: Do we really still need this "single value is a string" behavior? - if len(cur_array) == 2: - values[cur_array[0]] = cur_array[1] - else: - values[cur_array[0]] = cur_array[1:] - - if not self.empty_values: - # Make sure the list of keys is static since we modify inside the loop. - for x in list(values.keys()): - # Delete empty key pairs - if not values[x]: - log.warning('No value set for key "%s"; deleting', x) - del values[x] - - if self.eval_none: - # Make sure the list of keys is static since we modify inside the loop. - for x in list(values.keys()): - # reset None values - if isinstance(values[x], str) and values[x].lower() in ['none']: - log.info('None value found for key "%s"; reseting', x) - values[x] = None - self.values = values - - -class SpecParser(ParserBase): - - key_value_separator = ':' - multiple_values = True - empty_values = False - eval_none = True - - def __init__(self, filename=""): - if filename: - self.parse_file(filename) diff --git a/catalyst/main.py b/catalyst/main.py index 0de1040f..81495c62 100644 --- a/catalyst/main.py +++ b/catalyst/main.py @@ -13,7 +13,6 @@ from DeComp.definitions import (COMPRESS_DEFINITIONS, DECOMPRESS_DEFINITIONS, from DeComp.contents import ContentsMap from catalyst import log -import catalyst.config from catalyst.context import namespace from catalyst.defaults import (confdefaults, option_messages, DEFAULT_CONFIG_FILE, valid_config_file_values) @@ -276,11 +275,6 @@ def _main(parser, opts): myconfigs = [DEFAULT_CONFIG_FILE] myspecfile = opts.file - mycmdline = list() - if opts.snapshot: - mycmdline.append('target: snapshot') - mycmdline.append('snapshot_treeish: ' + opts.snapshot) - conf_values['DEBUG'] = opts.debug conf_values['VERBOSE'] = opts.debug or opts.verbose @@ -299,7 +293,7 @@ def _main(parser, opts): options.append('enter-chroot') # Make sure we have some work before moving further. - if not myspecfile and not mycmdline: + if not myspecfile and not opts.snapshot: parser.error('please specify one of either -f or -C or -s') # made it this far so start by outputting our version info @@ -320,7 +314,6 @@ def _main(parser, opts): # initialize our (de)compression definitions conf_values['decompress_definitions'] = DECOMPRESS_DEFINITIONS conf_values['compress_definitions'] = COMPRESS_DEFINITIONS - # TODO add capability to config/spec new definitions if "digests" in conf_values: valid_digests = hashlib.algorithms_available @@ -338,16 +331,15 @@ def _main(parser, opts): if myspecfile: log.notice("Processing spec file: %s", myspecfile) - spec = catalyst.config.SpecParser(myspecfile) - addlargs.update(spec.get_values()) - - if mycmdline: try: - cmdline = catalyst.config.SpecParser() - cmdline.parse_lines(mycmdline) - addlargs.update(cmdline.get_values()) - except CatalystError: - log.critical('Could not parse commandline') + addlargs.update(toml.load(myspecfile)) + except Exception as e: + log.critical('Could not find parse spec file: %s: %s', + myspecfile, e) + + if opts.snapshot: + addlargs['target'] = 'snapshot' + addlargs['snapshot_treeish'] = opts.snapshot if "target" not in addlargs: raise CatalystError("Required value \"target\" not specified.")