Skip to content

Commit 9ebb830

Browse files
✨ Create custom generate json schema for resolving references (#8295)
1 parent 7f0830f commit 9ebb830

File tree

38 files changed

+177
-29
lines changed

38 files changed

+177
-29
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/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/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/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",

packages/notifications-library/requirements/_base.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ jinja2==3.1.6
3737
# -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt
3838
# -c requirements/../../../requirements/constraints.txt
3939
# -r requirements/_base.in
40+
jsonref==1.1.0
41+
# via -r requirements/../../../packages/models-library/requirements/_base.in
4042
jsonschema==4.23.0
4143
# via -r requirements/../../../packages/models-library/requirements/_base.in
4244
jsonschema-specifications==2024.10.1

packages/service-integration/requirements/_base.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ jinja2==3.1.6
5252
# jinja2-time
5353
jinja2-time==0.2.0
5454
# via -r requirements/_base.in
55+
jsonref==1.1.0
56+
# via -r requirements/../../../packages/models-library/requirements/_base.in
5557
jsonschema==4.23.0
5658
# via
5759
# -r requirements/../../../packages/models-library/requirements/_base.in

packages/service-library/requirements/_base.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ idna==3.10
7979
# yarl
8080
importlib-metadata==8.5.0
8181
# via opentelemetry-api
82+
jsonref==1.1.0
83+
# via -r requirements/../../../packages/models-library/requirements/_base.in
8284
jsonschema==4.23.0
8385
# via -r requirements/../../../packages/models-library/requirements/_base.in
8486
jsonschema-specifications==2024.10.1

0 commit comments

Comments
 (0)