Source code for ifgen.entry
# =====================================
# generator=datazen
# version=3.2.1
# hash=089f57617fd119bfbae72f24dfa671c7
# =====================================
"""
This package's command-line entry-point (boilerplate).
"""
# built-in
import argparse
from logging import getLogger
import os
from pathlib import Path
import sys
from typing import List
# third-party
from vcorelib.logging import init_logging, log_time, logging_args
# internal
from ifgen import DESCRIPTION, VERSION
from ifgen.app import add_app_args, entry
[docs]
def main(argv: List[str] = None) -> int:
"""Program entry-point."""
result = 0
# fall back on command-line arguments
command_args = sys.argv
if argv is not None:
command_args = argv
# initialize argument parsing
parser = argparse.ArgumentParser(description=DESCRIPTION)
parser.add_argument(
"--version",
action="version",
version=f"%(prog)s {VERSION}",
)
logging_args(parser)
parser.add_argument(
"-C",
"--dir",
default=Path.cwd(),
dest="dir",
type=Path,
help="execute from a specific directory",
)
starting_dir = Path.cwd()
add_app_args(parser)
# parse arguments and execute the requested command
try:
args = parser.parse_args(command_args[1:])
args.version = VERSION
args.dir = args.dir.resolve()
# initialize logging
init_logging(
args, default_format="%(name)-36s - %(levelname)-6s - %(message)s"
)
# change to the specified directory
os.chdir(args.dir)
# run the application
with log_time(getLogger(__name__), "Command"):
result = entry(args)
except SystemExit as exc:
result = 1
if exc.code is not None and isinstance(exc.code, int):
result = exc.code
# return to starting dir
os.chdir(starting_dir)
return result