mirror of
https://framagit.org/framasoft/framaspace/argos.git
synced 2025-04-28 18:02:41 +02:00
Allow defining db pool size and max overflow in the settings
This commit is contained in:
parent
43078da6a1
commit
6e408e1cf7
5 changed files with 28 additions and 5 deletions
|
@ -1,2 +1,4 @@
|
|||
ARGOS_YAML_FILE = "my-config.yaml"
|
||||
ARGOS_DATABASE_URL = "postgresql://argos:argos@localhost/argos"
|
||||
DB_POOL_SIZE = 10
|
||||
DB_MAX_OVERFLOW = 20
|
|
@ -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
|
||||
)
|
||||
|
|
|
@ -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 = {
|
||||
|
|
|
@ -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 = {
|
||||
"**": [
|
||||
|
|
|
@ -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",
|
||||
|
|
Loading…
Reference in a new issue