import argparse import os from typing import Sequence """ This is always the entry point so you don't technically need to do the __name__ == "__main__" check, but its still common practice to show that this is the entry point. You would start your project/app by first installing it. You can install it as an editable package during development as this symlinks it instead. Example (in venv): pip install -e . python -m ajusta_bling args... """ class EnvDefault(argparse.Action): def __init__(self, envvar, required=False, default=None, **kwargs): if not default and envvar: if envvar in os.environ: default = os.environ[envvar] if required and default: required = False super(EnvDefault, self).__init__(default=default, required=required, **kwargs) def __call__(self, parser, namespace, values, option_string=None): setattr(namespace, self.dest, values) def main(argv: Sequence[str] | None = None) -> int: """ This is where I would put argparse (if you want to use this as a callable package with args) If not then I use this as setup. """ parser = argparse.ArgumentParser( prog=__package__ or "ajusta_bling", ) parser.add_argument( "--dbuser", "-du", type=str, action=EnvDefault, required=True, envvar="POSTGRES_USER", help="PostgreSQL User", ) parser.add_argument( "--dbpassword", "-dP", type=str, action=EnvDefault, envvar="POSTGRES_PASSWORD", help="PostgreSQL Password", ) parser.add_argument( "--dbhost", "-dh", type=str, required=False, default='db', help="PostgreSQL Host", ) parser.add_argument( "--dbport", "-dp", type=int, default=5432, help="PostgreSQL Port", ) parser.add_argument( "--dbname", "-db", type=str, action=EnvDefault, required=True, envvar="POSTGRES_DB", help="PostgreSQL Database", ) parser.add_argument( "--webhost", "-wh", type=str, action=EnvDefault, required=True, envvar="FLASK_HOST", help="Web server host", ) parser.add_argument( "--webport", "-wp", type=int, default=5000, help="Web server port", ) parser.add_argument( "--env", type=str, action=EnvDefault, envvar="FLASK_ENV", default=False, help="Changes flask environment", ) args = parser.parse_args(argv) from . import app from .app import Args args = Args(**vars(args)) app.main(args) return 0 if __name__ == "__main__": raise SystemExit(main())