Skip to content

Commit 9c725bc

Browse files
committed
Merge branch 'master' into bugfix-use-celery-task-manager-in-function-job-service
2 parents 981a5d6 + 96d5805 commit 9c725bc

File tree

114 files changed

+1981
-1066
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

114 files changed

+1981
-1066
lines changed

packages/aws-library/requirements/_base.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,10 @@ jmespath==1.0.1
118118
# aiobotocore
119119
# boto3
120120
# botocore
121+
jsonref==1.1.0
122+
# via
123+
# -r requirements/../../../packages/models-library/requirements/_base.in
124+
# -r requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/_base.in
121125
jsonschema==4.23.0
122126
# via
123127
# -r requirements/../../../packages/models-library/requirements/_base.in

packages/celery-library/requirements/_base.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,10 @@ idna==3.10
109109
# yarl
110110
importlib-metadata==8.6.1
111111
# via opentelemetry-api
112+
jsonref==1.1.0
113+
# via
114+
# -r requirements/../../../packages/models-library/requirements/_base.in
115+
# -r requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/_base.in
112116
jsonschema==4.23.0
113117
# via
114118
# -r requirements/../../../packages/models-library/requirements/_base.in

packages/dask-task-models-library/requirements/_base.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ jinja2==3.1.6
4040
# -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt
4141
# -c requirements/../../../requirements/constraints.txt
4242
# distributed
43+
jsonref==1.1.0
44+
# via -r requirements/../../../packages/models-library/requirements/_base.in
4345
jsonschema==4.23.0
4446
# via -r requirements/../../../packages/models-library/requirements/_base.in
4547
jsonschema-specifications==2025.4.1

packages/dask-task-models-library/src/dask_task_models_library/plugins/task_life_cycle_worker_plugin.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ def transition(
3434
):
3535
_logger.info("Task '%s' transition from %s to %s", key, start, finish)
3636
assert self._worker # nosec
37+
assert isinstance(self._worker, Worker) # nosec
3738
self._worker.log_event(
3839
TASK_LIFE_CYCLE_EVENT.format(key=key),
3940
TaskLifeCycleState.from_worker_task_state(

packages/models-library/requirements/_base.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
--requirement ../../../packages/common-library/requirements/_base.in
66

77
arrow
8+
jsonref
89
jsonschema
910
orjson
1011
pydantic-extra-types

packages/models-library/requirements/_base.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ email-validator==2.2.0
1212
# via pydantic
1313
idna==3.10
1414
# via email-validator
15+
jsonref==1.1.0
16+
# via -r requirements/_base.in
1517
jsonschema==4.23.0
1618
# via -r requirements/_base.in
1719
jsonschema-specifications==2024.10.1

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

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import re
22
from datetime import date, datetime
33
from enum import Enum
4-
from typing import Annotated, Any, Literal, Self
4+
from typing import Annotated, Any, Literal, Self, TypeAlias
55

66
import annotated_types
77
from common_library.basic_types import DEFAULT_FACTORY
@@ -18,6 +18,7 @@
1818
StringConstraints,
1919
ValidationInfo,
2020
field_validator,
21+
model_validator,
2122
)
2223
from pydantic.config import JsonDict
2324

@@ -83,7 +84,14 @@ class MyProfileRestGet(OutputSchemaWithoutCamelCase):
8384
login: LowerCaseEmailStr
8485
phone: str | None = None
8586

86-
role: Literal["ANONYMOUS", "GUEST", "USER", "TESTER", "PRODUCT_OWNER", "ADMIN"]
87+
role: Literal[
88+
"ANONYMOUS",
89+
"GUEST",
90+
"USER",
91+
"TESTER",
92+
"PRODUCT_OWNER",
93+
"ADMIN",
94+
]
8795
groups: MyGroupsGet | None = None
8896
gravatar_id: Annotated[str | None, Field(deprecated=True)] = None
8997

@@ -306,15 +314,41 @@ class UserAccountReject(InputSchema):
306314
email: EmailStr
307315

308316

317+
GlobString: TypeAlias = Annotated[
318+
str,
319+
StringConstraints(
320+
min_length=3, max_length=200, strip_whitespace=True, pattern=r"^[^%]*$"
321+
),
322+
]
323+
324+
309325
class UserAccountSearchQueryParams(RequestParameters):
310326
email: Annotated[
311-
str,
327+
GlobString | None,
312328
Field(
313-
min_length=3,
314-
max_length=200,
315329
description="complete or glob pattern for an email",
316330
),
317-
]
331+
] = None
332+
primary_group_id: Annotated[
333+
GroupID | None,
334+
Field(
335+
description="Filter by primary group ID",
336+
),
337+
] = None
338+
user_name: Annotated[
339+
GlobString | None,
340+
Field(
341+
description="complete or glob pattern for a username",
342+
),
343+
] = None
344+
345+
@model_validator(mode="after")
346+
def _validate_at_least_one_filter(self) -> Self:
347+
field_names = list(self.__class__.model_fields)
348+
if not any(getattr(self, field_name, None) for field_name in field_names):
349+
msg = f"At least one filter {field_names} must be provided"
350+
raise ValueError(msg)
351+
return self
318352

