def _parse_cfg(cls, cfg_str): if len(cfg_str) == 0: raise ValueError("invalid config!") cfg_pairs = split_nest(cfg_str, sep=",") cfg = {} for p in cfg_pairs: kv = split_nest(p, sep="=") n = len(kv) if n == 1: key = kv[0] val = True elif n == 2: key, val = kv # value conversion vl = val.lower() if vl in ("true", "on", ""): val = True elif vl in ("false", "off"): val = False else: raise ValueError("not a key value pair in config!") if len(key) == 0: raise ValueError("invalid key!") cfg[key] = val return cfg
def _parse_cfg(cls, cfg_str): if len(cfg_str) == 0: raise ValueError("invalid config!") cfg_pairs = split_nest(cfg_str, sep=',') cfg = {} for p in cfg_pairs: kv = split_nest(p, sep='=') n = len(kv) if n == 1: key = kv[0] val = True elif n == 2: key, val = kv # value conversion vl = val.lower() if vl in ("true", "on", ""): val = True elif vl in ("false", "off"): val = False else: raise ValueError("not a key value pair in config!") if len(key) == 0: raise ValueError("invalid key!") cfg[key] = val return cfg
def parse(cls, spec): name = None src_list = [] append = False cfg = {} # has optional config? cfg_pos = spec.find("?") if cfg_pos >= 0: cfg = cls._parse_cfg(spec[cfg_pos + 1:]) spec = spec[0:cfg_pos] # src start col_pos = spec.find(":") # no colon if col_pos == -1: name = spec elif col_pos == len(spec) - 1: name = spec[:-1] # a:foo elif col_pos > 0: name = spec[:col_pos] src = spec[col_pos + 1:] if len(src) > 0: # append src list? if src[0] == "+": append = True src = src[1:] if len(src) > 0: src_list = split_nest(src, sep="+") if len(src_list) == 0: raise ValueError("empty source list!") for src in src_list: if len(src) == 0: raise ValueError("contains empty source!") else: raise ValueError("empty source list!") # check name if name is None or name == "": raise ValueError("no name in spec!") return cls(name, src_list, cfg, append)
def parse(cls, spec): name = None src_list = [] append = False cfg = {} # has optional config? cfg_pos = spec.find('?') if cfg_pos >= 0: cfg = cls._parse_cfg(spec[cfg_pos+1:]) spec = spec[0:cfg_pos] # src start col_pos = spec.find(':') # no colon if col_pos == -1: name = spec elif col_pos == len(spec) - 1: name = spec[:-1] # a:foo elif col_pos > 0: name = spec[:col_pos] src = spec[col_pos+1:] if len(src) > 0: # append src list? if src[0] == '+': append = True src = src[1:] if len(src) > 0: src_list = split_nest(src, sep='+') if len(src_list) == 0: raise ValueError("empty source list!") for src in src_list: if len(src) == 0: raise ValueError("contains empty source!") else: raise ValueError("empty source list!") # check name if name is None or name == "": raise ValueError("no name in spec!") return cls(name, src_list, cfg, append)