Skip to content

Commit de91cf6

Browse files
authored
Bugfix/2038/groups breaks list services (#2039)
* fix regex to prevent " in the name of servicess * skip frontend services other than file-picker
1 parent dd551e8 commit de91cf6

File tree

5 files changed

+79
-15
lines changed

5 files changed

+79
-15
lines changed

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@
1111

1212
from .basic_regex import VERSION_RE
1313

14-
15-
SERVICE_KEY_RE = r"^(simcore)/(services)/(comp|dynamic|frontend)(/[^\s/]+)+$"
14+
SERVICE_KEY_RE = r"^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$"
1615
KEY_RE = SERVICE_KEY_RE # TODO: deprecate this global constant by SERVICE_KEY_RE
1716

1817
PROPERTY_TYPE_RE = r"^(number|integer|boolean|string|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$"

services/director-v2/src/simcore_service_director_v2/modules/db/repositories/comp_tasks.py

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import logging
22
from datetime import datetime
3-
from typing import List
3+
from typing import List, Optional
44

55
import sqlalchemy as sa
66
from models_library.projects import ProjectID
@@ -27,30 +27,32 @@
2727

2828

2929
@log_decorator(logger=logger)
30-
def _get_fake_service_details(service: ServiceKeyVersion) -> ServiceDockerData:
30+
def _get_fake_service_details(
31+
service: ServiceKeyVersion,
32+
) -> Optional[ServiceDockerData]:
33+
3134
if "file-picker" in service.key:
3235
file_picker_outputs = {
3336
"outFile": {
34-
"label": "the output",
37+
"label": "File",
3538
"displayOrder": 0,
36-
"description": "a file",
39+
"description": "Chosen File",
3740
"type": "data:*/*",
3841
}
3942
}
40-
file_picker_type = ServiceType.FRONTEND
4143
return ServiceDockerData(
4244
**service.dict(),
43-
name="file-picker",
44-
description="file-picks",
45+
name="File Picker",
46+
description="File Picker",
4547
authors=[
46-
Author(name="ITIS", email="[email protected]", affiliation="IT'IS")
48+
Author(name="Odei Maiz", email="[email protected]", affiliation="IT'IS")
4749
],
48-
contact="[email protected]",
50+
contact="[email protected]",
4951
inputs={},
5052
outputs=file_picker_outputs,
51-
type=file_picker_type,
53+
type=ServiceType.FRONTEND,
5254
)
53-
raise ValueError("")
55+
return None
5456

5557

5658
class CompTasksRepository(BaseRepository):
@@ -101,6 +103,9 @@ async def upsert_tasks_from_project(
101103
node_extras: ServiceExtras = await director_client.get_service_extras(
102104
service_key_version
103105
)
106+
if not node_details:
107+
continue
108+
104109
requires_mpi = False
105110
requires_gpu = False
106111
if node_extras:

services/director-v2/tests/mocks/fake_service.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "laborum Lorem ullamco minim",
33
"description": "qui Lorem quis ut occaecat",
4-
"key": "simcore/services/frontend/I2HZjlT;/@.c!hG~/u`9+c#W,/L/^XQd3z@T\"o/>Wpe@N*quV",
4+
"key": "simcore/services/frontend/sdflkjslfk---2342___23423/sdfkgjdlfkgd/sdkfjsdflgkj",
55
"version": "844863.7218662994.388740048-9.127142757Xir8O6z.uPzMFCH.3399Y.214.7112.4935048219Qh4-k9LZJAA.0.18549123X+55gl.av.enudGN6.QszV6RAx3eF.VFWA3Vv7oo3.WV5Zd.K22.idGnQwZMb",
66
"type": "frontend",
77
"authors": [

services/director-v2/tests/mocks/fake_task.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
},
5050
"inputs": {},
5151
"image": {
52-
"name": "simcore/services/dynamic/u]=HS,C[vOK/_9%;j%&7#/3iY,hff5qL/--<R)M+YM\"/z+:DP5VS/7\\'1_V]\";/B/hB#?]w>V/up#`/N5/YHv",
52+
"name": "simcore/services/dynamic/sdfkljhsdffsd121231/sdfkjhsdjf/12kdfsjlsj98u0923----dsdljklsd_",
5353
"tag": "0.5824.51",
5454
"requires_gpu": false,
5555
"requires_mpi": true
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# pylint:disable=unused-variable
2+
# pylint:disable=unused-argument
3+
# pylint:disable=redefined-outer-name
4+
# pylint:disable=protected-access
5+
# pylint:disable=broad-except
6+
7+
import re
8+
from pathlib import Path
9+
from typing import Pattern, Set
10+
11+
import pytest
12+
from models_library.services import SERVICE_KEY_RE, ServiceDockerData, ServiceKeyVersion
13+
from simcore_service_director_v2.modules.db.repositories.comp_tasks import (
14+
_get_fake_service_details,
15+
)
16+
17+
18+
@pytest.fixture(scope="session")
19+
def frontend_client_dir(osparc_simcore_root_dir: Path) -> Path:
20+
frontend_client_dir = osparc_simcore_root_dir / "services" / "web" / "client"
21+
assert frontend_client_dir.exists()
22+
return frontend_client_dir
23+
24+
25+
@pytest.fixture(scope="session")
26+
def frontend_service_pattern() -> Pattern:
27+
frontend_service_re = r"(simcore)/(services)/(frontend)(/[\w/-]+)+"
28+
dummy_service = "simcore/services/frontend/file-picker"
29+
assert re.match(
30+
SERVICE_KEY_RE, dummy_service
31+
), f"Service key regex changed, please change frontend_service_re accordingly: currently is {frontend_service_re} and service re is {SERVICE_KEY_RE}"
32+
return re.compile(frontend_service_re)
33+
34+
35+
@pytest.fixture(scope="session")
36+
def all_frontend_services(
37+
frontend_service_pattern: Pattern, frontend_client_dir: Path
38+
) -> Set[str]:
39+
40+
frontend_services: Set[str] = set()
41+
for f in frontend_client_dir.glob("**/*.js"):
42+
for line in f.open("r"):
43+
for match in re.finditer(frontend_service_pattern, line):
44+
frontend_services.add(match.group())
45+
46+
return frontend_services
47+
48+
49+
def test_only_filepicker_service_gets_some_service_details(
50+
all_frontend_services: Set[str],
51+
):
52+
for frontend_service in all_frontend_services:
53+
service_key_version = ServiceKeyVersion(key=frontend_service, version="24.34.5")
54+
# check that it does not assert
55+
service_docker_data: ServiceDockerData = _get_fake_service_details(
56+
service_key_version
57+
)
58+
if service_docker_data:
59+
assert service_docker_data.key == "simcore/services/frontend/file-picker"
60+
assert service_docker_data.outputs["outFile"].property_type == "data:*/*"

0 commit comments

Comments
 (0)