Skip to content

Commit 44f3019

Browse files
authored
Merge branch 'master' into pr-osparc-fix-stop-log-fetching
2 parents 5f7c73d + daf0b6a commit 44f3019

File tree

182 files changed

+5865
-4007
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

182 files changed

+5865
-4007
lines changed

.github/CODEOWNERS

Lines changed: 40 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -4,45 +4,46 @@
44

55

66
# files and folders recursively
7-
.env-* @mrnicegyu11 @YuryHrytsuk
8-
Makefile @pcrespov @sanderegg
7+
.env-* @mrnicegyu11 @YuryHrytsuk
8+
Makefile @pcrespov @sanderegg
99

1010

1111
# NOTE: '/' denotes the root of the repository
12-
/.github/ @sanderegg @pcrespov
13-
/api/ @sanderegg @pcrespov @matusdrobuliak66
14-
/ci/ @sanderegg @pcrespov
15-
/docs/ @pcrespov
16-
/packages/common-library/ @giancarloromeo
17-
/packages/models-library/ @sanderegg @pcrespov @matusdrobuliak66 @giancarloromeo
18-
/packages/postgres-database/ @matusdrobuliak66
19-
/packages/pytest-simcore/ @pcrespov @sanderegg
20-
/packages/service-integration/ @pcrespov @sanderegg @GitHK
21-
/packages/service-library/ @pcrespov
22-
/packages/settings-library/ @pcrespov @sanderegg
23-
/requirements/ @pcrespov @matusdrobuliak66
24-
/services/agent/ @GitHK
25-
/services/api-server/ @pcrespov
26-
/services/autoscaling/ @sanderegg
27-
/services/catalog/ @pcrespov @sanderegg
28-
/services/clusters-keeper/ @sanderegg
29-
/services/datcore-adapter/ @sanderegg
30-
/services/director*/ @sanderegg @pcrespov @GitHK
31-
/services/docker-compose*.yml @sanderegg @mrnicegyu11 @YuryHrytsuk
32-
/services/dynamic-sidecar/ @GitHK
33-
/services/efs-guardian/ @matusdrobuliak66
34-
/services/invitations/ @pcrespov
35-
/services/migration/ @pcrespov
36-
/services/payments/ @pcrespov @matusdrobuliak66
37-
/services/resource-usage-tracker/ @matusdrobuliak66
38-
/services/static-webserver/ @GitHK
39-
/services/static-webserver/client/ @odeimaiz
40-
/services/storage/ @sanderegg
41-
/services/web/server/ @pcrespov @sanderegg @GitHK @matusdrobuliak66
42-
/tests/e2e-frontend/ @odeimaiz
43-
/tests/e2e-playwright/ @matusdrobuliak66
44-
/tests/environment-setup/ @pcrespov
45-
/tests/performance/ @pcrespov @sanderegg
46-
/tests/public-api/ @pcrespov
47-
requirements/* @pcrespov
48-
tools/* @pcrespov
12+
/.github/ @sanderegg @pcrespov
13+
/api/ @sanderegg @pcrespov @matusdrobuliak66
14+
/ci/ @sanderegg @pcrespov
15+
/docs/ @pcrespov
16+
/packages/common-library/ @giancarloromeo
17+
/packages/models-library/ @sanderegg @pcrespov @matusdrobuliak66 @giancarloromeo
18+
/packages/postgres-database/ @matusdrobuliak66
19+
/packages/pytest-simcore/ @pcrespov @sanderegg
20+
/packages/service-integration/ @pcrespov @sanderegg @GitHK
21+
/packages/service-library/ @pcrespov
22+
/packages/settings-library/ @pcrespov @sanderegg
23+
/requirements/ @pcrespov @matusdrobuliak66
24+
/services/agent/ @GitHK
25+
/services/api-server/ @pcrespov
26+
/services/api-server/tests/unit/pact_broker/ @matusdrobuliak66
27+
/services/autoscaling/ @sanderegg
28+
/services/catalog/ @pcrespov @sanderegg
29+
/services/clusters-keeper/ @sanderegg
30+
/services/datcore-adapter/ @sanderegg
31+
/services/director*/ @sanderegg @pcrespov @GitHK
32+
/services/docker-compose*.yml @sanderegg @mrnicegyu11 @YuryHrytsuk
33+
/services/dynamic-sidecar/ @GitHK
34+
/services/efs-guardian/ @matusdrobuliak66
35+
/services/invitations/ @pcrespov
36+
/services/migration/ @pcrespov
37+
/services/payments/ @pcrespov @matusdrobuliak66
38+
/services/resource-usage-tracker/ @matusdrobuliak66
39+
/services/static-webserver/ @GitHK
40+
/services/static-webserver/client/ @odeimaiz
41+
/services/storage/ @sanderegg
42+
/services/web/server/ @pcrespov @sanderegg @GitHK @matusdrobuliak66
43+
/tests/e2e-frontend/ @odeimaiz
44+
/tests/e2e-playwright/ @matusdrobuliak66
45+
/tests/environment-setup/ @pcrespov
46+
/tests/performance/ @pcrespov @sanderegg
47+
/tests/public-api/ @pcrespov
48+
requirements/* @pcrespov
49+
tools/* @pcrespov
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# This workflow holds jobs which are required to pass before merging into master
2+
3+
name: CI PACT Master
4+
on:
5+
push:
6+
branches:
7+
- "master"
8+
9+
concurrency:
10+
group: ${{ github.workflow }}-${{ github.ref }}
11+
cancel-in-progress: true
12+
13+
jobs:
14+
pact-tests:
15+
timeout-minutes: 10
16+
name: "Run PACT tests"
17+
runs-on: ubuntu-latest
18+
env:
19+
# secrets can be set in settings/secrets on github
20+
PACT_BROKER_URL: ${{ secrets.PACT_BROKER_URL }}
21+
PACT_BROKER_USERNAME: ${{ secrets.PACT_BROKER_USERNAME }}
22+
PACT_BROKER_PASSWORD: ${{ secrets.PACT_BROKER_PASSWORD }}
23+
steps:
24+
- name: setup python environment
25+
uses: actions/setup-python@v5
26+
with:
27+
python-version: "3.11"
28+
- name: install uv
29+
uses: astral-sh/setup-uv@v5
30+
with:
31+
version: "0.5.x"
32+
enable-cache: false
33+
- name: checkout source branch
34+
uses: actions/checkout@v4
35+
- name: Run pact tests
36+
run: |
37+
make devenv
38+
source .venv/bin/activate
39+
cd services/api-server
40+
make install-ci
41+
make test-pacts

api/specs/web-server/_auth_api_keys.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
from models_library.generics import Envelope
1010
from models_library.rest_error import EnvelopedError
1111
from simcore_service_webserver._meta import API_VTAG
12+
from simcore_service_webserver.api_keys._controller_rest import ApiKeysPathParams
1213
from simcore_service_webserver.api_keys._exceptions_handlers import _TO_HTTP_ERROR_MAP
13-
from simcore_service_webserver.api_keys._rest import ApiKeysPathParams
1414

1515
router = APIRouter(
1616
prefix=f"/{API_VTAG}",

api/specs/web-server/_catalog.py

Lines changed: 25 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from models_library.api_schemas_api_server.pricing_plans import ServicePricingPlanGet
55
from models_library.api_schemas_webserver.catalog import (
66
CatalogServiceGet,
7+
CatalogServiceListItem,
78
CatalogServiceUpdate,
89
ServiceInputGet,
910
ServiceInputKey,
@@ -31,108 +32,94 @@
3132
)
3233

3334

34-
#
35-
# /catalog/services/* COLLECTION
36-
#
37-
38-
3935
@router.get(
4036
"/catalog/services/-/latest",
41-
response_model=Page[CatalogServiceGet],
37+
response_model=Page[CatalogServiceListItem],
4238
)
43-
def list_services_latest(_query_params: Annotated[ListServiceParams, Depends()]):
39+
def list_services_latest(_query: Annotated[ListServiceParams, Depends()]):
4440
pass
4541

4642

4743
@router.get(
4844
"/catalog/services/{service_key}/{service_version}",
4945
response_model=Envelope[CatalogServiceGet],
5046
)
51-
def get_service(_path_params: Annotated[ServicePathParams, Depends()]):
52-
...
47+
def get_service(_path: Annotated[ServicePathParams, Depends()]): ...
5348

5449

5550
@router.patch(
5651
"/catalog/services/{service_key}/{service_version}",
5752
response_model=Envelope[CatalogServiceGet],
5853
)
5954
def update_service(
60-
_path_params: Annotated[ServicePathParams, Depends()],
61-
_update: CatalogServiceUpdate,
62-
):
63-
...
55+
_path: Annotated[ServicePathParams, Depends()],
56+
_body: CatalogServiceUpdate,
57+
): ...
6458

6559

6660
@router.get(
6761
"/catalog/services/{service_key}/{service_version}/inputs",
6862
response_model=Envelope[list[ServiceInputGet]],
6963
)
7064
def list_service_inputs(
71-
_path_params: Annotated[ServicePathParams, Depends()],
72-
):
73-
...
65+
_path: Annotated[ServicePathParams, Depends()],
66+
): ...
7467

7568

7669
@router.get(
7770
"/catalog/services/{service_key}/{service_version}/inputs/{input_key}",
7871
response_model=Envelope[ServiceInputGet],
7972
)
8073
def get_service_input(
81-
_path_params: Annotated[_ServiceInputsPathParams, Depends()],
82-
):
83-
...
74+
_path: Annotated[_ServiceInputsPathParams, Depends()],
75+
): ...
8476

8577

8678
@router.get(
8779
"/catalog/services/{service_key}/{service_version}/inputs:match",
8880
response_model=Envelope[list[ServiceInputKey]],
8981
)
9082
def get_compatible_inputs_given_source_output(
91-
_path_params: Annotated[ServicePathParams, Depends()],
92-
_query_params: Annotated[_FromServiceOutputParams, Depends()],
93-
):
94-
...
83+
_path: Annotated[ServicePathParams, Depends()],
84+
_query: Annotated[_FromServiceOutputParams, Depends()],
85+
): ...
9586

9687

9788
@router.get(
9889
"/catalog/services/{service_key}/{service_version}/outputs",
9990
response_model=Envelope[list[ServiceOutputKey]],
10091
)
10192
def list_service_outputs(
102-
_path_params: Annotated[ServicePathParams, Depends()],
103-
):
104-
...
93+
_path: Annotated[ServicePathParams, Depends()],
94+
): ...
10595

10696

10797
@router.get(
10898
"/catalog/services/{service_key}/{service_version}/outputs/{output_key}",
10999
response_model=Envelope[list[ServiceOutputGet]],
110100
)
111101
def get_service_output(
112-
_path_params: Annotated[_ServiceOutputsPathParams, Depends()],
113-
):
114-
...
102+
_path: Annotated[_ServiceOutputsPathParams, Depends()],
103+
): ...
115104

116105

117106
@router.get(
118107
"/catalog/services/{service_key}/{service_version}/outputs:match",
119108
response_model=Envelope[list[ServiceOutputKey]],
120109
)
121110
def get_compatible_outputs_given_target_input(
122-
_path_params: Annotated[ServicePathParams, Depends()],
123-
_query_params: Annotated[_ToServiceInputsParams, Depends()],
124-
):
125-
...
111+
_path: Annotated[ServicePathParams, Depends()],
112+
_query: Annotated[_ToServiceInputsParams, Depends()],
113+
): ...
126114

127115

128116
@router.get(
129117
"/catalog/services/{service_key}/{service_version}/resources",
130118
response_model=Envelope[ServiceResourcesGet],
131119
)
132120
def get_service_resources(
133-
_params: Annotated[ServicePathParams, Depends()],
134-
):
135-
...
121+
_path: Annotated[ServicePathParams, Depends()],
122+
): ...
136123

137124

138125
@router.get(
@@ -142,6 +129,5 @@ def get_service_resources(
142129
tags=["pricing-plans"],
143130
)
144131
async def get_service_pricing_plan(
145-
_params: Annotated[ServicePathParams, Depends()],
146-
):
147-
...
132+
_path: Annotated[ServicePathParams, Depends()],
133+
): ...

api/specs/web-server/_projects_nodes.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
NodePatch,
1919
NodeRetrieve,
2020
NodeRetrieved,
21+
ProjectNodeServicesGet,
2122
ServiceResourcesDict,
2223
)
2324
from models_library.generics import Envelope
@@ -76,8 +77,7 @@ def delete_node(project_id: str, node_id: str): # noqa: ARG001
7677
)
7778
def retrieve_node(
7879
project_id: str, node_id: str, _retrieve: NodeRetrieve # noqa: ARG001
79-
):
80-
...
80+
): ...
8181

8282

8383
@router.post(
@@ -147,24 +147,29 @@ def get_node_resources(project_id: str, node_id: str): # noqa: ARG001
147147
)
148148
def replace_node_resources(
149149
project_id: str, node_id: str, _new: ServiceResourcesDict # noqa: ARG001
150-
):
151-
...
150+
): ...
152151

153152

154153
#
155154
# projects/*/nodes/-/services
156155
#
157156

