Coverage for src/hatch_ci/__main__.py: 0%
41 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-07-28 04:31 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2023-07-28 04:31 +0000
1from __future__ import annotations
3import argparse
4import functools
5import logging
6import sys
7from typing import Any
9from . import tools
11log = logging.getLogger(__name__)
14def parse_args(args: str | None = None, testmode: bool = False) -> dict[str, Any]:
15 """parses args from the command line
17 Args:
18 args: command line arguments or None to pull from sys.argv
19 testmode: internal flag, if set will not SystemExit but will
20 raises tools.AbortExecution
21 """
23 class F(
24 argparse.ArgumentDefaultsHelpFormatter, argparse.RawDescriptionHelpFormatter
25 ):
26 pass
28 parser = argparse.ArgumentParser(formatter_class=F, description=__doc__)
30 parser.add_argument("-n", "--dry-run", dest="dryrun", action="store_true")
31 parser.add_argument("-v", "--verbose", action="store_true")
33 options = parser.parse_args(args)
35 def error(message, explain="", hint="", parser=None, testmode=False):
36 out = []
37 if parser:
38 out.extend(tools.indent(parser.format_usage()).split("\n"))
39 if message:
40 out.extend(tools.indent(message).split("\n"))
41 if explain:
42 out.append("reason:")
43 out.extend(tools.indent(explain).split("\n"))
44 if hint:
45 out.append("hint:")
46 out.extend(tools.indent(hint).split("\n"))
48 if testmode:
49 raise tools.AbortExecution(message, explain, hint)
50 else:
51 print() # noqa: T201
52 print("\n".join(out), file=sys.stderr) # noqa: T201
53 raise SystemExit(2)
55 options.error = functools.partial(error, parser=parser, testmode=testmode)
57 logging.basicConfig(
58 format="%(levelname)s:%(name)s:(dry-run) %(message)s"
59 if options.dryrun
60 else "%(levelname)s:%(name)s:%(message)s",
61 level=logging.DEBUG if options.verbose else logging.INFO,
62 )
64 for d in [
65 "verbose",
66 ]:
67 delattr(options, d)
68 return options.__dict__
71def run():
72 pass
75def main():
76 run(**parse_args())
79if __name__ == "__main__":
80 main()