|
15 | 15 | FILENAME_RE = r".+" |
16 | 16 |
|
17 | 17 |
|
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 | | - |
| 18 | +SERVICE_TYPE_TO_NAME_MAP = MappingProxyType( |
| 19 | + { |
| 20 | + ServiceType.COMPUTATIONAL: "comp", |
| 21 | + ServiceType.DYNAMIC: "dynamic", |
| 22 | + ServiceType.FRONTEND: "frontend", |
| 23 | + } |
| 24 | +) |
23 | 25 |
|
| 26 | +# e.g. simcore/services/comp/opencor |
24 | 27 | SERVICE_KEY_RE: Final[re.Pattern[str]] = re.compile( |
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_.-]*/)*" |
| 28 | + r"^simcore/services/" |
| 29 | + rf"(?P<type>({ '|'.join(SERVICE_TYPE_TO_NAME_MAP.values()) }))/" |
| 30 | + r"(?P<subdir>[a-z0-9][a-z0-9_.-]*/)*" |
27 | 31 | r"(?P<name>[a-z0-9-_]+[a-z0-9])$" |
28 | 32 | ) |
| 33 | + |
| 34 | +# e.g. simcore%2Fservices%2Fcomp%2Fopencor |
29 | 35 | SERVICE_ENCODED_KEY_RE: Final[re.Pattern[str]] = re.compile( |
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)?" |
| 36 | + r"^simcore%2Fservices%2F" |
| 37 | + rf"(?P<type>({'|'.join(SERVICE_TYPE_TO_NAME_MAP.values())}))%2F" |
| 38 | + r"(?P<subdir>[a-z0-9][a-z0-9_.-]*%2F)*" |
32 | 39 | r"(?P<name>[a-z0-9-_]+[a-z0-9])$" |
33 | 40 | ) |
34 | 41 |
|
35 | 42 |
|
36 | | -DYNAMIC_SERVICE_KEY_RE: Final[re.Pattern[str]] = re.compile( |
37 | | - rf"^{DYNAMIC_SERVICE_KEY_PREFIX}/" |
38 | | - r"(?P<subdir>[a-z0-9][a-z0-9_.-]*/)*" |
39 | | - r"(?P<name>[a-z0-9-_]+[a-z0-9])$" |
40 | | -) |
41 | | -DYNAMIC_SERVICE_KEY_FORMAT: Final[str] = ( |
42 | | - f"{DYNAMIC_SERVICE_KEY_PREFIX}/{{service_name}}" |
43 | | -) |
| 43 | +def create_key_prefix(service_type: ServiceType) -> str: |
| 44 | + return f"simcore/services/{SERVICE_TYPE_TO_NAME_MAP[service_type]}" |
44 | 45 |
|
45 | 46 |
|
46 | | -COMPUTATIONAL_SERVICE_KEY_RE: Final[re.Pattern[str]] = re.compile( |
47 | | - rf"^{COMPUTATIONAL_SERVICE_KEY_PREFIX}/" |
48 | | - r"(?P<subdir>[a-z0-9][a-z0-9_.-]*/)*" |
49 | | - r"(?P<name>[a-z0-9-_]+[a-z0-9])$" |
50 | | -) |
51 | | -COMPUTATIONAL_SERVICE_KEY_FORMAT: Final[str] = ( |
52 | | - f"{COMPUTATIONAL_SERVICE_KEY_PREFIX}/{{service_name}}" |
| 47 | +COMPUTATIONAL_SERVICE_KEY_PREFIX: Final[str] = create_key_prefix( |
| 48 | + ServiceType.COMPUTATIONAL |
53 | 49 | ) |
| 50 | +DYNAMIC_SERVICE_KEY_PREFIX: Final[str] = create_key_prefix(ServiceType.DYNAMIC) |
| 51 | +FRONTEND_SERVICE_KEY_PREFIX: Final[str] = create_key_prefix(ServiceType.FRONTEND) |
54 | 52 |
|
55 | 53 |
|
56 | | -FRONTEND_SERVICE_KEY_RE: Final[re.Pattern[str]] = re.compile( |
57 | | - rf"^{FRONTEND_SERVICE_KEY_PREFIX}/" |
58 | | - r"(?P<subdir>[a-z0-9][a-z0-9_.-]*/)*" |
59 | | - r"(?P<name>[a-z0-9-_]+[a-z0-9])$" |
| 54 | +def create_key_regex(service_type: ServiceType) -> re.Pattern[str]: |
| 55 | + return re.compile( |
| 56 | + rf"^simcore/services/{SERVICE_TYPE_TO_NAME_MAP[service_type]}/" |
| 57 | + r"(?P<subdir>[a-z0-9][a-z0-9_.-]*/)*" |
| 58 | + r"(?P<name>[a-z0-9-_]+[a-z0-9])$" |
| 59 | + ) |
| 60 | + |
| 61 | + |
| 62 | +def create_key_format(service_type: ServiceType) -> str: |
| 63 | + return f"simcore/services/{SERVICE_TYPE_TO_NAME_MAP[service_type]}/{{service_name}}" |
| 64 | + |
| 65 | + |
| 66 | +COMPUTATIONAL_SERVICE_KEY_RE: Final[re.Pattern[str]] = create_key_regex( |
| 67 | + ServiceType.COMPUTATIONAL |
60 | 68 | ) |
61 | | -FRONTEND_SERVICE_KEY_FORMAT: Final[str] = ( |
62 | | - f"{FRONTEND_SERVICE_KEY_PREFIX}/{{service_name}}" |
| 69 | +COMPUTATIONAL_SERVICE_KEY_FORMAT: Final[str] = create_key_format( |
| 70 | + ServiceType.COMPUTATIONAL |
63 | 71 | ) |
64 | 72 |
|
| 73 | +DYNAMIC_SERVICE_KEY_RE: Final[re.Pattern[str]] = create_key_regex(ServiceType.DYNAMIC) |
| 74 | +DYNAMIC_SERVICE_KEY_FORMAT: Final[str] = create_key_format(ServiceType.DYNAMIC) |
| 75 | + |
| 76 | +FRONTEND_SERVICE_KEY_RE: Final[re.Pattern[str]] = create_key_regex(ServiceType.FRONTEND) |
| 77 | +FRONTEND_SERVICE_KEY_FORMAT: Final[str] = create_key_format(ServiceType.FRONTEND) |
| 78 | + |
65 | 79 |
|
66 | | -SERVICE_TYPE_PREFIXES = MappingProxyType( |
| 80 | +SERVICE_TYPE_TO_PREFIX_MAP = MappingProxyType( |
67 | 81 | { |
68 | 82 | ServiceType.COMPUTATIONAL: COMPUTATIONAL_SERVICE_KEY_PREFIX, |
69 | 83 | ServiceType.DYNAMIC: DYNAMIC_SERVICE_KEY_PREFIX, |
|
72 | 86 | ) |
73 | 87 |
|
74 | 88 | assert all( # nosec |
75 | | - not prefix.endswith("/") for prefix in SERVICE_TYPE_PREFIXES.values() |
| 89 | + not prefix.endswith("/") for prefix in SERVICE_TYPE_TO_PREFIX_MAP.values() |
76 | 90 | ), "Service type prefixes must not end with '/'" |
0 commit comments