generated from daniil-berg/boilerplate-py
31 lines
927 B
Python
31 lines
927 B
Python
from argparse import ArgumentParser, SUPPRESS
|
|
from pathlib import Path
|
|
from typing import Any, Sequence
|
|
|
|
import uvicorn
|
|
|
|
from .settings import PROGRAM_NAME, CONFIG_FILE_PATH_PARAM, DEFAULT_CONFIG_FILE_PATHS, init, settings
|
|
|
|
|
|
def parse_cli(args: Sequence[str] = None) -> dict[str, Any]:
|
|
parser = ArgumentParser(PROGRAM_NAME)
|
|
parser.add_argument(
|
|
'-c', f'--{CONFIG_FILE_PATH_PARAM}',
|
|
type=Path,
|
|
metavar='PATH',
|
|
default=SUPPRESS,
|
|
help=f"Paths to config file that will take precedence over all others; "
|
|
f"the following {len(DEFAULT_CONFIG_FILE_PATHS)} paths are always checked first (in that order):"
|
|
f" {','.join(str(p) for p in DEFAULT_CONFIG_FILE_PATHS)}"
|
|
)
|
|
return vars(parser.parse_args(args))
|
|
|
|
|
|
def main():
|
|
init(**parse_cli())
|
|
uvicorn.run(f'{PROGRAM_NAME}.routes:app', **settings.server.dict())
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|