Skip to content

Commit b5239b7

Browse files
committed
Merge branch 'master' into upgrade-api-server-dependencies
2 parents b24e041 + 661f229 commit b5239b7

File tree

70 files changed

+954
-676
lines changed

Some content is hidden

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

70 files changed

+954
-676
lines changed

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2596,9 +2596,7 @@ jobs:
25962596
system-test-e2e-playwright,
25972597
system-test-environment-setup,
25982598
system-test-public-api,
2599-
system-test-swarm-deploy,
2600-
system-api-specs,
2601-
system-backwards-compatibility
2599+
system-test-swarm-deploy
26022600
]
26032601
runs-on: ubuntu-latest
26042602
steps:
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from typing import Any
2+
3+
4+
class UnSet:
5+
VALUE: "UnSet"
6+
7+
8+
UnSet.VALUE = UnSet()
9+
10+
11+
def as_dict_exclude_unset(**params) -> dict[str, Any]:
12+
return {k: v for k, v in params.items() if not isinstance(v, UnSet)}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from typing import Any
2+
3+
from common_library.unset import UnSet, as_dict_exclude_unset
4+
5+
6+
def test_as_dict_exclude_unset():
7+
def f(
8+
par1: str | UnSet = UnSet.VALUE, par2: int | UnSet = UnSet.VALUE
9+
) -> dict[str, Any]:
10+
return as_dict_exclude_unset(par1=par1, par2=par2)
11+
12+
assert f() == {}
13+
assert f(par1="hi") == {"par1": "hi"}
14+
assert f(par2=4) == {"par2": 4}
15+
assert f(par1="hi", par2=4) == {"par1": "hi", "par2": 4}

packages/models-library/src/models_library/api_schemas_directorv2/dynamic_services_service.py

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -92,32 +92,33 @@ class RunningDynamicServiceDetails(ServiceDetails):
9292
ignored_types=(cached_property,),
9393
json_schema_extra={
9494
"examples": [
95+
# legacy
9596
{
96-
"boot_type": "V0",
97-
"key": "simcore/services/dynamic/3dviewer",
98-
"version": "2.4.5",
99-
"user_id": 234,
100-
"project_id": "dd1d04d9-d704-4f7e-8f0f-1ca60cc771fe",
101-
"uuid": "75c7f3f4-18f9-4678-8610-54a2ade78eaa",
102-
"basepath": "/x/75c7f3f4-18f9-4678-8610-54a2ade78eaa",
103-
"host": "3dviewer_75c7f3f4-18f9-4678-8610-54a2ade78eaa",
104-
"internal_port": 8888,
105-
"state": "running",
106-
"message": "",
107-
"node_uuid": "75c7f3f4-18f9-4678-8610-54a2ade78eaa",
97+
"service_key": "simcore/services/dynamic/raw-graphs",
98+
"service_version": "2.10.6",
99+
"user_id": 1,
100+
"project_id": "32fb4eb6-ab30-11ef-9ee4-0242ac140008",
101+
"service_uuid": "0cd049ba-cd6b-4a12-b416-a50c9bc8e7bb",
102+
"service_basepath": "/x/0cd049ba-cd6b-4a12-b416-a50c9bc8e7bb",
103+
"service_host": "raw-graphs_0cd049ba-cd6b-4a12-b416-a50c9bc8e7bb",
104+
"service_port": 4000,
105+
"published_port": None,
106+
"entry_point": "",
107+
"service_state": "running",
108+
"service_message": "",
108109
},
110+
# new style
109111
{
112+
"service_key": "simcore/services/dynamic/jupyter-math",
113+
"service_version": "3.0.3",
114+
"user_id": 1,
115+
"project_id": "32fb4eb6-ab30-11ef-9ee4-0242ac140008",
116+
"service_uuid": "6e3cad3a-eb64-43de-b476-9ac3c413fd9c",
110117
"boot_type": "V2",
111-
"key": "simcore/services/dynamic/dy-static-file-viewer-dynamic-sidecar",
112-
"version": "1.0.0",
113-
"user_id": 234,
114-
"project_id": "dd1d04d9-d704-4f7e-8f0f-1ca60cc771fe",
115-
"uuid": "75c7f3f4-18f9-4678-8610-54a2ade78eaa",
116-
"host": "dy-sidecar_75c7f3f4-18f9-4678-8610-54a2ade78eaa",
117-
"internal_port": 80,
118-
"state": "running",
119-
"message": "",
120-
"node_uuid": "75c7f3f4-18f9-4678-8610-54a2ade78eaa",
118+
"service_host": "dy-sidecar_6e3cad3a-eb64-43de-b476-9ac3c413fd9c",
119+
"service_port": 8888,
120+
"service_state": "running",
121+
"service_message": "",
121122
},
122123
]
123124
},

