From 8ec4e8885af838a3f1628b085d29185445129b38 Mon Sep 17 00:00:00 2001 From: Daniil Fajnberg Date: Wed, 29 Jun 2022 13:04:36 +0200 Subject: [PATCH] Add uvicorn server; make in-memory DB default --- requirements/dev.txt | 2 +- requirements/srv.txt | 2 ++ setup.cfg | 3 +++ src/compub/__main__.py | 30 ++++++++++++++++++++++++++++++ src/compub/settings.py | 2 +- 5 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 requirements/srv.txt create mode 100644 src/compub/__main__.py 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