Skip to content

Commit 1cbfe4d

Browse files
committed
updates OAS
1 parent 58368e3 commit 1cbfe4d

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
@@ -4927,36 +4927,6 @@ paths:
49274927
application/json:
49284928
schema:
49294929
$ref: '#/components/schemas/Envelope_dict_Annotated_str__StringConstraints___ImageResources__'
4930-
/v0/projects/-/nodes/-/services:
4931-
get:
4932-
tags:
4933-
- projects
4934-
- nodes
4935-
summary: List Projects Services
4936-
description: Lists all services used in the user's projects **grouped by project**
4937-
operationId: list_projects_services
4938-
parameters:
4939-
- name: limit
4940-
in: query
4941-
required: false
4942-
schema:
4943-
type: integer
4944-
default: 20
4945-
title: Limit
4946-
- name: offset
4947-
in: query
4948-
required: false
4949-
schema:
4950-
type: integer
4951-
default: 0
4952-
title: Offset
4953-
responses:
4954-
'200':
4955-
description: Successful Response
4956-
content:
4957-
application/json:
4958-
schema:
4959-
$ref: '#/components/schemas/Page_ProjectNodeServicesGet_'
49604930
/v0/projects/{project_id}/nodes/-/services:
49614931
get:
49624932
tags:
@@ -12436,24 +12406,6 @@ components:
1243612406
- _links
1243712407
- data
1243812408
title: Page[ProjectListItem]
12439-
Page_ProjectNodeServicesGet_:
12440-
properties:
12441-
_meta:
12442-
$ref: '#/components/schemas/PageMetaInfoLimitOffset'
12443-
_links:
12444-
$ref: '#/components/schemas/PageLinks'
12445-
data:
12446-
items:
12447-
$ref: '#/components/schemas/ProjectNodeServicesGet'
12448-
type: array
12449-
title: Data
12450-
additionalProperties: false
12451-
type: object
12452-
required:
12453-
- _meta
12454-
- _links
12455-
- data
12456-
title: Page[ProjectNodeServicesGet]
1245712409
Page_ServiceRunGet_:
1245812410
properties:
1245912411
_meta:

0 commit comments

Comments
 (0)