Coverage for obj2cli/main.py: 13%

52 statements  

« prev     ^ index     » next       coverage.py v7.16.0, created at 2026-09-05 14:23 +0000

1import argparse 

2from logging import getLogger 

3 

4from .argparse import Argparse 

5from .parser import Parser 

6 

7log = getLogger(__name__) 

8 

9 

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() 

30 

31 

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() 

45 

46 

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)