Skip to content

Commit 9c6e533

Browse files
committed
✨ Add service key prefixes and refactor regex patterns for dynamic and computational services
1 parent fbc4d42 commit 9c6e533

File tree

2 files changed

+29
-21
lines changed

2 files changed

+29
-21
lines changed
Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import re
2+
from types import MappingProxyType
23
from typing import Final
34

45
from models_library.services_enums import ServiceType
@@ -14,47 +15,50 @@
1415
FILENAME_RE = r".+"
1516

1617

17-
# e.g. simcore/services/comp/opencor
18+
# Add key prefixes for dynamic and computational services
19+
DYNAMIC_SERVICE_KEY_PREFIX: Final[str] = "simcore/services/dynamic"
20+
COMPUTATIONAL_SERVICE_KEY_PREFIX: Final[str] = "simcore/services/comp"
21+
FRONTEND_SERVICE_KEY_PREFIX: Final[str] = "simcore/services/frontend"
22+
23+
1824
SERVICE_KEY_RE: Final[re.Pattern[str]] = re.compile(
19-
r"^simcore/services/"
20-
r"(?P<type>(comp|dynamic|frontend))/"
21-
r"(?P<subdir>[a-z0-9][a-z0-9_.-]*/)*"
25+
rf"^(?P<key_prefix>{COMPUTATIONAL_SERVICE_KEY_PREFIX}|{DYNAMIC_SERVICE_KEY_PREFIX}|{FRONTEND_SERVICE_KEY_PREFIX})"
26+
r"/(?P<subdir>[a-z0-9][a-z0-9_.-]*/)*"
2227
r"(?P<name>[a-z0-9-_]+[a-z0-9])$"
2328
)
24-
# e.g. simcore%2Fservices%2Fcomp%2Fopencor
2529
SERVICE_ENCODED_KEY_RE: Final[re.Pattern[str]] = re.compile(
26-
r"^simcore%2Fservices%2F"
27-
r"(?P<type>(comp|dynamic|frontend))%2F"
28-
r"(?P<subdir>[a-z0-9][a-z0-9_.-]*%2F)*"
30+
rf"^(?P<key_prefix>{COMPUTATIONAL_SERVICE_KEY_PREFIX.replace('/', '%2F')}|{DYNAMIC_SERVICE_KEY_PREFIX.replace('/', '%2F')}|{FRONTEND_SERVICE_KEY_PREFIX.replace('/', '%2F')})"
31+
r"(?P<subdir>(%2F[a-z0-9][a-z0-9_.-]*)*%2F)?"
2932
r"(?P<name>[a-z0-9-_]+[a-z0-9])$"
3033
)
3134

32-
# Add key prefixes for dynamic and computational services
33-
DYNAMIC_SERVICE_KEY_PREFIX: Final[str] = "simcore/services/dynamic"
3435
DYNAMIC_SERVICE_KEY_RE: Final[re.Pattern[str]] = re.compile(
3536
rf"^{DYNAMIC_SERVICE_KEY_PREFIX}/"
3637
r"(?P<subdir>[a-z0-9][a-z0-9_.-]*/)*"
3738
r"(?P<name>[a-z0-9-_]+[a-z0-9])$"
3839
)
3940

40-
COMPUTATIONAL_SERVICE_KEY_PREFIX: Final[str] = "simcore/services/comp"
4141
COMPUTATIONAL_SERVICE_KEY_RE: Final[re.Pattern[str]] = re.compile(
4242
rf"^{COMPUTATIONAL_SERVICE_KEY_PREFIX}/"
4343
r"(?P<subdir>[a-z0-9][a-z0-9_.-]*/)*"
4444
r"(?P<name>[a-z0-9-_]+[a-z0-9])$"
4545
)
4646

47-
FRONTEND_SERVICE_KEY_PREFIX: Final[str] = "simcore/services/frontend"
48-
4947
FRONTEND_SERVICE_KEY_RE: Final[re.Pattern[str]] = re.compile(
5048
rf"^{FRONTEND_SERVICE_KEY_PREFIX}/"
5149
r"(?P<subdir>[a-z0-9][a-z0-9_.-]*/)*"
5250
r"(?P<name>[a-z0-9-_]+[a-z0-9])$"
5351
)
5452

55-
# Add service type prefixes mapping (moved from _services_sql.py)
56-
SERVICE_TYPE_PREFIXES = {
57-
ServiceType.COMPUTATIONAL: COMPUTATIONAL_SERVICE_KEY_PREFIX,
58-
ServiceType.DYNAMIC: DYNAMIC_SERVICE_KEY_PREFIX,
59-
ServiceType.FRONTEND: FRONTEND_SERVICE_KEY_PREFIX,
60-
}
53+
54+
SERVICE_TYPE_PREFIXES = MappingProxyType(
55+
{
56+
ServiceType.COMPUTATIONAL: COMPUTATIONAL_SERVICE_KEY_PREFIX,
57+
ServiceType.DYNAMIC: DYNAMIC_SERVICE_KEY_PREFIX,
58+
ServiceType.FRONTEND: FRONTEND_SERVICE_KEY_PREFIX,
59+
}
60+
)
61+
62+
assert all( # nosec
63+
not prefix.endswith("/") for prefix in SERVICE_TYPE_PREFIXES.values()
64+
), "Service type prefixes must not end with '/'"

services/web/server/src/simcore_service_webserver/studies_dispatcher/_catalog.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
from aiopg.sa.engine import Engine
1010
from models_library.groups import EVERYONE_GROUP_ID
1111
from models_library.services import ServiceKey, ServiceVersion
12+
from models_library.services_regex import (
13+
COMPUTATIONAL_SERVICE_KEY_PREFIX,
14+
DYNAMIC_SERVICE_KEY_PREFIX,
15+
)
1216
from pydantic import HttpUrl, PositiveInt, TypeAdapter, ValidationError
1317
from servicelib.logging_utils import log_decorator
1418
from simcore_postgres_database.models.services import (
@@ -92,8 +96,8 @@ async def iter_latest_product_services(
9296
)
9397
.where(
9498
(
95-
services_meta_data.c.key.like("simcore/services/dynamic/%%")
96-
| (services_meta_data.c.key.like("simcore/services/comp/%%"))
99+
services_meta_data.c.key.like(f"{DYNAMIC_SERVICE_KEY_PREFIX}/%")
100+
| services_meta_data.c.key.like(f"{COMPUTATIONAL_SERVICE_KEY_PREFIX}/%")
97101
)
98102
& (services_meta_data.c.deprecated.is_(None))
99103
& (services_access_rights.c.gid == EVERYONE_GROUP_ID)

0 commit comments

Comments
 (0)