Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

✨ Add storage dummy rpc endpoints for zipping #7202

Merged
Show file tree
Hide file tree
Changes from 25 commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
1b906ef
add rabbitmq to storage
bisgaard-itis Feb 10, 2025
027f68b
add call to setup function
bisgaard-itis Feb 10, 2025
f5f492e
add initial rpc route
bisgaard-itis Feb 10, 2025
e6efb1a
minor fix
bisgaard-itis Feb 10, 2025
f6c3269
add toy model as output
bisgaard-itis Feb 10, 2025
16fff65
add client for zipping
bisgaard-itis Feb 10, 2025
859e787
resolve conflicts and make first test run
bisgaard-itis Feb 10, 2025
240dc9c
fix in test
bisgaard-itis Feb 11, 2025
da71679
fix test
bisgaard-itis Feb 11, 2025
6d26dcb
use long running tasks models
bisgaard-itis Feb 11, 2025
a35181b
minor fixes
bisgaard-itis Feb 11, 2025
b137177
add test for abort endpoint
bisgaard-itis Feb 11, 2025
4f88db3
add get_status endpoint as well as test
bisgaard-itis Feb 11, 2025
c865908
add result endpoint
bisgaard-itis Feb 11, 2025
5b99737
fix imports
bisgaard-itis Feb 11, 2025
59f66ef
merge master into 7199-create-storage-workhorse-mode
bisgaard-itis Feb 11, 2025
2a733e4
add init file
bisgaard-itis Feb 11, 2025
c6541f0
disable some pylint complaints
bisgaard-itis Feb 11, 2025
a643ec6
fix imports
bisgaard-itis Feb 11, 2025
0cec8ad
add init file
bisgaard-itis Feb 11, 2025
72e2c02
assert app
bisgaard-itis Feb 11, 2025
94b37ec
@sanderegg fix import
bisgaard-itis Feb 11, 2025
6a9c642
@sanderegg remove validator
bisgaard-itis Feb 11, 2025
3e97807
merge master into 7199-create-storage-workhorse-mode
bisgaard-itis Feb 11, 2025
0179353
make pylint happy
bisgaard-itis Feb 11, 2025
ae6f571
make pylint happy
bisgaard-itis Feb 11, 2025
66dafb0
mock the rabbit
bisgaard-itis Feb 11, 2025
661b835
add fixture to not mock the rabbit for zipping tests
bisgaard-itis Feb 11, 2025
38476c4
merge master into 7199-create-storage-workhorse-mode
bisgaard-itis Feb 12, 2025
861536b
add rabbit env vars to docker-compose
bisgaard-itis Feb 12, 2025
7c3ea75
@pcrespov rabbit_rpc -> rpc
bisgaard-itis Feb 12, 2025
c219b03
@pcrespov decouple task models
bisgaard-itis Feb 12, 2025
d4a0e5b
merge master into 7199-create-storage-workhorse-mode
bisgaard-itis Feb 12, 2025
e3b80d1
merge master
bisgaard-itis Feb 12, 2025
e79eb83
fix webserver api script again after merge conflicts
bisgaard-itis Feb 12, 2025
1cce37e
add init file for rpc schemas
bisgaard-itis Feb 12, 2025
d0c4b36
fix import
bisgaard-itis Feb 12, 2025
8fd16f9
merge master into 7199-create-storage-workhorse-mode
bisgaard-itis Feb 12, 2025
655835b
merge master into 7199-create-storage-workhorse-mode
bisgaard-itis Feb 13, 2025
6847d11
@pcrespov use fastapi lifespan
bisgaard-itis Feb 13, 2025
4ae7f6f
Revert "@pcrespov use fastapi lifespan"
bisgaard-itis Feb 13, 2025
854c4b5
fix dynamic-sidecar integration tests
bisgaard-itis Feb 13, 2025
5743005
merge master into 7199-create-storage-workhorse-mode
bisgaard-itis Feb 13, 2025
908b141
make simcore-sdk integration tests pass
bisgaard-itis Feb 13, 2025
31aeeb2
a few more fixes
bisgaard-itis Feb 13, 2025
100aaae
merge master into 7199-create-storage-workhorse-mode
bisgaard-itis Feb 13, 2025
84de735
@GitHK done_done -> done
bisgaard-itis Feb 13, 2025
5ad9ea2
@GitHK zipping -> data_export
bisgaard-itis Feb 13, 2025
4232278
further name changes zipping -> data_export
bisgaard-itis Feb 13, 2025
d4ebfd4
merge master into 7199-create-storage-workhorse-mode
bisgaard-itis Feb 14, 2025
7560a94
@GitHK long_running_tasks -> data_export
bisgaard-itis Feb 14, 2025
73f9b12
resolve comparison with float issue
bisgaard-itis Feb 14, 2025
91003f0
fix imports
bisgaard-itis Feb 14, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions api/specs/web-server/_storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
from typing import TypeAlias

