Coverage for obj2cli/main.py: 13%
52 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-05 14:23 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-05 14:23 +0000
1import argparse
2from logging import getLogger
4from .argparse import Argparse
5from .parser import Parser
7log = getLogger(__name__)
10def main_cls(clsmap, args, deftype=str, positional=False):
11 ps = Parser(deftype)
12 ap = Argparse(positional)
13 parser = argparse.ArgumentParser()
14 sub = parser.add_subparsers()
15 for ifcls, cls in clsmap.items():
16 data = ps.parse_cls(ifcls)
17 log.debug("if=%s, cls=%s, data: %s", ifcls, cls, data)
18 s = sub.add_parser(cls.__name__)
19 s.set_defaults(__IFCLASS__=ifcls, __CLASS__=cls)
20 ap.convert_cls(data, s)
21 parsed = parser.parse_args(args)
22 log.debug("parsed: %s dict=%s", parsed, parsed.__dict__)
23 carg, farg = ap.split_arg(data, parsed)
24 log.debug("carg: %s", carg)
25 log.debug("farg: %s", farg)
26 obj = parsed.__CLASS__(*carg[0], **carg[1])
27 if parsed.__FUNCNAME__ not in ("new"):
28 return getattr(obj, parsed.__FUNCNAME__)(*farg[0], **farg[1])
29 parser.print_usage()
32def main_single(ifcls, cls, args, deftype=str, positional=False):
33 parser = Parser(deftype)
34 ap = Argparse(positional)
35 data = parser.parse_cls(ifcls)
36 log.debug("if=%s, cls=%s, data: %s", ifcls, cls, data)
37 parser = ap.convert_cls(data)
38 parsed = parser.parse_args(args)
39 log.debug("parsed: %s dict=%s", parsed, parsed.__dict__)
40 carg, farg = ap.split_arg(data, parsed)
41 obj = cls(*carg[0], **carg[1])
42 if parsed.__FUNCNAME__ not in ("new"):
43 return getattr(obj, parsed.__FUNCNAME__)(*farg[0], **farg[1])
44 parser.print_usage()
47def main_func(fn, args, noskip=False, deftype=str, positional=False):
48 parser = Parser(deftype)
49 ap = Argparse(positional)
50 log.debug("fn: %s", fn)
51 data = parser.parse_fn(fn)
52 log.debug("data: %s", data)
53 if not noskip:
54 data["flags"].append("staticmethod")
55 p2 = ap.convert_fn(fn.__name__, data)
56 parsed2 = p2.parse_args(args)
57 log.debug("parsed2: %s dict=%s", parsed2, parsed2.__dict__)
58 kwarg, posarg = ap.fn_arg(data, parsed2)
59 log.debug("kwarg=%s, posarg=%s", kwarg, posarg)
60 return fn(*posarg, **kwarg)