Skip to content

Commit b5b684e

Browse files
committed
fixs webserver
1 parent 57dcc32 commit b5b684e

File tree

3 files changed

+29
-19
lines changed

3 files changed

+29
-19
lines changed

packages/pytest-simcore/src/pytest_simcore/pydantic_models.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22
import importlib
33
import inspect
44
import itertools
5+
import json
56
import pkgutil
67
from collections.abc import Iterator
78
from contextlib import suppress
89
from types import ModuleType
910
from typing import Any, NamedTuple
1011

1112
import pytest
12-
from pydantic import BaseModel
13+
from pydantic import BaseModel, ValidationError
1314

1415

1516
def is_strict_inner(outer_cls: type, inner_cls: type) -> bool:
@@ -93,6 +94,7 @@ def _is_model_cls(obj) -> bool:
9394
assert inspect.ismodule(module)
9495

9596
for model_name, model_cls in inspect.getmembers(module, _is_model_cls):
97+
9698
schema = model_cls.model_json_schema()
9799

98100
if example := schema.get("example"):
@@ -111,6 +113,19 @@ def _is_model_cls(obj) -> bool:
111113
)
112114

113115

116+
def assert_validation_model(
117+
model_cls: type[BaseModel], example_name: int, example_data: Any
118+
):
119+
try:
120+
assert model_cls.model_validate(example_data) is not None
121+
except ValidationError as err:
122+
pytest.fail(
123+
f"{example_name} is invalid {model_cls.__module__}.{model_cls.__name__}:"
124+
f"\n{json.dumps(example_data, indent=1)}"
125+
f"\nError: {err}"
126+
)
127+
128+
114129
## PYDANTIC MODELS & SCHEMAS -----------------------------------------------------
115130

116131

services/web/server/src/simcore_service_webserver/studies_dispatcher/_redirects_handlers.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -170,14 +170,7 @@ def ensure_extension_upper_and_dotless(cls, v):
170170

171171

172172
class ServiceAndFileParams(FileQueryParams, ServiceParams):
173-
model_config = ConfigDict(
174-
json_schema_extra={
175-
"allOf": [
176-
{"$ref": "#/definitions/FileParams"},
177-
{"$ref": "#/definitions/ServiceParams"},
178-
]
179-
}
180-
)
173+
...
181174

182175

183176
class ViewerQueryParams(BaseModel):

services/web/server/tests/unit/with_dbs/04/studies_dispatcher/test_studies_dispatcher_handlers.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,23 @@
55
# pylint: disable=unused-variable
66

77
import asyncio
8+
import json
89
import re
910
import urllib.parse
1011
from collections.abc import AsyncIterator
1112
from typing import Any
1213

1314
import pytest
14-
import simcore_service_webserver.studies_dispatcher._redirects_handlers
1515
import sqlalchemy as sa
1616
from aiohttp import ClientResponse, ClientSession
1717
from aiohttp.test_utils import TestClient, TestServer
1818
from aioresponses import aioresponses
19-
from common_library.json_serialization import json_dumps
2019
from models_library.projects_state import ProjectLocked, ProjectStatus
21-
from pydantic import BaseModel, ByteSize, TypeAdapter
20+
from pydantic import BaseModel, ByteSize, TypeAdapter, ValidationError
2221
from pytest_mock import MockerFixture
2322
from pytest_simcore.helpers.assert_checks import assert_status
2423
from pytest_simcore.helpers.webserver_login import UserInfoDict, UserRole
25-
from pytest_simcore.pydantic_models import iter_model_examples_in_module
24+
from pytest_simcore.pydantic_models import walk_model_examples_in_package
2625
from servicelib.aiohttp import status
2726
from settings_library.redis import RedisSettings
2827
from settings_library.utils_session import DEFAULT_SESSION_COOKIE_NAME
@@ -235,16 +234,19 @@ async def test_api_list_supported_filetypes(client: TestClient):
235234

236235
@pytest.mark.parametrize(
237236
"model_cls, example_name, example_data",
238-
iter_model_examples_in_module(
239-
simcore_service_webserver.studies_dispatcher._redirects_handlers
240-
),
237+
walk_model_examples_in_package(simcore_service_webserver.studies_dispatcher),
241238
)
242239
def test_model_examples(
243240
model_cls: type[BaseModel], example_name: int, example_data: Any
244241
):
245-
print(example_name, ":", json_dumps(example_data))
246-
model = model_cls.model_validate(example_data)
247-
assert model
242+
try:
243+
assert model_cls.model_validate(example_data) is not None
244+
except ValidationError as err:
245+
pytest.fail(
246+
f"{example_name} is invalid {model_cls.__module__}.{model_cls.__name__}:"
247+
f"\n{json.dumps(example_data, indent=1)}"
248+
f"\nError: {err}"
249+
)
248250

249251

250252
async def test_api_list_services(client: TestClient):

0 commit comments

Comments
 (0)