Skip to content

Commit b537757

Browse files
committed
merge master into bugfix-healthcheck-rabbitmq-cancelled-connection
2 parents bad9eda + 0781e63 commit b537757

File tree

159 files changed

+3524
-1909
lines changed

Some content is hidden

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

159 files changed

+3524
-1909
lines changed

api/specs/web-server/_folders.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,28 @@ async def list_folders(
6363
...
6464

6565

66+
@router.get(
67+
"/folders:search",
68+
response_model=Envelope[list[FolderGet]],
69+
)
70+
async def list_folders_full_search(
71+
params: Annotated[PageQueryParameters, Depends()],
72+
text: str | None = None,
73+
order_by: Annotated[
74+
Json,
75+
Query(
76+
description="Order by field (modified_at|name|description) and direction (asc|desc). The default sorting order is ascending.",
77+
example='{"field": "name", "direction": "desc"}',
78+
),
79+
] = '{"field": "modified_at", "direction": "desc"}',
80+
filters: Annotated[
81+
Json | None,
82+
Query(description=FolderFilters.schema_json(indent=1)),
83+
] = None,
84+
):
85+
...
86+
87+
6688
@router.get(
6789
"/folders/{folder_id}",
6890
response_model=Envelope[FolderGet],

packages/aws-library/requirements/_base.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,6 @@ 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
4947
attrs==24.2.0
5048
# via
5149
# aiohttp

packages/models-library/src/models_library/folders.py

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,42 @@
11
from datetime import datetime
2+
from enum import auto
23
from typing import TypeAlias
34

4-
from models_library.users import GroupID, UserID
5-
from models_library.workspaces import WorkspaceID
6-
from pydantic import BaseModel, Field, PositiveInt
5+
from pydantic import BaseModel, Field, PositiveInt, validator
6+
7+
from .access_rights import AccessRights
8+
from .users import GroupID, UserID
9+
from .utils.enums import StrAutoEnum
10+
from .workspaces import WorkspaceID
711

812
FolderID: TypeAlias = PositiveInt
913

1014

15+
class FolderScope(StrAutoEnum):
16+
ROOT = auto()
17+
SPECIFIC = auto()
18+
ALL = auto()
19+
20+
21+
class FolderQuery(BaseModel):
22+
folder_scope: FolderScope
23+
folder_id: PositiveInt | None = None
24+
25+
@validator("folder_id", pre=True, always=True)
26+
@classmethod
27+
def validate_folder_id(cls, value, values):
28+
scope = values.get("folder_scope")
29+
if scope == FolderScope.SPECIFIC and value is None:
30+
raise ValueError(
31+
"folder_id must be provided when folder_scope is SPECIFIC."
32+
)
33+
if scope != FolderScope.SPECIFIC and value is not None:
34+
raise ValueError(
35+
"folder_id should be None when folder_scope is not SPECIFIC."
36+
)
37+
return value
38+
39+
1140
#
1241
# DB
1342
#
@@ -38,3 +67,10 @@ class FolderDB(BaseModel):
3867

3968
class Config:
4069
orm_mode = True
70+
71+
72+
class UserFolderAccessRightsDB(FolderDB):
73+
my_access_rights: AccessRights
74+
75+
class Config:
76+
orm_mode = True

packages/models-library/src/models_library/workspaces.py

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,41 @@
11
from datetime import datetime
2+
from enum import auto
23
from typing import TypeAlias
34

4-
from models_library.access_rights import AccessRights
5-
from models_library.users import GroupID
6-
from pydantic import BaseModel, Field, PositiveInt
5+
from pydantic import BaseModel, Field, PositiveInt, validator
6+
7+
from .access_rights import AccessRights
8+
from .users import GroupID
9+
from .utils.enums import StrAutoEnum
710

811
WorkspaceID: TypeAlias = PositiveInt
912

1013

14+
class WorkspaceScope(StrAutoEnum):
15+
PRIVATE = auto()
16+
SHARED = auto()
17+
ALL = auto()
18+
19+
20+
class WorkspaceQuery(BaseModel):
21+
workspace_scope: WorkspaceScope
22+
workspace_id: PositiveInt | None = None
23+
24+
@validator("workspace_id", pre=True, always=True)
25+
@classmethod
26+
def validate_workspace_id(cls, value, values):
27+
scope = values.get("workspace_scope")
28+
if scope == WorkspaceScope.SHARED and value is None:
29+
raise ValueError(
30+
"workspace_id must be provided when workspace_scope is SHARED."
31+
)
32+
if scope != WorkspaceScope.SHARED and value is not None:
33+
raise ValueError(
34+
"workspace_id should be None when workspace_scope is not SHARED."
35+
)
36+
return value
37+
38+
1139
#
1240
# DB
1341
#

packages/notifications-library/requirements/_base.txt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ attrs==24.2.0
1616
# referencing
1717
click==8.1.7
1818
# via typer
19+
deprecated==1.2.14
20+
# via
21+
# opentelemetry-api
22+
# opentelemetry-semantic-conventions
1923
dnspython==2.6.1
2024
# via email-validator
2125
email-validator==2.2.0
@@ -26,6 +30,8 @@ idna==3.10
2630
# via
2731
# email-validator
2832
# yarl
33+
importlib-metadata==8.5.0
34+
# via opentelemetry-api
2935
jinja2==3.1.4
3036
# via
3137
# -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt
@@ -54,13 +60,28 @@ mdurl==0.1.2
5460
# via markdown-it-py
5561
multidict==6.1.0
5662
# via yarl
63+
opentelemetry-api==1.28.1
64+
# via
65+
# opentelemetry-instrumentation
66+
# opentelemetry-instrumentation-asyncpg
67+
# opentelemetry-semantic-conventions
68+
opentelemetry-instrumentation==0.49b1
69+
# via opentelemetry-instrumentation-asyncpg
70+
opentelemetry-instrumentation-asyncpg==0.49b1
71+
# via -r requirements/../../../packages/postgres-database/requirements/_base.in
72+
opentelemetry-semantic-conventions==0.49b1
73+
# via
74+
# opentelemetry-instrumentation
75+
# opentelemetry-instrumentation-asyncpg
5776
orjson==3.10.7
5877
# via
5978
# -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt
6079
# -c requirements/../../../packages/postgres-database/requirements/../../../requirements/constraints.txt
6180
# -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt
6281
# -c requirements/../../../requirements/constraints.txt
6382
# -r requirements/../../../packages/models-library/requirements/_base.in
83+
packaging==24.2
84+
# via opentelemetry-instrumentation
6485
psycopg2-binary==2.9.9
6586
# via sqlalchemy
6687
pydantic==1.10.18
@@ -109,5 +130,11 @@ typing-extensions==4.12.2
109130
# alembic
110131
# pydantic
111132
# typer
133+
wrapt==1.16.0
134+
# via
135+
# deprecated
136+
# opentelemetry-instrumentation
112137
yarl==1.12.1
113138
# via -r requirements/../../../packages/postgres-database/requirements/_base.in
139+
zipp==3.21.0
140+
# via importlib-metadata

packages/notifications-library/requirements/_test.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,9 @@ mypy==1.12.0
2828
# via sqlalchemy
2929
mypy-extensions==1.0.0
3030
# via mypy
31-
packaging==24.1
31+
packaging==24.2
3232
# via
33+
# -c requirements/_base.txt
3334
# pytest
3435
# pytest-sugar
3536
pluggy==1.5.0

packages/notifications-library/requirements/_tools.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,9 @@ mypy-extensions==1.0.0
3838
# mypy
3939
nodeenv==1.9.1
4040
# via pre-commit
41-
packaging==24.1
41+
packaging==24.2
4242
# via
43+
# -c requirements/_base.txt
4344
# -c requirements/_test.txt
4445
# black
4546
# build
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
"""add cancellation mark
2+
3+
Revision ID: 8bfe65a5e294
4+
Revises: 5ad02358751a
5+
Create Date: 2024-11-08 14:40:59.266181+00:00
6+
7+
"""
8+
import sqlalchemy as sa
9+
from alembic import op
10+
11+
# revision identifiers, used by Alembic.
12+
revision = "8bfe65a5e294"
13+
down_revision = "5ad02358751a"
14+
branch_labels = None
15+
depends_on = None
16+
17+
18+
def upgrade():
19+
# ### commands auto generated by Alembic - please adjust! ###
20+
op.add_column(
21+
"comp_runs", sa.Column("cancelled", sa.DateTime(timezone=True), nullable=True)
22+
)
23+
# ### end Alembic commands ###
24+
25+
26+
def downgrade():
27+
# ### commands auto generated by Alembic - please adjust! ###
28+
op.drop_column("comp_runs", "cancelled")
29+
# ### end Alembic commands ###

packages/postgres-database/src/simcore_postgres_database/models/comp_runs.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,12 @@
9999
nullable=True,
100100
doc="When the run was finished",
101101
),
102+
sa.Column(
103+
"cancelled",
104+
sa.DateTime(timezone=True),
105+
nullable=True,
106+
doc="If filled, when cancellation was requested",
107+
),
102108
sa.Column("metadata", JSONB, nullable=True, doc="the run optional metadata"),
103109
sa.Column(
104110
"use_on_demand_clusters",
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
def assemble_array_groups(user_group_ids: list[int]) -> str:
2+
return (
3+
"array[]::text[]"
4+
if len(user_group_ids) == 0
5+
else f"""array[{', '.join(f"'{group_id}'" for group_id in user_group_ids)}]"""
6+
)

0 commit comments

Comments
 (0)