Skip to content

Commit f07afbf

Browse files
GitHKAndrei Neagu
andauthored
🐛 Fixed packages mypy, pylint and tests (#6678)
Co-authored-by: Andrei Neagu <[email protected]>
1 parent 60fe257 commit f07afbf

File tree

38 files changed

+219
-174
lines changed

38 files changed

+219
-174
lines changed

packages/common-library/tests/test_pydantic_validators.py

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

44
import pytest
55
from common_library.pydantic_validators import (
6-
validate_legacy_timedelta_str,
6+
_validate_legacy_timedelta_str,
77
validate_numeric_string_as_timedelta,
88
)
99
from faker import Faker
@@ -16,7 +16,7 @@ def test_validate_legacy_timedelta(monkeypatch: pytest.MonkeyPatch, faker: Faker
1616
class Settings(BaseSettings):
1717
APP_NAME: str
1818
REQUEST_TIMEOUT: Annotated[
19-
timedelta, BeforeValidator(validate_legacy_timedelta_str)
19+
timedelta, BeforeValidator(_validate_legacy_timedelta_str)
2020
] = Field(default=timedelta(hours=1))
2121

2222
model_config = SettingsConfigDict()

packages/models-library/src/models_library/api_schemas_directorv2/clusters.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ class ClusterDetailsGet(ClusterDetails):
113113

114114

115115
class ClusterCreate(BaseCluster):
116-
owner: GroupID | None
116+
owner: GroupID | None = None # type: ignore[assignment]
117117
authentication: ExternalClusterAuthentication
118118
access_rights: dict[GroupID, ClusterAccessRights] = Field(
119119
alias="accessRights", default_factory=dict

packages/models-library/src/models_library/api_schemas_directorv2/comp_tasks.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from typing import Any, TypeAlias
22

33
from models_library.basic_types import IDStr
4-
from pydantic import AnyHttpUrl, AnyUrl, BaseModel, Field, field_validator
4+
from pydantic import AnyHttpUrl, AnyUrl, BaseModel, ConfigDict, Field, field_validator
55

66
from ..clusters import ClusterID
77
from ..projects import ProjectID
@@ -19,6 +19,17 @@ class ComputationGet(ComputationTask):
1919
None, description="the link where to stop the task"
2020
)
2121

22+
model_config = ConfigDict(
23+
json_schema_extra={
24+
"examples": [
25+
x | {"url": "http://url.local"} # type:ignore[operator]
26+
for x in ComputationTask.model_config[ # type:ignore[index,union-attr]
27+
"json_schema_extra"
28+
]["examples"]
29+
]
30+
}
31+
)
32+
2233

2334
class ComputationCreate(BaseModel):
2435
user_id: UserID

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

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88
Field,
99
NonNegativeFloat,
1010
NonNegativeInt,
11-
root_validator,
12-
validator,
11+
model_validator,
1312
)
1413

1514
from ..projects_nodes_io import NodeID
@@ -56,29 +55,13 @@ class DiskUsage(BaseModel):
5655
free: ByteSize = Field(description="remaining space")
5756

5857
total: ByteSize = Field(description="total space = free + used")
59-
used_percent: NonNegativeFloat = Field(
58+
used_percent: float = Field(
6059
ge=0.00,
6160
le=100.00,
6261
description="Percent of used space relative to the total space",
6362
)
6463

65-
@validator("free")
66-
@classmethod
67-
def _free_positive(cls, v: float) -> float:
68-
if v < 0:
69-
msg = f"free={v} cannot be a negative value"
70-
raise ValueError(msg)
71-
return v
72-
73-
@validator("used")
74-
@classmethod
75-
def _used_positive(cls, v: float) -> float:
76-
if v < 0:
77-
msg = f"used={v} cannot be a negative value"
78-
raise ValueError(msg)
79-
return v
80-
81-
@root_validator(pre=True)
64+
@model_validator(mode="before")
8265
@classmethod
8366
def _check_total(cls, values: dict[str, Any]) -> dict[str, Any]:
8467
total = values["total"]

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -311,12 +311,12 @@ class FileUploadCompleteFutureResponse(BaseModel):
311311

312312

313313
class FoldersBody(BaseModel):
314-
source: dict[str, Any] = Field(default_factory=dict)
315-
destination: dict[str, Any] = Field(default_factory=dict)
316-
nodes_map: dict[NodeID, NodeID] = Field(default_factory=dict)
314+
source: Annotated[dict[str, Any], Field(default_factory=dict)]
315+
destination: Annotated[dict[str, Any], Field(default_factory=dict)]
316+
nodes_map: Annotated[dict[NodeID, NodeID], Field(default_factory=dict)]
317317

318318
@model_validator(mode="after")
319-
def ensure_consistent_entries(self) -> Self:
319+
def ensure_consistent_entries(self: Self) -> Self:
320320
source_node_keys = (NodeID(n) for n in self.source.get("workbench", {}))
321321
if set(source_node_keys) != set(self.nodes_map.keys()):
322322
msg = "source project nodes do not fit with nodes_map entries"

packages/models-library/src/models_library/api_schemas_webserver/projects.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,9 @@ class ProjectReplace(InputSchema):
107107
uuid: ProjectID
108108
name: ShortTruncatedStr
109109
description: LongTruncatedStr
110-
thumbnail: Annotated[HttpUrl | None, BeforeValidator(empty_str_to_none_pre_validator)] = Field(default=None)
110+
thumbnail: Annotated[
111+
HttpUrl | None, BeforeValidator(empty_str_to_none_pre_validator)
112+
] = Field(default=None)
111113
creation_date: DateTimeStr
112114
last_change_date: DateTimeStr
113115
workbench: NodesDict
@@ -127,13 +129,15 @@ class ProjectReplace(InputSchema):
127129
class ProjectPatch(InputSchema):
128130
name: ShortTruncatedStr | None = Field(default=None)
129131
description: LongTruncatedStr | None = Field(default=None)
130-
thumbnail: Annotated[HttpUrl | None, BeforeValidator(empty_str_to_none_pre_validator)] = Field(default=None)
132+
thumbnail: Annotated[
133+
HttpUrl | None, BeforeValidator(empty_str_to_none_pre_validator)
134+
] = Field(default=None)
131135
access_rights: dict[GroupIDStr, AccessRights] | None = Field(default=None)
132136
classifiers: list[ClassifierID] | None = Field(default=None)
133137
dev: dict | None = Field(default=None)
134138
ui: StudyUI | None = Field(default=None)
135139
quality: dict[str, Any] | None = Field(default=None)
136-
140+
137141

138142
__all__: tuple[str, ...] = (
139143
"EmptyModel",

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ class ProgressStructuredMessage(BaseModel):
1212
description: IDStr
1313
current: float
1414
total: int
15-
unit: str | None
16-
sub: "ProgressStructuredMessage | None"
15+
unit: str | None = None
16+
sub: "ProgressStructuredMessage | None" = None
1717

1818
model_config = ConfigDict(
1919
json_schema_extra={

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

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -136,34 +136,4 @@ def _check_data_compatible_with_meta(cls, v, info: ValidationInfo):
136136
raise ValueError(msg)
137137
return v
138138

139-
model_config = ConfigDict(
140-
extra="forbid",
141-
json_schema_extra={
142-
"examples": [
143-
# first page Page[str]
144-
{
145-
"_meta": {"total": 7, "count": 4, "limit": 4, "offset": 0},
146-
"_links": {
147-
"self": "https://osparc.io/v2/listing?offset=0&limit=4",
148-
"first": "https://osparc.io/v2/listing?offset=0&limit=4",
149-
"prev": None,
150-
"next": "https://osparc.io/v2/listing?offset=1&limit=4",
151-
"last": "https://osparc.io/v2/listing?offset=1&limit=4",
152-
},
153-
"data": ["data 1", "data 2", "data 3", "data 4"],
154-
},
155-
# second and last page
156-
{
157-
"_meta": {"total": 7, "count": 3, "limit": 4, "offset": 1},
158-
"_links": {
159-
"self": "https://osparc.io/v2/listing?offset=1&limit=4",
160-
"first": "https://osparc.io/v2/listing?offset=0&limit=4",
161-
"prev": "https://osparc.io/v2/listing?offset=0&limit=4",
162-
"next": None,
163-
"last": "https://osparc.io/v2/listing?offset=1&limit=4",
164-
},
165-
"data": ["data 5", "data 6", "data 7"],
166-
},
167-
]
168-
},
169-
)
139+
model_config = ConfigDict(extra="forbid")

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

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -74,34 +74,4 @@ def create(
7474
data=chunk,
7575
)
7676

77-
model_config = ConfigDict(
78-
extra="forbid",
79-
json_schema_extra={
80-
"examples": [
81-
# first page Page[str]
82-
{
83-
"_meta": {"total": 7, "count": 4, "limit": 4, "offset": 0},
84-
"_links": {
85-
"self": {"offset": 0, "limit": 4},
86-
"first": {"offset": 0, "limit": 4},
87-
"prev": None,
88-
"next": {"offset": 1, "limit": 4},
89-
"last": {"offset": 1, "limit": 4},
90-
},
91-
"data": ["data 1", "data 2", "data 3", "data 4"],
92-
},
93-
# second and last page
94-
{
95-
"_meta": {"total": 7, "count": 3, "limit": 4, "offset": 1},
96-
"_links": {
97-
"self": {"offset": 1, "limit": 4},
98-
"first": {"offset": 0, "limit": 4},
99-
"prev": {"offset": 0, "limit": 4},
100-
"next": None,
101-
"last": {"offset": 1, "limit": 4},
102-
},
103-
"data": ["data 5", "data 6", "data 7"],
104-
},
105-
]
106-
},
107-
)
77+
model_config = ConfigDict(extra="forbid")

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

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from enum import Enum
44
from functools import cached_property
55
from pathlib import Path
6-
from typing import Any, Literal, TypeAlias
6+
from typing import Annotated, Any, Literal, TypeAlias
77

88
from common_library.json_serialization import json_dumps
99
from pydantic import (
@@ -317,13 +317,14 @@ class DynamicSidecarServiceLabels(BaseModel):
317317
),
318318
)
319319

320-
containers_allowed_outgoing_permit_list: None | (
321-
Json[dict[str, list[NATRule]]]
322-
) = Field(
323-
None,
324-
alias="simcore.service.containers-allowed-outgoing-permit-list",
325-
description="allow internet access to certain domain names and ports per container",
326-
)
320+
containers_allowed_outgoing_permit_list: Annotated[
321+
None | (Json[dict[str, list[NATRule]]]),
322+
Field(
323+
None,
324+
alias="simcore.service.containers-allowed-outgoing-permit-list",
325+
description="allow internet access to certain domain names and ports per container",
326+
),
327+
]
327328

328329
containers_allowed_outgoing_internet: Json[set[str]] | None = Field(
329330
None,

0 commit comments

Comments
 (0)