import argparse import os.path import sys from pathlib import Path from typing import Union from ee.logging import log __all__ = [ "mk_parents", "mk_dirs", "log", # for compatibility, should be removed "parse_bool", ] def _mkdir_and_open(path): dirname = os.path.dirname(path) if len(dirname) > 0: if not os.path.isdir(dirname): os.mkdir(dirname) return open(path, "w") def mk_parents(path: Union[str, Path]): dirname = os.path.dirname(str(path)) if len(dirname) == 0: return mk_dirs(dirname) def mk_dirs(path: Union[str, Path]): dirname = str(path) if not os.path.isdir(dirname): os.mkdir(dirname) def add_default_argparse_group(parser: argparse.ArgumentParser): group = parser.add_argument_group("common") # Ideally these would not be shown when the default output is shown (for example when missing a required argument), # only when --help is given. group.add_argument("-v", "--verbose", help="Verbose output", dest="verbose", action="store_const", const=True) group.add_argument("--log", help="Set log level", choices=["warn", "info", "debug"], dest="log", metavar="LEVEL") def process_default_argparse_group(args): if args.verbose is not None and args.log is not None: print("Can't specify both -v and --log", file=sys.stderr) sys.exit(1) log_level = args.log if args.verbose: log_level = "debug" log_level = log_level if log_level is not None else "info" log.set_level(log_level) def parse_bool(v): if v is None: return False if isinstance(v, bool): return v if v.lower() in ("yes", "true", "t", "y", "1"): return True if v.lower() in ("no", "false", "f", "n", "0"): return False raise argparse.ArgumentTypeError("Boolean value expected.")