diff --git a/fluid/__init__.py b/fluid/__init__.py index 7af4e0e..0beab08 100644 --- a/fluid/__init__.py +++ b/fluid/__init__.py @@ -1,3 +1,3 @@ """Reusable server side python modules""" -__version__ = "1.6.3" +__version__ = "1.6.4" diff --git a/fluid/scheduler/cli.py b/fluid/scheduler/cli.py index ad9bfa6..9b7b122 100644 --- a/fluid/scheduler/cli.py +++ b/fluid/scheduler/cli.py @@ -11,6 +11,7 @@ from pydantic import BaseModel from rich.console import Console from rich.table import Table +from typing_extensions import Annotated, Doc from uvicorn.importer import import_from_string from fluid.utils import log as log_ @@ -38,19 +39,43 @@ class TaskManagerCLI(LazyGroup): def __init__( self, task_manager_app: TaskManagerApp, + log_config: dict | None = None, **kwargs: Any, ): kwargs.setdefault("commands", DEFAULT_COMMANDS) super().__init__(**kwargs) - self.task_manager_app = task_manager_app + self.task_manager_app: Annotated[ + TaskManagerApp, + Doc( + """ + Task manager application. + + This can be a FastAPI app, a callable that returns a FastAPI app, + or a string import path to a FastAPI app. + """ + ), + ] = task_manager_app + self.log_config: Annotated[ + dict, + Doc( + """ + Log configuration parameters. + + These parameters are passed to the log_config argument of + `fluid.utils.log.config()`. + """ + ), + ] = ( + log_config or {} + ) -def ctx_task_manager_app(ctx: click.Context) -> TaskManagerApp: - return ctx.parent.command.task_manager_app # type: ignore +def ctx_task_manager_cli(ctx: click.Context) -> TaskManagerCLI: + return ctx.parent.command # type: ignore def ctx_app(ctx: click.Context) -> FastAPI: - app = ctx_task_manager_app(ctx) # type: ignore + app = ctx_task_manager_cli(ctx).task_manager_app if isinstance(app, str): return import_from_string(app)() elif isinstance(app, FastAPI): @@ -81,7 +106,8 @@ def get_command(self, ctx: click.Context, cmd_name: str) -> click.Command | None @from_pydantic(task.params_model) def execute_task(log: bool, run_id: str, params: str, **extra: Any) -> None: if log: - log_.config() + log_config = ctx_task_manager_cli(ctx).log_config + log_.config(**log_config) kwargs = json.loads(params or "{}") for value in extra.values(): if isinstance(value, BaseModel): @@ -132,14 +158,14 @@ def ls(ctx: click.Context) -> None: @click.pass_context def serve(ctx: click.Context, host: str, port: int, reload: bool) -> None: """Run the service""" - task_manager_app = ctx_task_manager_app(ctx) + cli = ctx_task_manager_cli(ctx) uvicorn.run( - task_manager_app, + cli.task_manager_app, port=port, host=host, log_level="info", reload=reload, - log_config=log_.config(), + log_config=log_.config(**cli.log_config), ) diff --git a/poetry.lock b/poetry.lock index 654048f..b66987a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -950,14 +950,14 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth [[package]] name = "fastapi" -version = "0.122.0" +version = "0.123.0" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "fastapi-0.122.0-py3-none-any.whl", hash = "sha256:a456e8915dfc6c8914a50d9651133bd47ec96d331c5b44600baa635538a30d67"}, - {file = "fastapi-0.122.0.tar.gz", hash = "sha256:cd9b5352031f93773228af8b4c443eedc2ac2aa74b27780387b853c3726fb94b"}, + {file = "fastapi-0.123.0-py3-none-any.whl", hash = "sha256:cb56e69e874afa897bd3416c8a3dbfdae1730d0a308d4c63303f3f4b44136ae4"}, + {file = "fastapi-0.123.0.tar.gz", hash = "sha256:1410678b3c44418245eec85088b15140d894074b86e66061017e2b492c09b138"}, ] [package.dependencies] diff --git a/pyproject.toml b/pyproject.toml index f90e82a..dd0cd54 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "aio-fluid" -version = "1.6.3" +version = "1.6.4" description = "Tools for backend python services" authors = [{ name = "Luca Sbardella", email = "luca@quantmind.com" }] license = "BSD"