|
8 | 8 | import sys |
9 | 9 | import textwrap |
10 | 10 | import warnings |
11 | | -from collections.abc import AsyncIterable, AsyncIterator, Awaitable, Callable, Iterator |
| 11 | +from collections.abc import ( |
| 12 | + AsyncGenerator, |
| 13 | + AsyncIterable, |
| 14 | + AsyncIterator, |
| 15 | + Awaitable, |
| 16 | + Callable, |
| 17 | + Iterator, |
| 18 | +) |
12 | 19 | from copy import deepcopy |
13 | 20 | from decimal import Decimal |
14 | 21 | from pathlib import Path |
|
30 | 37 | from aiopg.sa import create_engine |
31 | 38 | from faker import Faker |
32 | 39 | from models_library.api_schemas_directorv2.dynamic_services import DynamicServiceGet |
| 40 | +from models_library.api_schemas_rpc_async_jobs.async_jobs import AsyncJobStatus |
33 | 41 | from models_library.products import ProductName |
| 42 | +from models_library.progress_bar import ProgressReport |
34 | 43 | from models_library.services_enums import ServiceState |
| 44 | +from models_library.users import UserID |
35 | 45 | from pydantic import ByteSize, TypeAdapter |
36 | 46 | from pytest_docker.plugin import Services |
37 | 47 | from pytest_mock import MockerFixture |
|
44 | 54 | from pytest_simcore.helpers.webserver_projects import NewProject |
45 | 55 | from redis import Redis |
46 | 56 | from servicelib.aiohttp.application_keys import APP_AIOPG_ENGINE_KEY |
47 | | -from servicelib.aiohttp.long_running_tasks.client import LRTask |
48 | | -from servicelib.aiohttp.long_running_tasks.server import ProgressPercent, TaskProgress |
49 | 57 | from servicelib.common_aiopg_utils import DSN |
| 58 | +from servicelib.rabbitmq.rpc_interfaces.async_jobs.async_jobs import ( |
| 59 | + AsyncJobComposedResult, |
| 60 | +) |
50 | 61 | from settings_library.email import SMTPSettings |
51 | 62 | from settings_library.redis import RedisDatabase, RedisSettings |
52 | 63 | from simcore_postgres_database.models.groups_extra_properties import ( |
|
63 | 74 | from simcore_service_webserver.constants import INDEX_RESOURCE_NAME |
64 | 75 | from simcore_service_webserver.db.plugin import get_database_engine |
65 | 76 | from simcore_service_webserver.projects.models import ProjectDict |
| 77 | +from simcore_service_webserver.projects.utils import NodesMap |
66 | 78 | from simcore_service_webserver.statics._constants import ( |
67 | 79 | FRONTEND_APP_DEFAULT, |
68 | 80 | FRONTEND_APPS_AVAILABLE, |
@@ -336,29 +348,47 @@ def add_index_route(app: web.Application) -> None: |
336 | 348 |
|
337 | 349 |
|
338 | 350 | @pytest.fixture |
339 | | -async def storage_subsystem_mock(mocker: MockerFixture) -> MockedStorageSubsystem: |
| 351 | +async def storage_subsystem_mock( |
| 352 | + mocker: MockerFixture, faker: Faker |
| 353 | +) -> MockedStorageSubsystem: |
340 | 354 | """ |
341 | 355 | Patches client calls to storage service |
342 | 356 |
|
343 | 357 | Patched functions are exposed within projects but call storage subsystem |
344 | 358 | """ |
345 | 359 |
|
346 | | - async def _mock_copy_data_from_project(app, src_prj, dst_prj, nodes_map, user_id): |
| 360 | + async def _mock_copy_data_from_project( |
| 361 | + app: web.Application, |
| 362 | + *, |
| 363 | + source_project: ProjectDict, |
| 364 | + destination_project: ProjectDict, |
| 365 | + nodes_map: NodesMap, |
| 366 | + user_id: UserID, |
| 367 | + product_name: str, |
| 368 | + ) -> AsyncGenerator[AsyncJobComposedResult, None]: |
347 | 369 | print( |
348 | | - f"MOCK copying data project {src_prj['uuid']} -> {dst_prj['uuid']} " |
| 370 | + f"MOCK copying data project {source_project['uuid']} -> {destination_project['uuid']} " |
349 | 371 | f"with {len(nodes_map)} s3 objects by user={user_id}" |
350 | 372 | ) |
351 | 373 |
|
352 | | - yield LRTask(TaskProgress(message="pytest mocked fct, started")) |
| 374 | + yield AsyncJobComposedResult( |
| 375 | + AsyncJobStatus( |
| 376 | + job_id=faker.uuid4(cast_to=None), |
| 377 | + progress=ProgressReport(actual_value=0), |
| 378 | + done=False, |
| 379 | + ) |
| 380 | + ) |
353 | 381 |
|
354 | | - async def _mock_result(): |
| 382 | + async def _mock_result() -> None: |
355 | 383 | return None |
356 | 384 |
|
357 | | - yield LRTask( |
358 | | - TaskProgress( |
359 | | - message="pytest mocked fct, finished", percent=ProgressPercent(1.0) |
| 385 | + yield AsyncJobComposedResult( |
| 386 | + AsyncJobStatus( |
| 387 | + job_id=faker.uuid4(cast_to=None), |
| 388 | + progress=ProgressReport(actual_value=1), |
| 389 | + done=True, |
360 | 390 | ), |
361 | | - _result=_mock_result(), |
| 391 | + _mock_result(), |
362 | 392 | ) |
363 | 393 |
|
364 | 394 | mock = mocker.patch( |
@@ -723,7 +753,6 @@ async def app_products_names( |
723 | 753 | priority = 1 |
724 | 754 | for name in FRONTEND_APPS_AVAILABLE: |
725 | 755 | if name != FRONTEND_APP_DEFAULT: |
726 | | - |
727 | 756 | async with asyncpg_engine.begin() as conn: |
728 | 757 | result = await conn.execute( |
729 | 758 | products.insert().values( |
|
0 commit comments