Skip to content

Commit dc32c96

Browse files
author
Andrei Neagu
committed
Merge remote-tracking branch 'upstream/pydantic_v2_migration_do_not_squash_updates' into pr-osparc-add-dybamic-services-monitor-dashboard2
2 parents d973a81 + a0b8a2f commit dc32c96

File tree

22 files changed

+99
-140
lines changed

22 files changed

+99
-140
lines changed

packages/common-library/src/common_library/pydantic_networks_extension.py

Lines changed: 0 additions & 20 deletions
This file was deleted.

packages/common-library/tests/test_pydantic_networks_extension.py

Lines changed: 0 additions & 39 deletions
This file was deleted.

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

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

3-
from common_library.pydantic_networks_extension import AnyHttpUrlLegacy
43
from pydantic import (
4+
AnyHttpUrl,
55
BaseModel,
66
BeforeValidator,
77
ConfigDict,
@@ -100,9 +100,7 @@ class PageLinks(
100100
PageRefs[
101101
Annotated[
102102
str,
103-
BeforeValidator(
104-
lambda x: str(TypeAdapter(AnyHttpUrlLegacy).validate_python(x))
105-
),
103+
BeforeValidator(lambda x: str(TypeAdapter(AnyHttpUrl).validate_python(x))),
106104
]
107105
]
108106
):

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from math import ceil
22
from typing import Any, Protocol, runtime_checkable
33

4-
from common_library.pydantic_networks_extension import AnyHttpUrlLegacy
4+
from pydantic import AnyHttpUrl, TypeAdapter
55
from pydantic import TypeAdapter
66
from typing_extensions import ( # https://docs.pydantic.dev/latest/api/standard_library_types/#typeddict
77
TypedDict,
@@ -44,7 +44,7 @@ def _replace_query(url: _URLType, query: dict[str, Any]) -> str:
4444
new_url = url.replace_query_params(**query)
4545

4646
new_url_str = f"{new_url}"
47-
return f"{TypeAdapter(AnyHttpUrlLegacy).validate_python(new_url_str)}"
47+
return f"{TypeAdapter(AnyHttpUrl).validate_python(new_url_str)}"
4848

4949

5050
class PageDict(TypedDict):

packages/settings-library/src/settings_library/ssm.py

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

3-
from common_library.pydantic_networks_extension import AnyHttpUrlLegacy
4-
from pydantic import BeforeValidator, Field, SecretStr, TypeAdapter
3+
from pydantic import AnyHttpUrl, BeforeValidator, Field, SecretStr, TypeAdapter
54
from pydantic_settings import SettingsConfigDict
65

76
from .base import BaseCustomSettings
@@ -12,9 +11,7 @@ class SSMSettings(BaseCustomSettings):
1211
SSM_ENDPOINT: (
1312
Annotated[
1413
str,
15-
BeforeValidator(
16-
lambda x: str(TypeAdapter(AnyHttpUrlLegacy).validate_python(x))
17-
),
14+
BeforeValidator(lambda x: str(TypeAdapter(AnyHttpUrl).validate_python(x))),
1815
]
1916
| None
2017
) = Field(default=None, description="do not define if using standard AWS")

services/agent/src/simcore_service_agent/core/settings.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
from datetime import timedelta
22

3-
from common_library.pydantic_networks_extension import AnyHttpUrlLegacy
43
from models_library.basic_types import BootModeEnum, LogLevel
5-
from pydantic import AliasChoices, Field, field_validator
4+
from pydantic import AliasChoices, AnyHttpUrl, Field, field_validator
65
from servicelib.logging_utils_filtering import LoggerName, MessageSubstring
76
from settings_library.base import BaseCustomSettings
87
from settings_library.r_clone import S3Provider
@@ -43,7 +42,7 @@ class ApplicationSettings(BaseCustomSettings, MixinLoggingSettings):
4342
AGENT_VOLUMES_CLEANUP_TARGET_SWARM_STACK_NAME: str = Field(
4443
..., description="Exactly the same as director-v2's `SWARM_STACK_NAME` env var"
4544
)
46-
AGENT_VOLUMES_CLEANUP_S3_ENDPOINT: AnyHttpUrlLegacy
45+
AGENT_VOLUMES_CLEANUP_S3_ENDPOINT: AnyHttpUrl
4746
AGENT_VOLUMES_CLEANUP_S3_ACCESS_KEY: str
4847
AGENT_VOLUMES_CLEANUP_S3_SECRET_KEY: str
4948
AGENT_VOLUMES_CLEANUP_S3_BUCKET: str

services/agent/tests/conftest.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44

55
import pytest
6-
from common_library.pydantic_networks_extension import HttpUrlLegacy
76
from faker import Faker
87
from models_library.basic_types import BootModeEnum
98
from moto.server import ThreadedMotoServer
@@ -65,8 +64,8 @@ def mock_environment(
6564

6665

6766
@pytest.fixture(scope="module")
68-
def mocked_s3_server_url(mocked_aws_server: ThreadedMotoServer) -> HttpUrlLegacy:
67+
def mocked_s3_server_url(mocked_aws_server: ThreadedMotoServer) -> HttpUrl:
6968
# pylint: disable=protected-access
70-
return TypeAdapter(HttpUrlLegacy).validate_python(
69+
return TypeAdapter(HttpUrl).validate_python(
7170
f"http://{mocked_aws_server._ip_address}:{mocked_aws_server._port}", # noqa: SLF001
7271
)

services/dynamic-sidecar/src/simcore_service_dynamic_sidecar/core/docker_utils.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,13 @@ async def get_volume_by_label(label: str, run_id: RunID) -> dict[str, Any]:
5050
volumes = data["Volumes"]
5151
_logger.debug("volumes query for label=%s volumes=%s", label, volumes)
5252
if len(volumes) != 1:
53-
raise VolumeNotFoundError(label, run_id, volumes)
53+
raise VolumeNotFoundError(
54+
volume_count=len(volumes),
55+
source_label=label,
56+
run_id=run_id,
57+
volume_names=" ".join(v.get("Name", "UNKNOWN") for v in volumes),
58+
status_code=http_status.HTTP_404_NOT_FOUND,
59+
)
5460
volume_details: dict[str, Any] = volumes[0]
5561
return volume_details
5662

services/dynamic-sidecar/src/simcore_service_dynamic_sidecar/core/error_handlers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ async def http_error_handler(
1212
) -> JSONResponse:
1313
return JSONResponse(
1414
content=jsonable_encoder({"errors": [exception.message]}),
15-
status_code=exception.status_code,
15+
status_code=exception.status_code, # type:ignore[attr-defined]
1616
)
1717

1818

services/dynamic-sidecar/src/simcore_service_dynamic_sidecar/core/errors.py

Lines changed: 9 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,30 @@
1-
from typing import Any
2-
31
from common_library.errors_classes import OsparcErrorMixin
4-
from fastapi import status
5-
from models_library.services import RunID
62

73

8-
class BaseDynamicSidecarError(Exception):
4+
class BaseDynamicSidecarError(OsparcErrorMixin, Exception):
95
"""Used as base for all exceptions"""
106

11-
def __init__(
12-
self, nessage: str, status_code: int = status.HTTP_500_INTERNAL_SERVER_ERROR
13-
) -> None:
14-
self.message: str = nessage
15-
self.status_code: int = status_code
16-
super().__init__(nessage)
17-
187

198
class VolumeNotFoundError(BaseDynamicSidecarError):
20-
def __init__(
21-
self, source_label: str, run_id: RunID, volumes: list[dict[str, Any]]
22-
) -> None:
23-
super().__init__(
24-
f"Expected 1 got {len(volumes)} volumes labels with {source_label=}, {run_id=}: "
25-
f"Found {' '.join(v.get('Name', 'UNKNOWN') for v in volumes)}",
26-
status_code=status.HTTP_404_NOT_FOUND,
27-
)
9+
msg_template = (
10+
"Expected 1 got {volume_count} volumes labels with "
11+
"source_label={source_label}, run_id={run_id}: Found {volume_names}"
12+
)
2813

2914

3015
class UnexpectedDockerError(BaseDynamicSidecarError):
31-
def __init__(self, message: str, status_code: int) -> None:
32-
super().__init__(
33-
f"An unexpected Docker error occurred {status_code=}, {message=}",
34-
status_code=status_code,
35-
)
36-
37-
38-
class BaseError(OsparcErrorMixin, BaseDynamicSidecarError):
39-
...
16+
msg_template = "An unexpected Docker error occurred status_code={status_code}, message={message}"
4017

4118

42-
class ContainerExecContainerNotFoundError(BaseError):
19+
class ContainerExecContainerNotFoundError(BaseDynamicSidecarError):
4320
msg_template = "Container '{container_name}' was not found"
4421

4522

46-
class ContainerExecTimeoutError(BaseError):
23+
class ContainerExecTimeoutError(BaseDynamicSidecarError):
4724
msg_template = "Timed out after {timeout} while executing: '{command}'"
4825

4926

50-
class ContainerExecCommandFailedError(BaseError):
27+
class ContainerExecCommandFailedError(BaseDynamicSidecarError):
5128
msg_template = (
5229
"Command '{command}' exited with code '{exit_code}'"
5330
"and output: '{command_result}'"

0 commit comments

Comments
 (0)