2024-06-15 07:34:45 +02:00
|
|
|
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,
|
2024-06-21 03:41:57 +02:00
|
|
|
envvar="POSTGRES_USER",
|
2024-06-15 07:34:45 +02:00
|
|
|
help="PostgreSQL User",
|
|
|
|
)
|
|
|
|
|
|
|
|
parser.add_argument(
|
|
|
|
"--dbpassword", "-dP",
|
|
|
|
type=str,
|
|
|
|
action=EnvDefault,
|
2024-06-21 03:41:57 +02:00
|
|
|
envvar="POSTGRES_PASSWORD",
|
2024-06-15 07:34:45 +02:00
|
|
|
help="PostgreSQL Password",
|
|
|
|
)
|
|
|
|
|
|
|
|
parser.add_argument(
|
|
|
|
"--dbhost", "-dh",
|
|
|
|
type=str,
|
2024-06-21 03:41:57 +02:00
|
|
|
required=False,
|
|
|
|
default='db',
|
2024-06-15 07:34:45 +02:00
|
|
|
help="PostgreSQL Host",
|
|
|
|
)
|
|
|
|
|
|
|
|
parser.add_argument(
|
|
|
|
"--dbport", "-dp",
|
|
|
|
type=int,
|
2024-06-21 03:41:57 +02:00
|
|
|
default=5432,
|
2024-06-15 07:34:45 +02:00
|
|
|
help="PostgreSQL Port",
|
|
|
|
)
|
|
|
|
|
|
|
|
parser.add_argument(
|
|
|
|
"--dbname", "-db",
|
|
|
|
type=str,
|
|
|
|
action=EnvDefault,
|
|
|
|
required=True,
|
2024-06-21 03:41:57 +02:00
|
|
|
envvar="POSTGRES_DB",
|
2024-06-15 07:34:45 +02:00
|
|
|
help="PostgreSQL Database",
|
|
|
|
)
|
|
|
|
|
|
|
|
parser.add_argument(
|
|
|
|
"--webhost", "-wh",
|
|
|
|
type=str,
|
|
|
|
action=EnvDefault,
|
|
|
|
required=True,
|
2024-06-21 03:41:57 +02:00
|
|
|
envvar="FLASK_HOST",
|
2024-06-15 07:34:45 +02:00
|
|
|
help="Web server host",
|
|
|
|
)
|
|
|
|
|
|
|
|
parser.add_argument(
|
|
|
|
"--webport", "-wp",
|
|
|
|
type=int,
|
2024-06-21 03:41:57 +02:00
|
|
|
default=5000,
|
2024-06-15 07:34:45 +02:00
|
|
|
help="Web server port",
|
|
|
|
)
|
|
|
|
|
|
|
|
parser.add_argument(
|
2024-06-21 03:41:57 +02:00
|
|
|
"--env",
|
|
|
|
type=str,
|
2024-06-15 07:34:45 +02:00
|
|
|
action=EnvDefault,
|
2024-06-21 03:41:57 +02:00
|
|
|
envvar="FLASK_ENV",
|
2024-06-15 07:34:45 +02:00
|
|
|
default=False,
|
2024-06-21 03:41:57 +02:00
|
|
|
help="Changes flask environment",
|
2024-06-15 07:34:45 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
args = parser.parse_args(argv)
|
|
|
|
from . import app
|
|
|
|
from .app import Args
|
|
|
|
|
|
|
|
args = Args(**vars(args))
|
|
|
|
|
|
|
|
app.main(args)
|
|
|
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2024-06-21 03:41:57 +02:00
|
|
|
raise SystemExit(main())
|