Skip to content

Commit

Permalink
GH-120: Refresh database connections after 30 mins
Browse files Browse the repository at this point in the history
  • Loading branch information
markhobson committed Jul 8, 2024
1 parent 2ebefe3 commit f03f6df
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 1 deletion.
3 changes: 2 additions & 1 deletion schemes/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,8 @@ def _create_engine(app: Flask) -> Engine:
@inject.autoparams()
def _create_capital_schemes_engine(config: Config, engine: Engine) -> Engine:
database_uri = config.get("CAPITAL_SCHEMES_DATABASE_URI")
return create_engine(database_uri) if database_uri else engine
engine_options = config["SQLALCHEMY_ENGINE_OPTIONS"]
return create_engine(database_uri, **engine_options) if database_uri else engine


@inject.params(engine=Engine, capital_schemes_engine=(Engine, CapitalSchemeEntity))
Expand Down
1 change: 1 addition & 0 deletions schemes/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ class Config:

# Flask-SQLAlchemy
SQLALCHEMY_DATABASE_URI = "sqlite+pysqlite:///:memory:"
SQLALCHEMY_ENGINE_OPTIONS = {"pool_recycle": int(timedelta(minutes=30).total_seconds())}

# Flask-Session
SESSION_TYPE = "sqlalchemy"
Expand Down
24 changes: 24 additions & 0 deletions tests/integration/test_database.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from typing import Any, Mapping

import inject
import pytest
from sqlalchemy import Engine

from schemes.infrastructure.database import CapitalSchemeEntity


@pytest.mark.usefixtures("client")
class TestDatabase:
@pytest.fixture(name="config", scope="class")
def config_fixture(self, config: Mapping[str, Any]) -> Mapping[str, Any]:
return dict(config) | {"CAPITAL_SCHEMES_DATABASE_URI": "sqlite+pysqlite:///:memory:"}

def test_pool_recycles_connections(self) -> None:
engine = inject.instance(Engine)

assert engine.pool._recycle == 1800

def test_capital_schemes_pool_recycles_connections(self) -> None:
engine = inject.instance((Engine, CapitalSchemeEntity))

assert isinstance(engine, Engine) and engine.pool._recycle == 1800

0 comments on commit f03f6df

Please sign in to comment.