ajusta_bling_py/ajusta_bling/__main__.py

117 lines
2.8 KiB
Python

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