Skip to content

Commit f60b2cf

Browse files
author
Andrei Neagu
committed
refactor with common Adapter pattern
1 parent b81f41a commit f60b2cf

File tree

9 files changed

+32
-26
lines changed

9 files changed

+32
-26
lines changed

packages/models-library/src/models_library/api_schemas_dynamic_sidecar/containers.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
from typing import TypeAlias
1+
from typing import Final, TypeAlias
22

3-
from pydantic import BaseModel, ConfigDict, NonNegativeFloat
3+
from pydantic import BaseModel, ConfigDict, NonNegativeFloat, TypeAdapter
44

55

66
class ActivityInfo(BaseModel):
@@ -15,4 +15,7 @@ class ActivityInfo(BaseModel):
1515
)
1616

1717

18+
ActivityInfoAdapter: Final[TypeAdapter[ActivityInfo]] = TypeAdapter(ActivityInfo)
19+
20+
1821
ActivityInfoOrNone: TypeAlias = ActivityInfo | None

packages/models-library/src/models_library/projects_nodes_io.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"""
88

99
from pathlib import Path
10-
from typing import Annotated, TypeAlias
10+
from typing import Annotated, Final, TypeAlias
1111
from uuid import UUID
1212

1313
from common_library.pydantic_basic_types import ConstrainedStr
@@ -44,7 +44,9 @@
4444
SimcoreS3FileID: TypeAlias = Annotated[
4545
str, StringConstraints(pattern=SIMCORE_S3_FILE_ID_RE)
4646
]
47-
SimcoreS3FileIDTypeAdapter = TypeAdapter(SimcoreS3FileID)
47+
SimcoreS3FileIDTypeAdapter: Final[TypeAdapter[SimcoreS3FileID]] = TypeAdapter(
48+
SimcoreS3FileID
49+
)
4850

4951

5052
class SimcoreS3DirectoryID(ConstrainedStr):

packages/models-library/src/models_library/services_creation.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
from typing import Any
1+
from typing import Any, Final
22

33
from pydantic import BaseModel, ConfigDict, TypeAdapter
44

55
from .services_resources import ServiceResourcesDict
66
from .services_types import (
77
ServiceKey,
8-
ServiceKeyTypeAdapter,
8+
ServiceKeyAdapter,
99
ServiceVersion,
10-
ServiceVersionTypeAdapter,
10+
ServiceVersionAdapter,
1111
)
1212
from .wallets import WalletID
1313

@@ -41,10 +41,10 @@ class CreateServiceMetricsAdditionalParams(BaseModel):
4141
"user_email": "[email protected]",
4242
"project_name": "_!New Study",
4343
"node_name": "the service of a lifetime _ *!",
44-
"service_key": ServiceKeyTypeAdapter.validate_python(
44+
"service_key": ServiceKeyAdapter.validate_python(
4545
"simcore/services/dynamic/test"
4646
),
47-
"service_version": ServiceVersionTypeAdapter.validate_python("0.0.1"),
47+
"service_version": ServiceVersionAdapter.validate_python("0.0.1"),
4848
"service_resources": {},
4949
"service_additional_metadata": {},
5050
"pricing_unit_cost_id": None,
@@ -53,6 +53,6 @@ class CreateServiceMetricsAdditionalParams(BaseModel):
5353
)
5454

5555

56-
CreateServiceMetricsAdditionalParamsTypeAdapter = TypeAdapter(
57-
CreateServiceMetricsAdditionalParams
58-
)
56+
CreateServiceMetricsAdditionalParamsAdapter: Final[
57+
TypeAdapter[CreateServiceMetricsAdditionalParams]
58+
] = TypeAdapter(CreateServiceMetricsAdditionalParams)

packages/models-library/src/models_library/services_io.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Annotated, Any, TypeAlias
1+
from typing import Annotated, Any, Final, TypeAlias
22

33
from pydantic import (
44
BaseModel,
@@ -260,4 +260,4 @@ def from_json_schema(cls, port_schema: dict[str, Any]) -> "ServiceOutput":
260260
return cls.model_validate(data)
261261

262262

263-
ServiceOutputTypeAdapter = TypeAdapter(ServiceOutput)
263+
ServiceOutputAdapter: Final[TypeAdapter[ServiceOutput]] = TypeAdapter(ServiceOutput)

packages/models-library/src/models_library/services_types.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Annotated, TypeAlias
1+
from typing import Annotated, Final, TypeAlias
22
from uuid import uuid4
33

44
import arrow
@@ -18,7 +18,7 @@
1818
FileName: TypeAlias = Annotated[str, StringConstraints(pattern=FILENAME_RE)]
1919

2020
ServiceKey: TypeAlias = Annotated[str, StringConstraints(pattern=SERVICE_KEY_RE)]
21-
ServiceKeyTypeAdapter = TypeAdapter(ServiceKey)
21+
ServiceKeyAdapter: Final[TypeAdapter[ServiceKey]] = TypeAdapter(ServiceKey)
2222

2323
ServiceKeyEncoded: TypeAlias = Annotated[
2424
str, StringConstraints(pattern=SERVICE_ENCODED_KEY_RE)
@@ -33,7 +33,7 @@
3333
]
3434

3535
ServiceVersion: TypeAlias = Annotated[str, StringConstraints(pattern=SIMPLE_VERSION_RE)]
36-
ServiceVersionTypeAdapter = TypeAdapter(ServiceVersion)
36+
ServiceVersionAdapter: Final[TypeAdapter[ServiceVersion]] = TypeAdapter(ServiceVersion)
3737

3838

3939
class RunID(str):

services/director-v2/tests/unit/test_modules_dynamic_sidecar_client_api_thin.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from httpx import Response
1212
from models_library.services_creation import (
1313
CreateServiceMetricsAdditionalParams,
14-
CreateServiceMetricsAdditionalParamsTypeAdapter,
14+
CreateServiceMetricsAdditionalParamsAdapter,
1515
)
1616
from models_library.sidecar_volumes import VolumeCategory, VolumeStatus
1717
from pydantic import AnyHttpUrl, parse_obj_as
@@ -285,7 +285,7 @@ async def test_put_volumes(
285285
"post_containers_tasks",
286286
"/containers",
287287
{
288-
"metrics_params": CreateServiceMetricsAdditionalParamsTypeAdapter.validate_python(
288+
"metrics_params": CreateServiceMetricsAdditionalParamsAdapter.validate_python(
289289
CreateServiceMetricsAdditionalParams.model_config[
290290
"json_schema_extra"
291291
]["example"],

services/dynamic-sidecar/src/simcore_service_dynamic_sidecar/api/containers.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@
1010
from fastapi import Query, Request, status
1111
from models_library.api_schemas_dynamic_sidecar.containers import (
1212
ActivityInfo,
13+
ActivityInfoAdapter,
1314
ActivityInfoOrNone,
1415
)
15-
from pydantic import TypeAdapter, ValidationError
16+
from pydantic import ValidationError
1617
from servicelib.fastapi.requests_decorators import cancel_on_disconnect
1718

1819
from ..core.docker_utils import docker_client
@@ -174,7 +175,7 @@ async def get_containers_activity(
174175
return ActivityInfo(seconds_inactive=_INACTIVE_FOR_LONG_TIME)
175176

176177
try:
177-
return TypeAdapter(ActivityInfo).validate_json(inactivity_response)
178+
return ActivityInfoAdapter.validate_json(inactivity_response)
178179
except ValidationError:
179180
_logger.warning(
180181
"Could not parse command result '%s' as '%s'",

services/dynamic-sidecar/tests/conftest.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
from models_library.services import RunID
2121
from models_library.services_creation import (
2222
CreateServiceMetricsAdditionalParams,
23-
CreateServiceMetricsAdditionalParamsTypeAdapter,
23+
CreateServiceMetricsAdditionalParamsAdapter,
2424
)
2525
from models_library.users import UserID
2626
from models_library.utils.json_serialization import json_dumps
@@ -333,7 +333,7 @@ def mock_stop_heart_beat_task(mocker: MockerFixture) -> AsyncMock:
333333

334334
@pytest.fixture
335335
def mock_metrics_params(faker: Faker) -> CreateServiceMetricsAdditionalParams:
336-
return CreateServiceMetricsAdditionalParamsTypeAdapter.validate_python(
336+
return CreateServiceMetricsAdditionalParamsAdapter.validate_python(
337337
CreateServiceMetricsAdditionalParams.model_config["json_schema_extra"][
338338
"example"
339339
],

services/dynamic-sidecar/tests/unit/test_api_containers.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
from fastapi import FastAPI, status
2525
from models_library.api_schemas_dynamic_sidecar.containers import ActivityInfo
2626
from models_library.services_creation import CreateServiceMetricsAdditionalParams
27-
from models_library.services_io import ServiceOutput, ServiceOutputTypeAdapter
27+
from models_library.services_io import ServiceOutput, ServiceOutputAdapter
2828
from pytest_mock.plugin import MockerFixture
2929
from pytest_simcore.helpers.monkeypatch_envs import EnvVarsDict, setenvs_from_dict
3030
from servicelib.docker_constants import SUFFIX_EGRESS_PROXY_NAME
@@ -266,10 +266,10 @@ def not_started_containers() -> list[str]:
266266
@pytest.fixture
267267
def mock_outputs_labels() -> dict[str, ServiceOutput]:
268268
return {
269-
"output_port_1": ServiceOutputTypeAdapter.validate_python(
269+
"output_port_1": ServiceOutputAdapter.validate_python(
270270
ServiceOutput.model_config["json_schema_extra"]["examples"][3]
271271
),
272-
"output_port_2": ServiceOutputTypeAdapter.validate_python(
272+
"output_port_2": ServiceOutputAdapter.validate_python(
273273
ServiceOutput.model_config["json_schema_extra"]["examples"][3]
274274
),
275275
}

0 commit comments

Comments
 (0)