|
1 | 1 | import re |
| 2 | +from types import MappingProxyType |
2 | 3 | from typing import Final |
3 | 4 |
|
4 | 5 | from models_library.services_enums import ServiceType |
|
14 | 15 | FILENAME_RE = r".+" |
15 | 16 |
|
16 | 17 |
|
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 | + |
18 | 24 | 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_.-]*/)*" |
22 | 27 | r"(?P<name>[a-z0-9-_]+[a-z0-9])$" |
23 | 28 | ) |
24 | | -# e.g. simcore%2Fservices%2Fcomp%2Fopencor |
25 | 29 | 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)?" |
29 | 32 | r"(?P<name>[a-z0-9-_]+[a-z0-9])$" |
30 | 33 | ) |
31 | 34 |
|
32 | | -# Add key prefixes for dynamic and computational services |
33 | | -DYNAMIC_SERVICE_KEY_PREFIX: Final[str] = "simcore/services/dynamic" |
34 | 35 | DYNAMIC_SERVICE_KEY_RE: Final[re.Pattern[str]] = re.compile( |
35 | 36 | rf"^{DYNAMIC_SERVICE_KEY_PREFIX}/" |
36 | 37 | r"(?P<subdir>[a-z0-9][a-z0-9_.-]*/)*" |
37 | 38 | r"(?P<name>[a-z0-9-_]+[a-z0-9])$" |
38 | 39 | ) |
39 | 40 |
|
40 | | -COMPUTATIONAL_SERVICE_KEY_PREFIX: Final[str] = "simcore/services/comp" |
41 | 41 | COMPUTATIONAL_SERVICE_KEY_RE: Final[re.Pattern[str]] = re.compile( |
42 | 42 | rf"^{COMPUTATIONAL_SERVICE_KEY_PREFIX}/" |
43 | 43 | r"(?P<subdir>[a-z0-9][a-z0-9_.-]*/)*" |
44 | 44 | r"(?P<name>[a-z0-9-_]+[a-z0-9])$" |
45 | 45 | ) |
46 | 46 |
|
47 | | -FRONTEND_SERVICE_KEY_PREFIX: Final[str] = "simcore/services/frontend" |
48 | | - |
49 | 47 | FRONTEND_SERVICE_KEY_RE: Final[re.Pattern[str]] = re.compile( |
50 | 48 | rf"^{FRONTEND_SERVICE_KEY_PREFIX}/" |
51 | 49 | r"(?P<subdir>[a-z0-9][a-z0-9_.-]*/)*" |
52 | 50 | r"(?P<name>[a-z0-9-_]+[a-z0-9])$" |
53 | 51 | ) |
54 | 52 |
|
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 '/'" |
0 commit comments