Skip to content

Commit a337c1d

Browse files
committed
split models
1 parent 9fcfd72 commit a337c1d

File tree

2 files changed

+36
-42
lines changed

2 files changed

+36
-42
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import re
2+
from typing import Annotated, Any, Literal
3+
4+
from pydantic import BaseModel, BeforeValidator, Field, HttpUrl
5+
6+
7+
def _feature_descriptor_to_dict(descriptor: str) -> dict[str, Any]:
8+
# NOTE: this is manually added in the server side so be more robust to errors
9+
pattern = r"(\w+): ([^,]+)"
10+
matches = re.findall(pattern, descriptor.strip("{}"))
11+
return dict(matches)
12+
13+
14+
class AvailableDownload(BaseModel):
15+
id: Annotated[int, Field(alias="ID")]
16+
description: Annotated[str, Field(alias="Description")]
17+
thumbnail: Annotated[str, Field(alias="Thumbnail")]
18+
features: Annotated[
19+
dict[str, Any],
20+
BeforeValidator(_feature_descriptor_to_dict),
21+
Field(alias="Features"),
22+
]
23+
doi: Annotated[str, Field(alias="DOI")]
24+
license_key: Annotated[str | None, Field(alias="LicenseKey")]
25+
license_version: Annotated[str | None, Field(alias="LicenseVersion")]
26+
protection: Annotated[Literal["Code", "PayPal"], Field(alias="Protection")]
27+
available_from_url: Annotated[HttpUrl | None, Field(alias="AvailableFromURL")]
28+
29+
30+
class ResponseData(BaseModel):
31+
msg: int | None = None # still not used
32+
available_downloads: Annotated[
33+
list[AvailableDownload], Field(alias="availableDownloads")
34+
]

services/web/server/src/simcore_service_webserver/licenses/_itis_vip_service.py

Lines changed: 2 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,7 @@
1-
import re
2-
from typing import Annotated, Any, Literal
3-
41
import httpx
5-
from pydantic import BaseModel, BeforeValidator, Field, HttpUrl
6-
7-
#
8-
# MODELS
9-
#
10-
11-
12-
def _feature_descriptor_to_dict(descriptor: str) -> dict[str, Any]:
13-
# NOTE: this is manually added in the server side so be more robust to errors
14-
pattern = r"(\w+): ([^,]+)"
15-
matches = re.findall(pattern, descriptor.strip("{}"))
16-
return dict(matches)
17-
18-
19-
class AvailableDownload(BaseModel):
20-
id: Annotated[int, Field(alias="ID")]
21-
description: Annotated[str, Field(alias="Description")]
22-
thumbnail: Annotated[str, Field(alias="Thumbnail")]
23-
features: Annotated[
24-
dict[str, Any],
25-
BeforeValidator(_feature_descriptor_to_dict),
26-
Field(alias="Features"),
27-
]
28-
doi: Annotated[str, Field(alias="DOI")]
29-
license_key: Annotated[str | None, Field(alias="LicenseKey")]
30-
license_version: Annotated[str | None, Field(alias="LicenseVersion")]
31-
protection: Annotated[Literal["Code", "PayPal"], Field(alias="Protection")]
32-
available_from_url: Annotated[HttpUrl | None, Field(alias="AvailableFromURL")]
33-
34-
35-
class ResponseData(BaseModel):
36-
msg: int | None = None # still not used
37-
available_downloads: Annotated[
38-
list[AvailableDownload], Field(alias="availableDownloads")
39-
]
40-
2+
from pydantic import HttpUrl
413

42-
#
43-
# API
44-
#
4+
from ._itis_vip_models import AvailableDownload, ResponseData
455

466

477
async def get_category_items(

0 commit comments

Comments
 (0)