Skip to content

Commit 7e4d4e6

Browse files
authored
Merge branch 'master' into feature/trash-bin
2 parents 04d2d2c + 2972184 commit 7e4d4e6

File tree

226 files changed

+2705
-1584
lines changed

Some content is hidden

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

226 files changed

+2705
-1584
lines changed

.codecov.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ flag_management:
1818

1919
component_management:
2020
default_rules:
21+
carryforward: true
2122
statuses:
2223
- type: project
2324
target: auto

.env-devel

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ COMPUTATIONAL_BACKEND_DEFAULT_FILE_LINK_TYPE=PRESIGNED
8888
COMPUTATIONAL_BACKEND_ON_DEMAND_CLUSTERS_FILE_LINK_TYPE=PRESIGNED
8989
DIRECTOR_V2_DEV_FEATURES_ENABLED=0
9090
DIRECTOR_V2_DYNAMIC_SCHEDULER_CLOSE_SERVICES_VIA_FRONTEND_WHEN_CREDITS_LIMIT_REACHED=1
91-
DIRECTOR_V2_DYNAMIC_SIDECAR_SLEEP_AFTER_CONTAINER_REMOVAL=0
91+
DIRECTOR_V2_DYNAMIC_SIDECAR_SLEEP_AFTER_CONTAINER_REMOVAL=PT0S
9292
DIRECTOR_V2_GENERIC_RESOURCE_PLACEMENT_CONSTRAINTS_SUBSTITUTIONS='{}'
9393
DIRECTOR_V2_HOST=director-v2
9494
DIRECTOR_V2_LOGLEVEL=INFO
@@ -108,7 +108,7 @@ DYNAMIC_SIDECAR_API_SAVE_RESTORE_STATE_TIMEOUT=3600
108108
# DIRECTOR_V2 ----
109109
DYNAMIC_SCHEDULER_LOGLEVEL=DEBUG
110110
DYNAMIC_SCHEDULER_PROFILING=1
111-
DYNAMIC_SCHEDULER_STOP_SERVICE_TIMEOUT=3600
111+
DYNAMIC_SCHEDULER_STOP_SERVICE_TIMEOUT=PT1H
112112

113113
FUNCTION_SERVICES_AUTHORS='{"UN": {"name": "Unknown", "email": "[email protected]", "affiliation": "unknown"}}'
114114

.github/workflows/ci-testing-deploy.yml

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,51 @@ jobs:
450450
with:
451451
token: ${{ secrets.CODECOV_TOKEN }}
452452

453+
unit-test-webserver-04:
454+
needs: changes
455+
if: ${{ needs.changes.outputs.webserver == 'true' || github.event_name == 'push' }}
456+
timeout-minutes: 25 # if this timeout gets too small, then split the tests
457+
name: "[unit] webserver 04"
458+
runs-on: ${{ matrix.os }}
459+
strategy:
460+
matrix:
461+
python: ["3.11"]
462+
os: [ubuntu-22.04]
463+
fail-fast: false
464+
steps:
465+
- uses: actions/checkout@v4
466+
- name: setup docker buildx
467+
id: buildx
468+
uses: docker/setup-buildx-action@v3
469+
with:
470+
driver: docker-container
471+
- name: setup python environment
472+
uses: actions/setup-python@v5
473+
with:
474+
python-version: ${{ matrix.python }}
475+
- name: install uv
476+
uses: astral-sh/setup-uv@v3
477+
with:
478+
version: "0.4.x"
479+
enable-cache: false
480+
cache-dependency-glob: "**/web/server/requirements/ci.txt"
481+
- name: show system version
482+
run: ./ci/helpers/show_system_versions.bash
483+
- name: install webserver
484+
run: ./ci/github/unit-testing/webserver.bash install
485+
- name: test
486+
run: ./ci/github/unit-testing/webserver.bash test_with_db 04
487+
- uses: codecov/[email protected]
488+
env:
489+
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
490+
with:
491+
flags: unittests #optional
492+
- name: Upload test results to Codecov
493+
if: ${{ !cancelled() }}
494+
uses: codecov/test-results-action@v1
495+
with:
496+
token: ${{ secrets.CODECOV_TOKEN }}
497+
453498
unit-test-storage:
454499
needs: changes
455500
if: ${{ needs.changes.outputs.storage == 'true' || github.event_name == 'push' }}
@@ -1875,6 +1920,7 @@ jobs:
18751920
unit-test-webserver-01,
18761921
unit-test-webserver-02,
18771922
unit-test-webserver-03,
1923+
unit-test-webserver-04,
18781924
]
18791925
runs-on: ubuntu-latest
18801926
steps:

