diff --git a/pyproject.toml b/pyproject.toml index f80c124..780594a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "pytest-mock-resources" -version = "2.6.8" +version = "2.6.9" description = "A pytest plugin for easily instantiating reproducible mock resources." authors = [ "Omar Khan ", diff --git a/src/pytest_mock_resources/container/postgres.py b/src/pytest_mock_resources/container/postgres.py index f6d739d..7aff7de 100644 --- a/src/pytest_mock_resources/container/postgres.py +++ b/src/pytest_mock_resources/container/postgres.py @@ -107,7 +107,7 @@ def get_sqlalchemy_engine( database=database_name, ) - if getattr(url.get_dialect(), "is_async"): + if getattr(url.get_dialect(), "is_async", None): from sqlalchemy.ext.asyncio import create_async_engine engine = create_async_engine(url, **engine_kwargs, isolation_level=isolation_level) diff --git a/src/pytest_mock_resources/fixture/postgresql.py b/src/pytest_mock_resources/fixture/postgresql.py index 5748930..253da24 100644 --- a/src/pytest_mock_resources/fixture/postgresql.py +++ b/src/pytest_mock_resources/fixture/postgresql.py @@ -109,14 +109,18 @@ async def _async(*_, pmr_postgres_container, pmr_postgres_config): def _sync_fixture(pmr_config, engine_manager_kwargs, engine_kwargs): root_engine = cast(Engine, get_sqlalchemy_engine(pmr_config, pmr_config.root_database)) - retry(root_engine.connect, retries=DEFAULT_RETRIES) + conn = retry(root_engine.connect, retries=DEFAULT_RETRIES) + conn.close() + root_engine.dispose() + root_engine = cast(Engine, get_sqlalchemy_engine(pmr_config, pmr_config.root_database)) with root_engine.connect() as root_conn: with root_conn.begin() as trans: template_database, template_manager, engine_manager = create_engine_manager( root_conn, **engine_manager_kwargs ) trans.commit() + root_engine.dispose() if template_manager: assert template_database @@ -132,10 +136,12 @@ def _sync_fixture(pmr_config, engine_manager_kwargs, engine_kwargs): # Everything below is normal per-test context. We create a brand new database/engine/manager # distinct from what might have been used for the template database. + root_engine = cast(Engine, get_sqlalchemy_engine(pmr_config, pmr_config.root_database)) with root_engine.connect() as root_conn: with root_conn.begin() as trans: database_name = _produce_clean_database(root_conn, createdb_template=template_database) trans.commit() + root_engine.dispose() engine = get_sqlalchemy_engine(pmr_config, database_name, **engine_kwargs) yield from engine_manager.manage_sync(engine)