Skip to content

Commit cafe745

Browse files
committed
✨ Enhance ProjectGet schema with JSON schema examples and improve formatting
1 parent ee01d4d commit cafe745

File tree

1 file changed

+31
-7
lines changed
  • packages/models-library/src/models_library/api_schemas_webserver

1 file changed

+31
-7
lines changed

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

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
""" rest API schema models for projects
1+
"""rest API schema models for projects
22
33
44
SEE rationale in https://fastapi.tiangolo.com/tutorial/extra-models/#multiple-models
@@ -19,6 +19,7 @@
1919
PlainSerializer,
2020
field_validator,
2121
)
22+
from pydantic.config import JsonDict
2223

2324
from ..api_schemas_long_running_tasks.tasks import TaskGet
2425
from ..basic_types import LongTruncatedStr, ShortTruncatedStr
@@ -53,9 +54,9 @@ class ProjectCreateNew(InputSchema):
5354
access_rights: dict[GroupIDStr, AccessRights]
5455

5556
tags: Annotated[list[int], Field(default_factory=list)] = DEFAULT_FACTORY
56-
classifiers: Annotated[
57-
list[ClassifierID], Field(default_factory=list)
58-
] = DEFAULT_FACTORY
57+
classifiers: Annotated[list[ClassifierID], Field(default_factory=list)] = (
58+
DEFAULT_FACTORY
59+
)
5960

6061
ui: StudyUI | None = None
6162

@@ -143,7 +144,31 @@ class ProjectGet(OutputSchema):
143144
none_to_empty_str_pre_validator
144145
)
145146

146-
model_config = ConfigDict(frozen=False)
147+
@staticmethod
148+
def _update_json_schema_extra(schema: JsonDict) -> None:
149+
schema.update(
150+
examples=[
151+
{
152+
"uuid": "a8b0f384-bd08-4793-ab25-65d5a755f4b6",
153+
"name": "My Project",
154+
"description": "This is a sample project",
155+
"thumbnail": "http://example.com/thumbnail.png",
156+
"workbench": {},
157+
"prj_owner": "[email protected]",
158+
"access_rights": {},
159+
"trashed_at": None,
160+
"trashed_by": None,
161+
"dev": {},
162+
"tags": [],
163+
"workspace_id": None,
164+
"folder_id": None,
165+
"creation_date": "2023-01-01T00:00:00Z",
166+
"last_change_date": "2023-01-02T00:00:00Z",
167+
}
168+
]
169+
)
170+
171+
model_config = ConfigDict(frozen=False, json_schema_extra=_update_json_schema_extra)
147172

148173
@classmethod
149174
def from_domain_model(cls, project_data: dict[str, Any]) -> Self:
@@ -168,8 +193,7 @@ def from_domain_model(cls, project_data: dict[str, Any]) -> Self:
168193
TaskProjectGet: TypeAlias = TaskGet
169194

170195

171-
class ProjectListItem(ProjectGet):
172-
...
196+
class ProjectListItem(ProjectGet): ...
173197

174198

175199
class ProjectReplace(InputSchema):

0 commit comments

Comments
 (0)