api/specs/web-server/_groups.py

Lines changed: 66 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,21 @@
88

99
from fastapi import APIRouter, Depends, status
1010
from models_library.api_schemas_webserver.groups import (
11-
AllUsersGroups,
11+
GroupCreate,
12+
GroupGet,
13+
GroupUpdate,
1214
GroupUserGet,
13-
UsersGroup,
15+
MyGroupsGet,
1416
)
1517
from models_library.generics import Envelope
16-
from models_library.users import GroupID, UserID
1718
from simcore_service_webserver._meta import API_VTAG
18-
from simcore_service_webserver.groups._handlers import _ClassifiersQuery
19+
from simcore_service_webserver.groups._handlers import (
20+
GroupUserAdd,
21+
GroupUserUpdate,
22+
_ClassifiersQuery,
23+
_GroupPathParams,
24+
_GroupUserPathParams,
25+
)
1926
from simcore_service_webserver.scicrunch.models import ResearchResource, ResourceHit
2027

2128
router = APIRouter(
@@ -28,106 +35,130 @@
2835

2936
@router.get(
3037
"/groups",
31-
response_model=Envelope[AllUsersGroups],
38+
response_model=Envelope[MyGroupsGet],
3239
)
3340
async def list_groups():
34-
...
41+
"""
42+
List all groups (organizations, primary, everyone and products) I belong to
43+
"""
3544

3645

3746
@router.post(
3847
"/groups",
39-
response_model=Envelope[UsersGroup],
48+
response_model=Envelope[GroupGet],
4049
status_code=status.HTTP_201_CREATED,
4150
)
42-
async def create_group():
43-
...
51+
async def create_group(_b: GroupCreate):
52+
"""
53+
Creates an organization group
54+
"""
4455

4556

4657
@router.get(
4758
"/groups/{gid}",
48-
response_model=Envelope[UsersGroup],
59+
response_model=Envelope[GroupGet],
4960
)
50-
async def get_group(gid: GroupID):
51-
...
61+
async def get_group(_p: Annotated[_GroupPathParams, Depends()]):
62+
"""
63+
Get an organization group
64+
"""
5265

5366

5467
@router.patch(
5568
"/groups/{gid}",
56-
response_model=Envelope[UsersGroup],
69+
response_model=Envelope[GroupGet],
5770
)
58-
async def update_group(gid: GroupID, _update: UsersGroup):
59-
...
71+
async def update_group(
72+
_p: Annotated[_GroupPathParams, Depends()],
73+
_b: GroupUpdate,
74+
):
75+
"""
76+
Updates organization groups
77+
"""
6078

6179

6280
@router.delete(
6381
"/groups/{gid}",
6482
status_code=status.HTTP_204_NO_CONTENT,
6583
)
66-
async def delete_group(gid: GroupID):
67-
...
84+
async def delete_group(_p: Annotated[_GroupPathParams, Depends()]):
85+
"""
86+
Deletes organization groups
87+
"""
6888

6989

7090
@router.get(
7191
"/groups/{gid}/users",
7292
response_model=Envelope[list[GroupUserGet]],
7393
)
74-
async def get_group_users(gid: GroupID):
75-
...
94+
async def get_all_group_users(_p: Annotated[_GroupPathParams, Depends()]):
95+
"""
96+
Gets users in organization groups
97+
"""
7698

7799

78100
@router.post(
79101
"/groups/{gid}/users",
80102
status_code=status.HTTP_204_NO_CONTENT,
81103
)
82104
async def add_group_user(
83-
gid: GroupID,
84-
_new: GroupUserGet,
105+
_p: Annotated[_GroupPathParams, Depends()],
106+
_b: GroupUserAdd,
85107
):
86-
...
108+
"""
109+
Adds a user to an organization group
110+
"""
87111

88112

89113
@router.get(
90114
"/groups/{gid}/users/{uid}",
91115
response_model=Envelope[GroupUserGet],
92116
)
93117
async def get_group_user(
94-
gid: GroupID,
95-
uid: UserID,
118+
_p: Annotated[_GroupUserPathParams, Depends()],
96119
):
97-
...
120+
"""
121+
Gets specific user in an organization group
122+
"""
98123

99124

100125
@router.patch(
101126
"/groups/{gid}/users/{uid}",
102127
response_model=Envelope[GroupUserGet],
103128
)
104129
async def update_group_user(
105-
gid: GroupID,
106-
uid: UserID,
107-
_update: GroupUserGet,
130+
_p: Annotated[_GroupUserPathParams, Depends()],
131+
_b: GroupUserUpdate,
108132
):
109-
# FIXME: update type
110-
...
133+
"""
134+
Updates user (access-rights) to an organization group
135+
"""
111136

112137

113138
@router.delete(
114139
"/groups/{gid}/users/{uid}",
115140
status_code=status.HTTP_204_NO_CONTENT,
116141
)
117142
async def delete_group_user(
118-
gid: GroupID,
119-
uid: UserID,
143+
_p: Annotated[_GroupUserPathParams, Depends()],
120144
):
121-
...
145+
"""
146+
Removes a user from an organization group
147+
"""
148+
149+
150+
#
151+
# Classifiers
152+
#
122153

123154

124155
@router.get(
125156
"/groups/{gid}/classifiers",
126157
response_model=Envelope[dict[str, Any]],
127158
)
128159
async def get_group_classifiers(
129-
gid: GroupID,
130-
_query: Annotated[_ClassifiersQuery, Depends()],
160+
_p: Annotated[_GroupPathParams, Depends()],
161+
_q: Annotated[_ClassifiersQuery, Depends()],
131162
):
132163
...
133164

packages/aws-library/requirements/_base.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ aiocache
1111
arrow
1212
pydantic[email]
1313
types-aiobotocore[ec2,s3,ssm]
14+
opentelemetry-instrumentation-botocore
1415
sh

packages/aws-library/requirements/_base.txt

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ arrow==1.3.0
4444
# -r requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/_base.in
4545
# -r requirements/../../../packages/service-library/requirements/_base.in
4646
# -r requirements/_base.in
47+
async-timeout==4.0.3
48+
# via redis
4749
attrs==24.2.0
4850
# via
4951
# aiohttp
@@ -127,7 +129,10 @@ opentelemetry-api==1.27.0
127129
# opentelemetry-exporter-otlp-proto-grpc
128130
# opentelemetry-exporter-otlp-proto-http
129131
# opentelemetry-instrumentation
132+
# opentelemetry-instrumentation-botocore
133+
# opentelemetry-instrumentation-redis
130134
# opentelemetry-instrumentation-requests
135+
# opentelemetry-propagator-aws-xray
131136
# opentelemetry-sdk
132137
# opentelemetry-semantic-conventions
133138
opentelemetry-exporter-otlp==1.27.0
@@ -141,9 +146,18 @@ opentelemetry-exporter-otlp-proto-grpc==1.27.0
141146
opentelemetry-exporter-otlp-proto-http==1.27.0
142147
# via opentelemetry-exporter-otlp
143148
opentelemetry-instrumentation==0.48b0
144-
# via opentelemetry-instrumentation-requests
149+
# via
150+
# opentelemetry-instrumentation-botocore
151+
# opentelemetry-instrumentation-redis
152+
# opentelemetry-instrumentation-requests
153+
opentelemetry-instrumentation-botocore==0.48b0
154+
# via -r requirements/_base.in
155+
opentelemetry-instrumentation-redis==0.48b0
156+
# via -r requirements/../../../packages/service-library/requirements/_base.in
145157
opentelemetry-instrumentation-requests==0.48b0
146158
# via -r requirements/../../../packages/service-library/requirements/_base.in
159+
opentelemetry-propagator-aws-xray==1.0.2
160+
# via opentelemetry-instrumentation-botocore
147161
opentelemetry-proto==1.27.0
148162
# via
149163
# opentelemetry-exporter-otlp-proto-common
@@ -156,6 +170,8 @@ opentelemetry-sdk==1.27.0
156170
# opentelemetry-exporter-otlp-proto-http
157171
opentelemetry-semantic-conventions==0.48b0
158172
# via
173+
# opentelemetry-instrumentation-botocore
174+
# opentelemetry-instrumentation-redis
159175
# opentelemetry-instrumentation-requests
160176
# opentelemetry-sdk
161177
opentelemetry-util-http==0.48b0
@@ -297,6 +313,7 @@ wrapt==1.16.0
297313
# aiobotocore
298314
# deprecated
299315
# opentelemetry-instrumentation
316+
# opentelemetry-instrumentation-redis
300317
yarl==1.12.1
301318
# via
302319
# aio-pika

0 commit comments

Comments
 (0)