|
3 | 3 |
|
4 | 4 | from models_library.rpc_pagination import PageRpc
|
5 | 5 | from pydantic import BaseModel, ConfigDict, Field, HttpUrl, NonNegativeInt
|
| 6 | +from pydantic.config import JsonDict |
6 | 7 |
|
7 | 8 | from ..boot_options import BootOptions
|
8 | 9 | from ..emails import LowerCaseEmailStr
|
|
21 | 22 | from ..services_types import ServiceKey, ServiceVersion
|
22 | 23 | from ..utils.change_case import snake_to_camel
|
23 | 24 |
|
24 |
| - |
25 |
| -class ServiceUpdate(ServiceMetaDataEditable, ServiceAccessRights): |
26 |
| - model_config = ConfigDict( |
27 |
| - json_schema_extra={ |
28 |
| - "example": { |
29 |
| - # ServiceAccessRights |
30 |
| - "accessRights": { |
31 |
| - 1: { |
32 |
| - "execute_access": False, |
33 |
| - "write_access": False, |
34 |
| - }, # type: ignore[dict-item] |
35 |
| - 2: { |
36 |
| - "execute_access": True, |
37 |
| - "write_access": True, |
38 |
| - }, # type: ignore[dict-item] |
39 |
| - 44: { |
40 |
| - "execute_access": False, |
41 |
| - "write_access": False, |
42 |
| - }, # type: ignore[dict-item] |
43 |
| - }, |
44 |
| - # ServiceMetaData = ServiceCommonData + |
45 |
| - "name": "My Human Readable Service Name", |
46 |
| - "thumbnail": None, |
47 |
| - "description": "An interesting service that does something", |
48 |
| - "classifiers": ["RRID:SCR_018997", "RRID:SCR_019001"], |
49 |
| - "quality": { |
50 |
| - "tsr": { |
51 |
| - "r01": {"level": 3, "references": ""}, |
52 |
| - "r02": {"level": 2, "references": ""}, |
53 |
| - "r03": {"level": 0, "references": ""}, |
54 |
| - "r04": {"level": 0, "references": ""}, |
55 |
| - "r05": {"level": 2, "references": ""}, |
56 |
| - "r06": {"level": 0, "references": ""}, |
57 |
| - "r07": {"level": 0, "references": ""}, |
58 |
| - "r08": {"level": 1, "references": ""}, |
59 |
| - "r09": {"level": 0, "references": ""}, |
60 |
| - "r10": {"level": 0, "references": ""}, |
61 |
| - }, |
62 |
| - "enabled": True, |
63 |
| - "annotations": { |
64 |
| - "vandv": "", |
65 |
| - "purpose": "", |
66 |
| - "standards": "", |
67 |
| - "limitations": "", |
68 |
| - "documentation": "", |
69 |
| - "certificationLink": "", |
70 |
| - "certificationStatus": "Uncertified", |
71 |
| - }, |
72 |
| - }, |
73 |
| - } |
74 |
| - } |
75 |
| - ) |
76 |
| - |
77 |
| - |
78 | 25 | _EXAMPLE_FILEPICKER: dict[str, Any] = {
|
79 | 26 | "name": "File Picker",
|
80 | 27 | "thumbnail": None,
|
@@ -209,10 +156,14 @@ class ServiceGet(
|
209 | 156 | description="None when the owner email cannot be found in the database"
|
210 | 157 | )
|
211 | 158 |
|
| 159 | + @staticmethod |
| 160 | + def _update_json_schema_extra(schema: JsonDict) -> None: |
| 161 | + schema.update({"examples": [_EXAMPLE_FILEPICKER, _EXAMPLE_SLEEPER]}) |
| 162 | + |
212 | 163 | model_config = ConfigDict(
|
213 | 164 | extra="ignore",
|
214 | 165 | populate_by_name=True,
|
215 |
| - json_schema_extra={"examples": [_EXAMPLE_FILEPICKER, _EXAMPLE_SLEEPER]}, |
| 166 | + json_schema_extra=_update_json_schema_extra, |
216 | 167 | )
|
217 | 168 |
|
218 | 169 |
|
@@ -254,62 +205,70 @@ class ServiceGetV2(BaseModel):
|
254 | 205 | json_schema_extra={"default": []},
|
255 | 206 | )
|
256 | 207 |
|
| 208 | + @staticmethod |
| 209 | + def _update_json_schema_extra(schema: JsonDict) -> None: |
| 210 | + schema.update( |
| 211 | + { |
| 212 | + "examples": [ |
| 213 | + { |
| 214 | + **_EXAMPLE_SLEEPER, # v2.2.1 (latest) |
| 215 | + "history": [ |
| 216 | + { |
| 217 | + "version": _EXAMPLE_SLEEPER["version"], |
| 218 | + "version_display": "Summer Release", |
| 219 | + "released": "2024-07-20T15:00:00", |
| 220 | + }, |
| 221 | + { |
| 222 | + "version": "2.0.0", |
| 223 | + "compatibility": { |
| 224 | + "canUpdateTo": { |
| 225 | + "version": _EXAMPLE_SLEEPER["version"] |
| 226 | + }, |
| 227 | + }, |
| 228 | + }, |
| 229 | + {"version": "0.9.11"}, |
| 230 | + {"version": "0.9.10"}, |
| 231 | + { |
| 232 | + "version": "0.9.8", |
| 233 | + "compatibility": { |
| 234 | + "canUpdateTo": {"version": "0.9.11"}, |
| 235 | + }, |
| 236 | + }, |
| 237 | + { |
| 238 | + "version": "0.9.1", |
| 239 | + "versionDisplay": "Matterhorn", |
| 240 | + "released": "2024-01-20T18:49:17", |
| 241 | + "compatibility": { |
| 242 | + "can_update_to": {"version": "0.9.11"}, |
| 243 | + }, |
| 244 | + }, |
| 245 | + { |
| 246 | + "version": "0.9.0", |
| 247 | + "retired": "2024-07-20T15:00:00", |
| 248 | + }, |
| 249 | + {"version": "0.8.0"}, |
| 250 | + {"version": "0.1.0"}, |
| 251 | + ], |
| 252 | + }, |
| 253 | + { |
| 254 | + **_EXAMPLE_FILEPICKER_V2, |
| 255 | + "history": [ |
| 256 | + { |
| 257 | + "version": _EXAMPLE_FILEPICKER_V2["version"], |
| 258 | + "version_display": "Odei Release", |
| 259 | + "released": "2025-03-25T00:00:00", |
| 260 | + } |
| 261 | + ], |
| 262 | + }, |
| 263 | + ] |
| 264 | + } |
| 265 | + ) |
| 266 | + |
257 | 267 | model_config = ConfigDict(
|
258 | 268 | extra="forbid",
|
259 | 269 | populate_by_name=True,
|
260 | 270 | alias_generator=snake_to_camel,
|
261 |
| - json_schema_extra={ |
262 |
| - "examples": [ |
263 |
| - { |
264 |
| - **_EXAMPLE_SLEEPER, # v2.2.1 (latest) |
265 |
| - "history": [ |
266 |
| - { |
267 |
| - "version": _EXAMPLE_SLEEPER["version"], |
268 |
| - "version_display": "Summer Release", |
269 |
| - "released": "2024-07-20T15:00:00", |
270 |
| - }, |
271 |
| - { |
272 |
| - "version": "2.0.0", |
273 |
| - "compatibility": { |
274 |
| - "canUpdateTo": {"version": _EXAMPLE_SLEEPER["version"]}, |
275 |
| - }, |
276 |
| - }, |
277 |
| - {"version": "0.9.11"}, |
278 |
| - {"version": "0.9.10"}, |
279 |
| - { |
280 |
| - "version": "0.9.8", |
281 |
| - "compatibility": { |
282 |
| - "canUpdateTo": {"version": "0.9.11"}, |
283 |
| - }, |
284 |
| - }, |
285 |
| - { |
286 |
| - "version": "0.9.1", |
287 |
| - "versionDisplay": "Matterhorn", |
288 |
| - "released": "2024-01-20T18:49:17", |
289 |
| - "compatibility": { |
290 |
| - "can_update_to": {"version": "0.9.11"}, |
291 |
| - }, |
292 |
| - }, |
293 |
| - { |
294 |
| - "version": "0.9.0", |
295 |
| - "retired": "2024-07-20T15:00:00", |
296 |
| - }, |
297 |
| - {"version": "0.8.0"}, |
298 |
| - {"version": "0.1.0"}, |
299 |
| - ], |
300 |
| - }, |
301 |
| - { |
302 |
| - **_EXAMPLE_FILEPICKER_V2, |
303 |
| - "history": [ |
304 |
| - { |
305 |
| - "version": _EXAMPLE_FILEPICKER_V2["version"], |
306 |
| - "version_display": "Odei Release", |
307 |
| - "released": "2025-03-25T00:00:00", |
308 |
| - } |
309 |
| - ], |
310 |
| - }, |
311 |
| - ] |
312 |
| - }, |
| 271 | + json_schema_extra=_update_json_schema_extra, |
313 | 272 | )
|
314 | 273 |
|
315 | 274 |
|
|
0 commit comments