from fastapi import APIRouter, Query, status
from models_library.api_schemas_storage import (
from models_library.generics import Envelope
from models_library.projects_nodes_io import LocationID
from models_library.storage_schemas import (
FileMetaDataGet,
FileUploadCompleteFutureResponse,
FileUploadCompleteResponse,
Expand All @@ -16,8 +18,6 @@
LinkType,
PresignedLink,
)
from models_library.generics import Envelope
from models_library.projects_nodes_io import LocationID
from pydantic import AnyUrl, ByteSize
from simcore_service_webserver._meta import API_VTAG
from simcore_service_webserver.storage.schemas import DatasetMetaData, FileMetaData
Expand Down
2 changes: 1 addition & 1 deletion packages/aws-library/src/aws_library/s3/_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
from boto3.s3.transfer import TransferConfig
from botocore import exceptions as botocore_exc
from botocore.client import Config
from models_library.api_schemas_storage import ETag, S3BucketName, UploadedPart
from models_library.basic_types import SHA256Str
from models_library.storage_schemas import ETag, S3BucketName, UploadedPart
from pydantic import AnyUrl, ByteSize, TypeAdapter
from servicelib.logging_utils import log_catch, log_context
from servicelib.utils import limited_gather
Expand Down
2 changes: 1 addition & 1 deletion packages/aws-library/src/aws_library/s3/_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
from dataclasses import dataclass
from typing import TypeAlias

from models_library.api_schemas_storage import ETag
from models_library.basic_types import SHA256Str
from models_library.storage_schemas import ETag
from pydantic import AnyUrl, BaseModel, ByteSize
from types_aiobotocore_s3.type_defs import HeadObjectOutputTypeDef, ObjectTypeDef

Expand Down
2 changes: 1 addition & 1 deletion packages/aws-library/tests/test_s3_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@
)
from aws_library.s3._models import MultiPartUploadLinks
from faker import Faker
from models_library.api_schemas_storage import S3BucketName, UploadedPart
from models_library.basic_types import SHA256Str
from models_library.storage_schemas import S3BucketName, UploadedPart
from moto.server import ThreadedMotoServer
from pydantic import AnyUrl, ByteSize, TypeAdapter
from pytest_benchmark.plugin import BenchmarkFixture
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from typing import Final

from pydantic import TypeAdapter

from ..rabbitmq_basic_types import RPCNamespace

