diff --git a/.env.example b/.env.example index 7e408a3..033789a 100644 --- a/.env.example +++ b/.env.example @@ -1,2 +1,4 @@ ARGOS_YAML_FILE = "my-config.yaml" -ARGOS_DATABASE_URL = "postgresql://argos:argos@localhost/argos" \ No newline at end of file +ARGOS_DATABASE_URL = "postgresql://argos:argos@localhost/argos" +DB_POOL_SIZE = 10 +DB_MAX_OVERFLOW = 20 \ No newline at end of file diff --git a/argos/server/main.py b/argos/server/main.py index 75dee22..262f31a 100644 --- a/argos/server/main.py +++ b/argos/server/main.py @@ -76,7 +76,19 @@ def setup_database(app): logger.debug(f"Using database URL {settings.database_url}") if settings.database_url.startswith("sqlite:////tmp"): logger.warning("Using sqlite in /tmp is not recommended for production") - engine = create_engine(settings.database_url, pool_size=10, max_overflow=20) + + extra_settings = {} + if settings.db_pool_size: + extra_settings.set("pool_size", settings.db_pool_size) + + if settings.db_max_overflow: + extra_settings.set("max_overflow", settings.db_max_overflow) + + max_overflow=settings.db_max_overflow, + engine = create_engine( + settings.database_url, + **extra_settings + ) app.state.SessionLocal = sessionmaker( autocommit=False, autoflush=False, bind=engine ) diff --git a/argos/server/settings.py b/argos/server/settings.py index 3835727..8116bb1 100644 --- a/argos/server/settings.py +++ b/argos/server/settings.py @@ -1,6 +1,7 @@ import os from functools import lru_cache from os import environ +from typing import Optional import yaml from pydantic_settings import BaseSettings, SettingsConfigDict @@ -14,23 +15,30 @@ class Settings(BaseSettings): app_env: str database_url: str yaml_file: str + db_pool_size: Optional[int] + db_max_overflow: Optional[int] class DevSettings(Settings): app_env: str = "dev" database_url: str = "sqlite:////tmp/argos.db" yaml_file: str = "config.yaml" + db_pool_size: Optional[int] = None + db_max_overflow: Optional[int] = None class TestSettings(Settings): app_env: str = "test" yaml_file: str = "tests/config.yaml" database_url: str = "sqlite:////tmp/test-argos.db" + db_pool_size: Optional[int] = None + db_max_overflow: Optional[int] = None class ProdSettings(Settings): app_env: str = "prod" - pass + db_pool_size: Optional[int] = 10 + db_max_overflow: Optional[int] = 20 environments = { diff --git a/docs/conf.py b/docs/conf.py index a8f285b..e7edefd 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -19,7 +19,7 @@ myst_enable_extensions = ["colon_fence"] templates_path = ["_templates"] exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] -mermaid_params = ['--theme', 'forest'] +mermaid_params = ["--theme", "forest"] html_sidebars = { "**": [ diff --git a/pyproject.toml b/pyproject.toml index cdd206b..8e2f3c5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,6 +41,7 @@ dev = [ "ipython>=8.16,<9", "ipdb>=0.13,<0.14", "sphinx-autobuild", + "ruff==0.1.5,<1" ] postgres = [ "psycopg2-binary>=2.9,<3", @@ -73,4 +74,4 @@ testpaths = [ "tests", "argos" ] -pythonpath = "." \ No newline at end of file +pythonpath = "."