158157

158+
@router.get(
159+
"/projects/{project_id}/nodes/-/services",
160+
response_model=Envelope[ProjectNodeServicesGet],
161+
)
162+
async def get_project_services(project_id: ProjectID): ...
163+
164+
159165
@router.get(
160166
"/projects/{project_id}/nodes/-/services:access",
161167
response_model=Envelope[_ProjectGroupAccess],
162168
description="Check whether provided group has access to the project services",
163169
)
164170
async def get_project_services_access_for_gid(
165171
project_id: ProjectID, for_gid: GroupID # noqa: ARG001
166-
):
167-
...
172+
): ...
168173

169174

170175
assert_handler_signature_against_model(
@@ -197,8 +202,7 @@ async def list_project_nodes_previews(project_id: ProjectID): # noqa: ARG001
197202
)
198203
async def get_project_node_preview(
199204
project_id: ProjectID, node_id: NodeID # noqa: ARG001
200-
):
201-
...
205+
): ...
202206

203207

204208
assert_handler_signature_against_model(get_project_node_preview, NodePathParams)

api/specs/web-server/_storage.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
from uuid import UUID
99

1010
from fastapi import APIRouter, Depends, Query, status
11-
from fastapi_pagination.cursor import CursorPage
1211
from models_library.api_schemas_storage.storage_schemas import (
1312
FileLocation,
1413
FileMetaDataGet,
@@ -32,6 +31,7 @@
3231
from models_library.projects_nodes_io import LocationID
3332
from models_library.users import UserID
3433
from pydantic import AnyUrl, ByteSize
34+
from servicelib.fastapi.rest_pagination import CustomizedPathsCursorPage
3535
from simcore_service_webserver._meta import API_VTAG
3636
from simcore_service_webserver.storage.schemas import DatasetMetaData, FileMetaData
3737

@@ -59,7 +59,7 @@ async def list_storage_locations():
5959

6060
@router.get(
6161
"/storage/locations/{location_id}/paths",
62-
response_model=CursorPage[PathMetaDataGet],
62+
response_model=CustomizedPathsCursorPage[PathMetaDataGet],
6363
)
6464
async def list_storage_paths(
6565
_path: Annotated[StorageLocationPathParams, Depends()],

0 commit comments

Comments
 (0)