示例#1
0
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))
示例#2
0
 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))
示例#3
0
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))
示例#4
0
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))
示例#5
0
    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)
示例#6
0
    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)
示例#7
0
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.
示例#8
0
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.
示例#9
0
    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])
示例#10
0
    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)
示例#11
0
    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)
示例#12
0
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
示例#13
0
 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)
示例#14
0
 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)
示例#15
0
 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)
示例#16
0
 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))
示例#17
0
 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)
示例#18
0
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')
示例#19
0
 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)
示例#20
0
 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)
示例#21
0
 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))
示例#22
0
 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)
示例#23
0
 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)