Skip to content

Commit 3792e23

Browse files
committed
updates OAS
1 parent e271cb1 commit 3792e23

File tree

3 files changed

+41
-80
lines changed

3 files changed

+41
-80
lines changed

api/specs/web-server/_projects_nodes.py

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,8 @@
44
# pylint: disable=too-many-arguments
55

66

7-
from typing import Annotated
8-
9-
from _common import as_query, assert_handler_signature_against_model
10-
from fastapi import APIRouter, Depends, status
7+
from _common import assert_handler_signature_against_model
8+
from fastapi import APIRouter, status
119
from models_library.api_schemas_directorv2.dynamic_services import DynamicServiceGet
1210
from models_library.api_schemas_long_running_tasks.tasks import TaskGet
1311
from models_library.api_schemas_webserver.projects_nodes import (
@@ -27,7 +25,6 @@
2725
from models_library.groups import GroupID
2826
from models_library.projects import ProjectID
2927
from models_library.projects_nodes_io import NodeID
30-
from models_library.rest_pagination import Page, PageQueryParameters
3128
from simcore_service_webserver._meta import API_VTAG
3229
from simcore_service_webserver.projects._crud_handlers import ProjectPathParams
3330
from simcore_service_webserver.projects._nodes_handlers import (
@@ -160,16 +157,6 @@ def replace_node_resources(
160157
#
161158

162159

163-
@router.get(
164-
"/projects/-/nodes/-/services",
165-
response_model=Page[ProjectNodeServicesGet],
166-
)
167-
async def list_projects_services(
168-
_query: Annotated[as_query(PageQueryParameters), Depends()]
169-
):
170-
"""Lists all services used in the user's projects **grouped by project**"""
171-
172-
173160
@router.get(
174161
"/projects/{project_id}/nodes/-/services",
175162
response_model=Envelope[ProjectNodeServicesGet],

packages/models-library/src/models_library/api_schemas_catalog/services.py

Lines changed: 39 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from datetime import datetime
2-
from typing import Any, TypeAlias
2+
from typing import Annotated, Any, TypeAlias
33

4+
from common_library.basic_types import DEFAULT_FACTORY
45
from models_library.rpc_pagination import PageRpc
56
from pydantic import ConfigDict, Field, HttpUrl, NonNegativeInt
67
from pydantic.config import JsonDict
@@ -154,9 +155,10 @@
154155
class ServiceGet(
155156
ServiceMetaDataPublished, ServiceAccessRights, ServiceMetaDataEditable
156157
): # pylint: disable=too-many-ancestors
157-
owner: LowerCaseEmailStr | None = Field(
158-
description="None when the owner email cannot be found in the database"
159-
)
158+
owner: Annotated[
159+
LowerCaseEmailStr | None,
160+
Field(description="None when the owner email cannot be found in the database"),
161+
]
160162

161163
@staticmethod
162164
def _update_json_schema_extra(schema: JsonDict) -> None:
@@ -169,7 +171,7 @@ def _update_json_schema_extra(schema: JsonDict) -> None:
169171
)
170172

171173

172-
class ServiceGetV2(CatalogOutputSchema):
174+
class ServiceGetV2Base(CatalogOutputSchema):
173175
# Model used in catalog's rpc and rest interfaces
174176
key: ServiceKey
175177
version: ServiceVersion
@@ -183,13 +185,14 @@ class ServiceGetV2(CatalogOutputSchema):
183185

184186
version_display: str | None = None
185187

186-
service_type: ServiceType = Field(default=..., alias="type")
188+
service_type: Annotated[ServiceType, Field(alias="type")]
187189

188190
contact: LowerCaseEmailStr | None
189-
authors: list[Author] = Field(..., min_length=1)
190-
owner: LowerCaseEmailStr | None = Field(
191-
description="None when the owner email cannot be found in the database"
192-
)
191+
authors: Annotated[list[Author], Field(min_length=1)]
192+
owner: Annotated[
193+
LowerCaseEmailStr | None,
194+
Field(description="None when the owner email cannot be found in the database"),
195+
]
193196

194197
inputs: ServiceInputsDict
195198
outputs: ServiceOutputsDict
@@ -202,12 +205,18 @@ class ServiceGetV2(CatalogOutputSchema):
202205
classifiers: list[str] | None = []
203206
quality: dict[str, Any] = {}
204207

205-
history: list[ServiceRelease] = Field(
206-
default_factory=list,
207-
description="history of releases for this service at this point in time, starting from the newest to the oldest."
208-
" It includes current release.",
209-
json_schema_extra={"default": []},
210-
)
208+
209+
class ServiceGetV2(ServiceGetV2Base):
210+
# Model used in catalog's rpc and rest interfaces
211+
history: Annotated[
212+
list[ServiceRelease],
213+
Field(
214+
default_factory=list,
215+
description="history of releases for this service at this point in time, starting from the newest to the oldest."
216+
" It includes current release.",
217+
json_schema_extra={"default": []},
218+
),
219+
] = DEFAULT_FACTORY
211220

212221
@staticmethod
213222
def _update_json_schema_extra(schema: JsonDict) -> None:
@@ -276,9 +285,22 @@ def _update_json_schema_extra(schema: JsonDict) -> None:
276285
)
277286

278287

288+
class ServiceItemList(ServiceGetV2Base):
289+
release: ServiceRelease
290+
history: Annotated[
291+
list[ServiceRelease],
292+
Field(
293+
default_factory=list,
294+
deprecated=True,
295+
description="History will be replaced by current 'release' instead",
296+
json_schema_extra={"default": []},
297+
),
298+
] = DEFAULT_FACTORY
299+
300+
279301
PageRpcServicesGetV2: TypeAlias = PageRpc[
280302
# WARNING: keep this definition in models_library and not in the RPC interface
281-
ServiceGetV2
303+
ServiceItemList
282304
]
283305

284306
ServiceResourcesGet: TypeAlias = ServiceResourcesDict

services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -4963,36 +4963,6 @@ paths:
49634963
application/json:
49644964
schema:
49654965
$ref: '#/components/schemas/Envelope_dict_Annotated_str__StringConstraints___ImageResources__'
4966-
/v0/projects/-/nodes/-/services:
4967-
get:
4968-
tags:
4969-
- projects
4970-
- nodes
4971-
summary: List Projects Services
4972-
description: Lists all services used in the user's projects **grouped by project**
4973-
operationId: list_projects_services
4974-
parameters:
4975-
- name: limit
4976-
in: query
4977-
required: false
4978-
schema:
4979-
type: integer
4980-
default: 20
4981-
title: Limit
4982-
- name: offset
4983-
in: query
4984-
required: false
4985-
schema:
4986-
type: integer
4987-
default: 0
4988-
title: Offset
4989-
responses:
4990-
'200':
4991-
description: Successful Response
4992-
content:
4993-
application/json:
4994-
schema:
4995-
$ref: '#/components/schemas/Page_ProjectNodeServicesGet_'
49964966
/v0/projects/{project_id}/nodes/-/services:
49974967
get:
49984968
tags:
@@ -12487,24 +12457,6 @@ components:
1248712457
- _links
1248812458
- data
1248912459
title: Page[ProjectListItem]
12490-
Page_ProjectNodeServicesGet_:
12491-
properties:
12492-
_meta:
12493-
$ref: '#/components/schemas/PageMetaInfoLimitOffset'
12494-
_links:
12495-
$ref: '#/components/schemas/PageLinks'
12496-
data:
12497-
items:
12498-
$ref: '#/components/schemas/ProjectNodeServicesGet'
12499-
type: array
12500-
title: Data
12501-
additionalProperties: false
12502-
type: object
12503-
required:
12504-
- _meta
12505-
- _links
12506-
- data
12507-
title: Page[ProjectNodeServicesGet]
1250812460
Page_ServiceRunGet_:
1250912461
properties:
1251012462
_meta:

0 commit comments

Comments
 (0)