def main(argv=sys.argv): p = option_parser() (options, args) = p.parse_args(argv[1:]) llvl = logging.DEBUG if options.debug else logging.INFO logging.basicConfig(level=llvl) if not args: if options.list: sys.stdout.write( "Supported config types: " + ", ".join(A.list_types()) + "\n" ) sys.exit(0) else: p.print_usage() sys.exit(-1) data = A.load(args, options.itype, options.merge) if options.args: diff = A.loads(options.args, options.atype) data.update(diff, options.merge) if options.output: cp = A.find_loader(options.output, options.otype) cp.dump(data, options.output) else: assert options.otype is not None, \ "Please specify Output type w/ -O/--otype option" cp = A.find_loader(None, options.otype) sys.stdout.write(cp.dumps(data))
def test_10_find_loader__w_parser_type_or_instance_or_by_file(self): cpath = "dummy.conf" for psr in anyconfig.backends.Parsers().list(): self._assert_isinstance(TT.find_loader(cpath, psr.type()), psr) self._assert_isinstance(TT.find_loader(cpath, psr()), psr) for ext in psr.extensions(): self._assert_isinstance(TT.find_loader("dummy." + ext), psr, "ext=%s, psr=%r" % (ext, psr))
def main(argv=sys.argv): """ :param argv: Argument list to parse [sys.argv] """ parser = option_parser() (options, args) = parser.parse_args(argv[1:]) A.set_loglevel(to_log_level(options.loglevel)) if not args: if options.list: tlist = ", ".join(A.list_types()) + "\n" sys.stdout.write("Supported config types: " + tlist) sys.exit(0) else: parser.print_usage() sys.exit(-1) data = data = os.environ.copy() if options.env else A.container() diff = A.load(args, options.itype, ignore_missing=options.ignore_missing, merge=options.merge, ac_template=options.template) data.update(diff) if options.args: diff = A.loads(options.args, options.atype, ac_template=options.template, ac_context=data) data.update(diff, options.merge) if options.get: (data, err) = A.get(data, options.get) if err: raise RuntimeError(err) if options.set: A.set_(data, *(options.set.split('='))) if options.output: cparser = A.find_loader(options.output, options.otype) if cparser is None: raise RuntimeError("No suitable dumper was found for %s", options.output) cparser.dump(data, options.output) else: # TODO: Reuse input type automatically detected as it's impossible to # detect output type w/o options.output. if options.otype is None: if options.itype is None: raise RuntimeError("Please specify input and/or output type " "with -I (--itype) or -O (--otype) option") else: options.otype = options.itype cparser = A.find_loader(None, options.otype) sys.stdout.write(cparser.dumps(data))
def main(argv=sys.argv): """ :param argv: Argument list to parse [sys.argv] """ parser = option_parser() (options, args) = parser.parse_args(argv[1:]) A.set_loglevel(to_log_level(options.loglevel)) if not args: if options.list: tlist = ", ".join(A.list_types()) + "\n" sys.stdout.write("Supported config types: " + tlist) sys.exit(0) else: parser.print_usage() sys.exit(-1) data = A.load(args, options.itype, options.merge, ignore_missing=options.ignore_missing) if options.args: diff = A.loads(options.args, options.atype) data.update(diff, options.merge) if options.get: (data, err) = A.get(data, options.get) if err: raise RuntimeError(err) if options.set: A.set_(data, *(options.set.split('='))) if options.output: cparser = A.find_loader(options.output, options.otype) cparser.dump(data, options.output) else: # TODO: Reuse input type automatically detected as it's impossible to # detect output type w/o options.output. if options.otype is None: if options.itype is None: raise RuntimeError("Please specify input and/or output type " "with -I (--itype) or -O (--otype) option") else: options.otype = options.itype cparser = A.find_loader(None, options.otype) sys.stdout.write(cparser.dumps(data))
def test_10_find_loader__w_forced_type(self): cpath = "dummy.conf" # These parsers should be supported. self.assertEquals(A.find_loader(cpath, "ini"), BINI.IniConfigParser) self.assertEquals(A.find_loader(cpath, "json"), BJSON.JsonConfigParser) if BYAML.SUPPORTED: self.assertEquals(A.find_loader(cpath, "yaml"), BYAML.YamlConfigParser) if BXML.SUPPORTED: self.assertEquals(A.find_loader(cpath, "xml"), BXML.XmlConfigParser)
def _output_result(cnf, outpath, otype, inpath, itype): """ :param cnf: Configuration object to print out :param outpath: Output file path or None :param otype: Output type or None :param inpath: Input file path :param itype: Input type or None """ if not outpath or outpath == "-": outpath = sys.stdout if otype is None: if itype is None: try: otype = API.find_loader(inpath).type() except AttributeError: _exit_with_output("Specify inpath and/or outpath type[s] " "with -I/--itype or -O/--otype option " "explicitly", 1) else: otype = itype if anyconfig.mdicts.is_dict_like(cnf): API.dump(cnf, outpath, otype) else: _exit_with_output(str(cnf)) # Output primitive types as it is.
def _output_result(cnf, outpath, otype, inpath, itype): """ :param cnf: Configuration object to print out :param outpath: Output file path or None :param otype: Output type or None :param inpath: Input file path :param itype: Input type or None """ if not outpath or outpath == "-": outpath = sys.stdout if otype is None: if itype is None: try: otype = API.find_loader(inpath).type() except AttributeError: _exit_with_output( "Specify inpath and/or outpath type[s] " "with -I/--itype or -O/--otype option " "explicitly", 1) else: otype = itype if anyconfig.mdicts.is_dict_like(cnf): API.dump(cnf, outpath, otype) else: _exit_with_output(str(cnf)) # Output primitive types as it is.
def test_90_no_inputs__w_env_option(self): infile = "/dev/null" output = os.path.join(self.workdir, "out.yml") if A.find_loader(infile, "yaml") is None: return TT.main(["dummy", "--env", "-o", output, infile]) data = A.load(output) for env_var, env_val in os.environ.items(): self.assertTrue(env_var in data) self.assertEquals(env_val, os.environ[env_var])
def test_20_find_loader__by_file(self): self.assertEquals(A.find_loader("dummy.ini"), BINI.IniConfigParser) self.assertEquals(A.find_loader("dummy.json"), BJSON.JsonConfigParser) self.assertEquals(A.find_loader("dummy.jsn"), BJSON.JsonConfigParser) if BYAML.SUPPORTED: self.assertEquals(A.find_loader("dummy.yaml"), BYAML.YamlConfigParser) self.assertEquals(A.find_loader("dummy.yml"), BYAML.YamlConfigParser) if BXML.SUPPORTED: self.assertEquals(A.find_loader("dummy.xml"), BXML.XmlConfigParser)
def _output_type_by_input_path(inpaths, itype, fmsg): """ :param inpaths: List of input file paths :param itype: Input type or None :param fmsg: message if it cannot detect otype by `inpath` :return: Output type :: str """ msg = ("Specify inpath and/or outpath type[s] with -I/--itype " "or -O/--otype option explicitly") if itype is None: try: otype = API.find_loader(inpaths[0]).type() except API.UnknownFileTypeError: _exit_with_output((fmsg % inpaths[0]) + msg, 1) except (ValueError, IndexError): _exit_with_output(msg, 1) else: otype = itype return otype
def test_12_find_loader__w_forced_type__none(self): A.set_loglevel(CRITICAL) # suppress the logging msg "[Error] ..." cpath = "dummy.conf" self.assertEquals(A.find_loader(cpath, "type_not_exist"), None)
def test_12_find_loader__w_given_parser_instance(self): cpath = "dummy.conf" for psr in anyconfig.backends.PARSERS: self._assert_isinstance(TT.find_loader(cpath, psr()), psr)
def test_20_find_loader__by_file(self): for psr in anyconfig.backends.PARSERS: for ext in psr.extensions(): self._assert_isinstance(TT.find_loader("dummy." + ext), psr, "ext=%s, psr=%r" % (ext, psr))
def test_22_find_loader__by_file__none(self): # see self.test_12_find_loader__w_forced_type__none A.set_loglevel(CRITICAL) self.assertEquals(A.find_loader("dummy.ext_not_found"), None)
def main(argv=None): """ :param argv: Argument list to parse or None (sys.argv will be set). """ if argv is None: argv = sys.argv parser = option_parser() (options, args) = parser.parse_args(argv[1:]) A.set_loglevel(to_log_level(options.loglevel)) if not args: if options.list: tlist = ", ".join(A.list_types()) + "\n" sys.stdout.write("Supported config types: " + tlist) sys.exit(0) else: parser.print_usage() sys.exit(1) if options.validate and options.schema is None: sys.stderr.write("--validate option requires --scheme option") sys.exit(1) data = data = os.environ.copy() if options.env else A.container() diff = A.load(args, options.itype, ignore_missing=options.ignore_missing, merge=options.merge, ac_template=options.template, ac_schema=options.schema) if diff is None: sys.stderr.write("Validation failed") sys.exit(1) data.update(diff) if options.args: diff = A.loads(options.args, options.atype, ac_template=options.template, ac_context=data) data.update(diff, options.merge) if options.validate: A.LOGGER.info("Validation succeeds") sys.exit(0) if options.gen_schema: data = A.gen_schema(data) if options.get: (data, err) = A.get(data, options.get) if err: raise RuntimeError(err) # Output primitive types as it is. if not anyconfig.mergeabledict.is_mergeabledict_or_dict(data): sys.stdout.write(str(data) + '\n') return if options.set: (key, val) = options.set.split('=') A.set_(data, key, anyconfig.parser.parse(val)) if options.output: cparser = A.find_loader(options.output, options.otype) if cparser is None: raise RuntimeError("No suitable dumper was found for %s", options.output) cparser.dump(data, options.output) else: if options.otype is None: if options.itype is None: psr = A.find_loader(args[0]) if psr is not None: options.otype = psr.type() # Reuse detected input type else: raise RuntimeError("Please specify input and/or output " "type with -I (--itype) or -O " "(--otype) option") else: options.otype = options.itype cparser = A.find_loader(None, options.otype) sys.stdout.write(cparser.dumps(data) + '\n')
def test_30_find_loader__not_found(self): self.assertEqual(TT.find_loader("a.cnf", "type_not_exist"), None) self.assertEqual(TT.find_loader("dummy.ext_not_found"), None)