From 2f453dad43585dddc06516e49a476f6bc686c198 Mon Sep 17 00:00:00 2001 From: sanderegg <35365065+sanderegg@users.noreply.github.com> Date: Tue, 6 May 2025 08:36:37 +0200 Subject: [PATCH 1/2] removed aiopg dependency --- .../tests/test_comp_tasks.py | 5 ++++- .../src/pytest_simcore/db_entries_mocks.py | 21 +++++++++++-------- .../src/pytest_simcore/postgres_service.py | 7 +++++++ services/director-v2/requirements/_test.in | 1 - services/director-v2/requirements/_test.txt | 10 --------- 5 files changed, 23 insertions(+), 21 deletions(-) diff --git a/packages/postgres-database/tests/test_comp_tasks.py b/packages/postgres-database/tests/test_comp_tasks.py index 4c36260f4318..490c0cebc986 100644 --- a/packages/postgres-database/tests/test_comp_tasks.py +++ b/packages/postgres-database/tests/test_comp_tasks.py @@ -5,6 +5,7 @@ import asyncio import json +from collections.abc import AsyncIterator import pytest from aiopg.sa.engine import Engine, SAConnection @@ -25,7 +26,9 @@ async def db_connection(aiopg_engine: Engine) -> SAConnection: @pytest.fixture() -async def db_notification_queue(db_connection: SAConnection) -> asyncio.Queue: +async def db_notification_queue( + db_connection: SAConnection, +) -> AsyncIterator[asyncio.Queue]: listen_query = f"LISTEN {DB_CHANNEL_NAME};" await db_connection.execute(listen_query) notifications_queue: asyncio.Queue = db_connection.connection.notifies diff --git a/packages/pytest-simcore/src/pytest_simcore/db_entries_mocks.py b/packages/pytest-simcore/src/pytest_simcore/db_entries_mocks.py index dc696093ec37..20038c9a58ad 100644 --- a/packages/pytest-simcore/src/pytest_simcore/db_entries_mocks.py +++ b/packages/pytest-simcore/src/pytest_simcore/db_entries_mocks.py @@ -7,7 +7,6 @@ from typing import Any from uuid import uuid4 -import aiopg.sa import pytest import sqlalchemy as sa from faker import Faker @@ -20,6 +19,7 @@ ProjectNodeCreate, ProjectNodesRepo, ) +from sqlalchemy.ext.asyncio import AsyncEngine @pytest.fixture() @@ -63,7 +63,7 @@ def creator(**user_kwargs) -> dict[str, Any]: @pytest.fixture async def project( - aiopg_engine: aiopg.sa.engine.Engine, faker: Faker + sqlalchemy_async_engine: AsyncEngine, faker: Faker ) -> AsyncIterator[Callable[..., Awaitable[ProjectAtDB]]]: created_project_ids: list[str] = [] @@ -86,17 +86,22 @@ async def creator( "workbench": {}, } project_config.update(**project_overrides) - async with aiopg_engine.acquire() as con, con.begin(): + async with sqlalchemy_async_engine.connect() as con, con.begin(): result = await con.execute( projects.insert() .values(**project_config) .returning(sa.literal_column("*")) ) - inserted_project = ProjectAtDB.model_validate(await result.first()) + inserted_project = ProjectAtDB.model_validate(result.one()) project_nodes_repo = ProjectNodesRepo(project_uuid=project_uuid) # NOTE: currently no resources is passed until it becomes necessary - default_node_config = {"required_resources": {}, "key": faker.pystr(), "version": faker.pystr(), "label": faker.pystr()} + default_node_config = { + "required_resources": {}, + "key": faker.pystr(), + "version": faker.pystr(), + "label": faker.pystr(), + } if project_nodes_overrides: default_node_config.update(project_nodes_overrides) await project_nodes_repo.add( @@ -113,7 +118,7 @@ async def creator( yield creator # cleanup - async with aiopg_engine.acquire() as con: + async with sqlalchemy_async_engine.begin() as con: await con.execute( projects.delete().where(projects.c.uuid.in_(created_project_ids)) ) @@ -121,9 +126,7 @@ async def creator( @pytest.fixture -def pipeline( - postgres_db: sa.engine.Engine, -) -> Iterator[Callable[..., dict[str, Any]]]: +def pipeline(postgres_db: sa.engine.Engine) -> Iterator[Callable[..., dict[str, Any]]]: created_pipeline_ids: list[str] = [] def creator(**pipeline_kwargs) -> dict[str, Any]: diff --git a/packages/pytest-simcore/src/pytest_simcore/postgres_service.py b/packages/pytest-simcore/src/pytest_simcore/postgres_service.py index c4df0b40c3b0..e274274141a1 100644 --- a/packages/pytest-simcore/src/pytest_simcore/postgres_service.py +++ b/packages/pytest-simcore/src/pytest_simcore/postgres_service.py @@ -3,6 +3,7 @@ # pylint: disable=unused-variable import json +import warnings from collections.abc import AsyncIterator, Iterator from typing import Final @@ -212,6 +213,12 @@ async def aiopg_engine( engine = await create_engine(str(postgres_db.url)) + warnings.warn( + "The 'aiopg_engine' fixture is deprecated and will be removed in a future release. " + "Please use 'asyncpg_engine' fixture instead.", + DeprecationWarning, + stacklevel=2, + ) yield engine if engine: diff --git a/services/director-v2/requirements/_test.in b/services/director-v2/requirements/_test.in index 9bdede0a979a..3633a09b7044 100644 --- a/services/director-v2/requirements/_test.in +++ b/services/director-v2/requirements/_test.in @@ -11,7 +11,6 @@ aio_pika aioboto3 -aiopg[sa] alembic # migration due to pytest_simcore.postgres_service2 asgi_lifespan async-asgi-testclient # replacement for fastapi.testclient.TestClient [see b) below] diff --git a/services/director-v2/requirements/_test.txt b/services/director-v2/requirements/_test.txt index 0bdf57be3ebb..e572ea1f8b5b 100644 --- a/services/director-v2/requirements/_test.txt +++ b/services/director-v2/requirements/_test.txt @@ -21,8 +21,6 @@ aiohttp==3.11.13 # aiobotocore aioitertools==0.12.0 # via aiobotocore -aiopg==1.4.0 - # via -r requirements/_test.in aiormq==6.8.1 # via # -c requirements/_base.txt @@ -43,8 +41,6 @@ asgi-lifespan==2.1.0 # via -r requirements/_test.in async-asgi-testclient==1.4.11 # via -r requirements/_test.in -async-timeout==4.0.3 - # via aiopg attrs==25.1.0 # via # -c requirements/_base.txt @@ -227,11 +223,6 @@ psutil==6.1.0 # via # -c requirements/_base.txt # distributed -psycopg2-binary==2.9.10 - # via - # -c requirements/_base.txt - # aiopg - # sqlalchemy pytest==8.3.5 # via # -r requirements/_test.in @@ -299,7 +290,6 @@ sqlalchemy==1.4.54 # -c requirements/../../../requirements/constraints.txt # -c requirements/_base.txt # -r requirements/_test.in - # aiopg # alembic sqlalchemy2-stubs==0.0.2a38 # via sqlalchemy From 3f2878a2371e8207a6908db7d9afebae7db3db4b Mon Sep 17 00:00:00 2001 From: sanderegg <35365065+sanderegg@users.noreply.github.com> Date: Tue, 6 May 2025 08:39:34 +0200 Subject: [PATCH 2/2] cleanup --- .../pytest-simcore/src/pytest_simcore/postgres_service.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/pytest-simcore/src/pytest_simcore/postgres_service.py b/packages/pytest-simcore/src/pytest_simcore/postgres_service.py index e274274141a1..19d9247e8eab 100644 --- a/packages/pytest-simcore/src/pytest_simcore/postgres_service.py +++ b/packages/pytest-simcore/src/pytest_simcore/postgres_service.py @@ -11,15 +11,15 @@ import pytest import sqlalchemy as sa import tenacity -from pytest_simcore.helpers.monkeypatch_envs import setenvs_from_dict -from pytest_simcore.helpers.typing_env import EnvVarsDict from sqlalchemy.ext.asyncio import AsyncEngine from tenacity.stop import stop_after_delay from tenacity.wait import wait_fixed from .helpers.docker import get_service_published_port from .helpers.host import get_localhost_ip +from .helpers.monkeypatch_envs import setenvs_from_dict from .helpers.postgres_tools import PostgresTestConfig, migrated_pg_tables_context +from .helpers.typing_env import EnvVarsDict _TEMPLATE_DB_TO_RESTORE = "template_simcore_db"