diff --git a/requirements/dev.txt b/requirements/dev.txt index acdfcdf..f9a64aa 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -1,4 +1,4 @@ --r common.txt +-r srv.txt coverage sqlalchemy-stubs aiosqlite diff --git a/requirements/srv.txt b/requirements/srv.txt new file mode 100644 index 0000000..d418e45 --- /dev/null +++ b/requirements/srv.txt @@ -0,0 +1,2 @@ +-r common.txt +Uvicorn[standard] \ No newline at end of file diff --git a/setup.cfg b/setup.cfg index bc96268..4dd5231 100644 --- a/setup.cfg +++ b/setup.cfg @@ -29,7 +29,10 @@ install_requires = Alembic [options.extras_require] +srv = + Uvicorn[standard] dev = + Uvicorn[standard] coverage sqlalchemy-stubs aiosqlite diff --git a/src/compub/__main__.py b/src/compub/__main__.py new file mode 100644 index 0000000..1ba407d --- /dev/null +++ b/src/compub/__main__.py @@ -0,0 +1,30 @@ +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() diff --git a/src/compub/settings.py b/src/compub/settings.py index 6d3dd60..764c3b5 100644 --- a/src/compub/settings.py +++ b/src/compub/settings.py @@ -81,7 +81,7 @@ class ServerSettings(BaseModel): class Settings(AbstractBaseSettings): - db_uri: DBUri | None = None + db_uri: DBUri = 'sqlite+aiosqlite:///:memory:' server: ServerSettings = ServerSettings() log_config: dict | Path | None = None