packages/service-library/src/servicelib/rabbitmq/rpc_interfaces/dynamic_scheduler/services.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
DynamicServiceStop,
99
)
1010
from models_library.api_schemas_webserver.projects_nodes import NodeGet, NodeGetIdle
11+
from models_library.projects import ProjectID
1112
from models_library.projects_nodes_io import NodeID
1213
from models_library.rabbitmq_basic_types import RPCMethodName
14+
from models_library.users import UserID
1315
from pydantic import NonNegativeInt, TypeAdapter
1416
from servicelib.logging_utils import log_decorator
1517
from servicelib.rabbitmq import RabbitMQRPCClient
@@ -29,6 +31,24 @@
2931
_RPC_METHOD_NAME_ADAPTER: TypeAdapter[RPCMethodName] = TypeAdapter(RPCMethodName)
3032

3133

34+
@log_decorator(_logger, level=logging.DEBUG)
35+
async def list_tracked_dynamic_services(
36+
rabbitmq_rpc_client: RabbitMQRPCClient,
37+
*,
38+
user_id: UserID | None = None,
39+
project_id: ProjectID | None = None,
40+
) -> list[DynamicServiceGet]:
41+
result = await rabbitmq_rpc_client.request(
42+
DYNAMIC_SCHEDULER_RPC_NAMESPACE,
43+
_RPC_METHOD_NAME_ADAPTER.validate_python("list_tracked_dynamic_services"),
44+
user_id=user_id,
45+
project_id=project_id,
46+
timeout_s=_RPC_DEFAULT_TIMEOUT_S,
47+
)
48+
assert isinstance(result, list) # nosec
49+
return result
50+
51+
3252
@log_decorator(_logger, level=logging.DEBUG)
3353
async def get_service_status(
3454
rabbitmq_rpc_client: RabbitMQRPCClient, *, node_id: NodeID

requirements/constraints.txt

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -43,32 +43,15 @@ pytest-asyncio<0.24
4343
#
4444
# Bugs
4545
#
46-
46+
httpx!=0.28.0 # Waiting for fix in respx: https://github.com/lundberg/respx/pull/278
4747

4848

4949

5050
#
5151
# Compatibility/coordination -----------------------------------------------------------------------------------------
5252
#
53-
54-
5553
pydantic>=2.10.0 # Avoids inter-version compatibility serialization errors as: _pickle.UnpicklingError: NEWOBJ class argument must be a type, not _AnnotatedAlias
5654

57-
# constraint since https://github.com/MagicStack/uvloop/releases/tag/v0.15.0: drops support for 3.5/3.6 Feb.2021
58-
uvloop<0.15.0 ; python_version < '3.7'
59-
60-
# All backports libraries add environ markers
61-
# NOTE: If >second dependency, this will annotate a marker in the compiled requirements file
62-
#
63-
async-exit-stack ; python_version < '3.7'
64-
async-generator ; python_version < '3.7'
65-
contextvars ; python_version < '3.7'
66-
dataclasses ; python_version < '3.7'
67-
importlib-metadata ; python_version < '3.8'
68-
importlib-resources ; python_version < '3.9'
69-
typing-extensions ; python_version < '3.7'
70-
zipp ; python_version < '3.7'
71-
7255

7356

7457
#

0 commit comments

Comments
 (0)