319353

320354
class UserAccountGet(OutputSchema):
@@ -340,9 +374,9 @@ class UserAccountGet(OutputSchema):
340374
# pre-registration NOTE: that some users have no pre-registartion and therefore all options here can be none
341375
pre_registration_id: int | None
342376
pre_registration_created: datetime | None
343-
invited_by: str | None = None
377+
invited_by: UserNameID | None = None
344378
account_request_status: AccountRequestStatus | None
345-
account_request_reviewed_by: UserID | None = None
379+
account_request_reviewed_by: UserNameID | None = None
346380
account_request_reviewed_at: datetime | None = None
347381

348382
# user status

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

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

3+
from models_library.utils.json_schema import GenerateResolvedJsonSchema
34
from pydantic import BaseModel, ConfigDict
45
from pydantic.config import JsonDict
56

@@ -99,17 +100,9 @@ def composed_message(self) -> str:
99100
{
100101
"actual_value": 0.3,
101102
"total": 1.0,
102-
"message": {
103-
"description": "downloading",
104-
"current": 2.0,
105-
"total": 5,
106-
"sub": {
107-
"description": "port 2",
108-
"current": 12.2,
109-
"total": 123,
110-
"unit": "Byte",
111-
},
112-
},
103+
"message": ProgressStructuredMessage.model_json_schema(
104+
schema_generator=GenerateResolvedJsonSchema
105+
)["examples"][2],
113106
},
114107
]
115108
},

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
from typing import Annotated, TypeAlias
33

44
from common_library.users_enums import UserRole
5-
from models_library.basic_types import IDStr
65
from pydantic import BaseModel, ConfigDict, Field, PositiveInt, StringConstraints
76
from pydantic.config import JsonDict
87
from typing_extensions import ( # https://docs.pydantic.dev/latest/api/standard_library_types/#typeddict
@@ -12,8 +11,9 @@
1211
from .emails import LowerCaseEmailStr
1312

1413
UserID: TypeAlias = PositiveInt
15-
UserNameID: TypeAlias = IDStr
16-
14+
UserNameID: TypeAlias = Annotated[
15+
str, StringConstraints(strip_whitespace=True, min_length=1, max_length=100)
16+
]
1717

1818
FirstNameStr: TypeAlias = Annotated[
1919
str, StringConstraints(strip_whitespace=True, max_length=255)

packages/models-library/src/models_library/utils/json_schema.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
66
See how is used to validate input/output content-schemas of service models
77
"""
8+
89
# SEE possible enhancements in https://github.com/ITISFoundation/osparc-simcore/issues/3008
910

1011

@@ -13,8 +14,11 @@
1314
from copy import deepcopy
1415
from typing import Any
1516

17+
import jsonref # type: ignore[import-untyped]
1618
import jsonschema
1719
from jsonschema import validators
20+
from pydantic.json_schema import GenerateJsonSchema, JsonSchemaMode, JsonSchemaValue
21+
from pydantic_core import CoreSchema
1822

1923
# ERRORS
2024

@@ -92,6 +96,19 @@ def any_ref_key(obj):
9296
return False
9397

9498

99+
class GenerateResolvedJsonSchema(GenerateJsonSchema):
100+
"""Generates a json-schema with all $ref resolved
101+
Usage: pydantic_base_model.model_json_schema(schema_generator=GenerateResolvedJsonSchema) returns a json schema where it is guaranteed that all json references are resolved.
102+
"""
103+
104+
def generate(
105+
self, schema: CoreSchema, mode: JsonSchemaMode = "validation"
106+
) -> JsonSchemaValue:
107+
schema_value = super().generate(schema=schema, mode=mode)
108+
schema_value = jsonref.replace_refs(schema_value, jsonschema=True)
109+
return JsonSchemaValue(schema_value)
110+
111+
95112
__all__: tuple[str, ...] = (
96113
"any_ref_key",
97114
"InvalidJsonSchema",

0 commit comments

Comments
 (0)