STORAGE_RPC_NAMESPACE: Final[RPCNamespace] = TypeAdapter(RPCNamespace).validate_python(
"storage"
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# pylint: disable=R6301
from pathlib import Path

from models_library.api_schemas_long_running_tasks.base import TaskId
from pydantic import BaseModel, Field


class ZipTaskStartInput(BaseModel):
paths: list[Path] = Field(..., min_length=1)


class ZipTaskAbortOutput(BaseModel):
result: bool
task_id: TaskId
2 changes: 1 addition & 1 deletion packages/pytest-simcore/src/pytest_simcore/helpers/s3.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import orjson
from aws_library.s3 import MultiPartUploadLinks
from fastapi import status
from models_library.api_schemas_storage import ETag, FileUploadSchema, UploadedPart
from models_library.storage_schemas import ETag, FileUploadSchema, UploadedPart
from pydantic import AnyUrl, ByteSize, TypeAdapter
from servicelib.utils import limited_as_completed, logged_gather
from types_aiobotocore_s3 import S3Client
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,10 @@
from aioresponses.core import CallbackResult
from faker import Faker
from models_library.api_schemas_directorv2.comp_tasks import ComputationGet
from models_library.api_schemas_storage import (
from models_library.generics import Envelope
from models_library.projects_pipeline import ComputationTask
from models_library.projects_state import RunningState
from models_library.storage_schemas import (
FileMetaDataGet,
FileUploadCompleteFutureResponse,
FileUploadCompleteResponse,
Expand All @@ -22,9 +25,6 @@
LinkType,
PresignedLink,
)
from models_library.generics import Envelope
from models_library.projects_pipeline import ComputationTask
from models_library.projects_state import RunningState
from models_library.utils.fastapi_encoders import jsonable_encoder
from pydantic import AnyUrl, ByteSize, TypeAdapter
from servicelib.aiohttp import status
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
from typing import Final

from models_library.api_schemas_long_running_tasks.base import TaskId
from models_library.api_schemas_long_running_tasks.tasks import (
TaskGet,
TaskResult,
TaskStatus,
)
from models_library.api_schemas_storage import STORAGE_RPC_NAMESPACE
from models_library.api_schemas_storage.zipping_tasks import (
ZipTaskAbortOutput,
ZipTaskStartInput,
)
from models_library.rabbitmq_basic_types import RPCMethodName
from pydantic import NonNegativeInt, TypeAdapter

from ... import RabbitMQRPCClient

_DEFAULT_TIMEOUT_S: Final[NonNegativeInt] = 30

_RPC_METHOD_NAME_ADAPTER = TypeAdapter(RPCMethodName)


async def start_zipping(
rabbitmq_rpc_client: RabbitMQRPCClient, *, paths: ZipTaskStartInput
) -> TaskGet:
result = await rabbitmq_rpc_client.request(
STORAGE_RPC_NAMESPACE,
_RPC_METHOD_NAME_ADAPTER.validate_python("start_zipping"),
paths=paths,
timeout_s=_DEFAULT_TIMEOUT_S,
)
assert isinstance(result, TaskGet)
return result


async def abort_zipping(
rabbitmq_rpc_client: RabbitMQRPCClient, *, task_id: TaskId
) -> ZipTaskAbortOutput:
result = await rabbitmq_rpc_client.request(
STORAGE_RPC_NAMESPACE,
_RPC_METHOD_NAME_ADAPTER.validate_python("abort_zipping"),
task_id=task_id,
timeout_s=_DEFAULT_TIMEOUT_S,
)
assert isinstance(result, ZipTaskAbortOutput)
return result


async def get_zipping_status(
rabbitmq_rpc_client: RabbitMQRPCClient, *, task_id: TaskId
) -> TaskStatus:
result = await rabbitmq_rpc_client.request(
STORAGE_RPC_NAMESPACE,
_RPC_METHOD_NAME_ADAPTER.validate_python("get_zipping_status"),
task_id=task_id,
timeout_s=_DEFAULT_TIMEOUT_S,
)
assert isinstance(result, TaskStatus)
return result


async def get_zipping_result(
rabbitmq_rpc_client: RabbitMQRPCClient, *, task_id: TaskId
) -> TaskResult:
result = await rabbitmq_rpc_client.request(
STORAGE_RPC_NAMESPACE,
_RPC_METHOD_NAME_ADAPTER.validate_python("get_zipping_result"),
task_id=task_id,
timeout_s=_DEFAULT_TIMEOUT_S,
)
assert isinstance(result, TaskResult)
return result
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@
from typing import cast

from aiohttp import ClientError, ClientSession
from models_library.api_schemas_storage import (
from models_library.generics import Envelope
from models_library.projects_nodes_io import LocationID, LocationName
from models_library.storage_schemas import (
ETag,
FileUploadCompleteFutureResponse,
FileUploadCompleteResponse,
FileUploadCompleteState,
FileUploadCompletionBody,
UploadedPart,
)
from models_library.generics import Envelope
from models_library.projects_nodes_io import LocationID, LocationName
from models_library.users import UserID
from models_library.utils.fastapi_encoders import jsonable_encoder
from pydantic import AnyUrl, TypeAdapter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
ClientSession,
RequestInfo,
)
from models_library.api_schemas_storage import ETag, FileUploadSchema, UploadedPart
from models_library.basic_types import IDStr, SHA256Str
from models_library.storage_schemas import ETag, FileUploadSchema, UploadedPart
from multidict import MultiMapping
from pydantic import AnyUrl, NonNegativeInt
from servicelib.aiohttp import status
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@

import aiofiles
from aiohttp import ClientSession
from models_library.api_schemas_storage import (
from models_library.basic_types import IDStr, SHA256Str
from models_library.projects_nodes_io import LocationID, LocationName, StorageFileID
from models_library.storage_schemas import (
ETag,
FileMetaDataGet,
FileUploadSchema,
LinkType,
UploadedPart,
)
from models_library.basic_types import IDStr, SHA256Str
from models_library.projects_nodes_io import LocationID, LocationName, StorageFileID
from models_library.users import UserID
from pydantic import AnyUrl, ByteSize, TypeAdapter
from servicelib.file_utils import create_sha256_checksum
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,16 @@
from aiohttp import ClientResponse, ClientSession
from aiohttp import client as aiohttp_client_module
from aiohttp.client_exceptions import ClientConnectionError, ClientResponseError
from models_library.api_schemas_storage import (
from models_library.basic_types import SHA256Str
from models_library.generics import Envelope
from models_library.projects_nodes_io import LocationID, StorageFileID
from models_library.storage_schemas import (
FileLocationArray,
FileMetaDataGet,
FileUploadSchema,
LinkType,
PresignedLink,
)
from models_library.basic_types import SHA256Str
from models_library.generics import Envelope
from models_library.projects_nodes_io import LocationID, StorageFileID
from models_library.users import UserID
from pydantic import ByteSize
from pydantic.networks import AnyUrl
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import logging

from models_library.api_schemas_storage import LinkType as FileLinkType
from models_library.projects import ProjectIDStr
from models_library.projects_nodes_io import NodeIDStr
from models_library.storage_schemas import LinkType as FileLinkType
from models_library.users import UserID
from settings_library.aws_s3_cli import AwsS3CliSettings
from settings_library.r_clone import RCloneSettings
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@
from pathlib import Path
from typing import Any

from models_library.api_schemas_storage import LinkType
from models_library.basic_types import IDStr
from models_library.projects import ProjectIDStr
from models_library.projects_nodes_io import NodeIDStr
from models_library.services_types import ServicePortKey
from models_library.storage_schemas import LinkType
from models_library.users import UserID
from pydantic import BaseModel, ConfigDict, Field, ValidationError
from pydantic_core import InitErrorDetails
Expand Down
2 changes: 1 addition & 1 deletion packages/simcore-sdk/src/simcore_sdk/node_ports_v2/port.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
from pprint import pformat
from typing import Any

from models_library.api_schemas_storage import LinkType
from models_library.basic_types import IDStr
from models_library.services_io import BaseServiceIOModel
from models_library.services_types import ServicePortKey
from models_library.storage_schemas import LinkType
from pydantic import (
AnyUrl,
ConfigDict,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
from pathlib import Path
from typing import Any

from models_library.api_schemas_storage import FileUploadSchema, LinkType
from models_library.basic_types import IDStr, SHA256Str
from models_library.services_types import FileName, ServicePortKey
from models_library.storage_schemas import FileUploadSchema, LinkType
from models_library.users import UserID
from pydantic import AnyUrl, ByteSize, TypeAdapter
from servicelib.progress_bar import ProgressBarData
Expand Down
2 changes: 1 addition & 1 deletion packages/simcore-sdk/tests/integration/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@
import pytest
import sqlalchemy as sa
from aiohttp import ClientSession
from models_library.api_schemas_storage import FileUploadSchema
from models_library.generics import Envelope
from models_library.projects_nodes_io import LocationID, NodeIDStr, SimcoreS3FileID
from models_library.storage_schemas import FileUploadSchema
from models_library.users import UserID
from pydantic import TypeAdapter
from pytest_simcore.helpers.faker_factories import random_project, random_user
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@
from aiohttp import ClientResponse, ClientSession, TCPConnector
from aioresponses import aioresponses
from faker import Faker
from models_library.api_schemas_storage import (
from models_library.basic_types import IDStr
from models_library.storage_schemas import (
FileUploadLinks,
FileUploadSchema,
UploadedPart,
)
from models_library.basic_types import IDStr
from moto.server import ThreadedMotoServer
from pydantic import AnyUrl, ByteSize, TypeAdapter
from pytest_mock import MockerFixture
Expand Down
2 changes: 1 addition & 1 deletion packages/simcore-sdk/tests/unit/test_node_ports_v2_port.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
from aiohttp.client import ClientSession
from aioresponses import aioresponses as AioResponsesMock
from faker import Faker
from models_library.api_schemas_storage import FileMetaDataGet
from models_library.projects_nodes_io import LocationID
from models_library.storage_schemas import FileMetaDataGet
from pydantic import TypeAdapter, ValidationError
from pytest_mock.plugin import MockerFixture
from servicelib.progress_bar import ProgressBarData
Expand Down
4 changes: 2 additions & 2 deletions packages/simcore-sdk/tests/unit/test_storage_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@
import pytest
from aioresponses import aioresponses as AioResponsesMock
from faker import Faker
from models_library.api_schemas_storage import (
from models_library.projects_nodes_io import SimcoreS3FileID
from models_library.storage_schemas import (
FileLocationArray,
FileMetaDataGet,
FileUploadSchema,
LocationID,
)
from models_library.projects_nodes_io import SimcoreS3FileID
from models_library.users import UserID
from pydantic import AnyUrl, ByteSize, TypeAdapter
from pytest_simcore.helpers.monkeypatch_envs import EnvVarsDict, setenvs_from_dict
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
from fastapi import Header, Request, UploadFile, status
from fastapi.exceptions import HTTPException
from fastapi_pagination.api import create_page
from models_library.api_schemas_storage import ETag, FileUploadCompletionBody, LinkType
from models_library.basic_types import SHA256Str
from models_library.storage_schemas import ETag, FileUploadCompletionBody, LinkType
from pydantic import AnyUrl, ByteSize, PositiveInt, TypeAdapter, ValidationError
from servicelib.fastapi.requests_decorators import cancel_on_disconnect
from simcore_sdk.node_ports_common.constants import SIMCORE_LOCATION
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@

import aiofiles
from fastapi import UploadFile
from models_library.api_schemas_storage import ETag
from models_library.basic_types import SHA256Str
from models_library.projects_nodes_io import StorageFileID
from models_library.storage_schemas import ETag
from pydantic import (
AnyHttpUrl,
BaseModel,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@

from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
from models_library.api_schemas_storage import FileMetaDataArray
from models_library.api_schemas_storage import FileMetaDataGet as StorageFileMetaData
from models_library.api_schemas_storage import FileUploadSchema, PresignedLink
from models_library.basic_types import SHA256Str
from models_library.generics import Envelope
from models_library.storage_schemas import FileMetaDataArray
from models_library.storage_schemas import FileMetaDataGet as StorageFileMetaData
from models_library.storage_schemas import FileUploadSchema, PresignedLink
from pydantic import AnyUrl, PositiveInt
from settings_library.tracing import TracingSettings
from starlette.datastructures import URL
Expand Down
2 changes: 1 addition & 1 deletion services/api-server/tests/unit/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,12 @@
TaskProgress,
TaskStatus,
)
from models_library.api_schemas_storage import HealthCheck
from models_library.api_schemas_webserver.projects import ProjectGet
from models_library.app_diagnostics import AppStatusCheck
from models_library.generics import Envelope
from models_library.projects import ProjectID
from models_library.projects_nodes_io import BaseFileLink, SimcoreS3FileID
from models_library.storage_schemas import HealthCheck
from models_library.users import UserID
from moto.server import ThreadedMotoServer
from packaging.version import Version
Expand Down
Loading
Loading