2020logger = logging .getLogger (__name__ )
2121
2222_NEXUS_OPERATION_LINK_URL_PATH_REGEX = re .compile (
23- r"^/namespaces/(?P<namespace>[^/]+)/nexus-operations/(?P<operation_id>[^/]+)$"
23+ r"^/namespaces/(?P<namespace>[^/]+)/nexus-operations/(?P<operation_id>[^/]+)/(?P<run_id>[^/]+)/details $"
2424)
2525
2626_ACTIVITY_LINK_URL_PATH_REGEX = re .compile (
27- r"^/namespaces/(?P<namespace>[^/]+)/activities/(?P<activity_id>[^/]+)$"
27+ r"^/namespaces/(?P<namespace>[^/]+)/activities/(?P<activity_id>[^/]+)/(?P<run_id>[^/]+)/details $"
2828)
2929
3030_WORFKLOW_LINK_URL_PATH_REGEX = re .compile (
@@ -42,7 +42,6 @@ class _LinkType(str, Enum):
4242LINK_EVENT_TYPE_PARAM_NAME = "eventType"
4343LINK_REQUEST_ID_PARAM_NAME = "requestID"
4444LINK_REFERENCE_TYPE_PARAM_NAME = "referenceType"
45- LINK_RUN_ID_PARAM_NAME = "runID"
4645
4746EVENT_REFERENCE_TYPE = "EventReference"
4847REQUEST_ID_REFERENCE_TYPE = "RequestIdReference"
@@ -160,18 +159,11 @@ def nexus_operation_to_nexus_link(
160159 scheme = "temporal"
161160 namespace = urllib .parse .quote (op_link .namespace , safe = "" )
162161 operation_id = urllib .parse .quote (op_link .operation_id , safe = "" )
163- path = f"/namespaces/{ namespace } /nexus-operations/{ operation_id } "
164-
165- query_params = ""
166- if op_link .run_id :
167- query_params = urllib .parse .urlencode (
168- {
169- LINK_RUN_ID_PARAM_NAME : op_link .run_id ,
170- },
171- )
162+ run_id = urllib .parse .quote (op_link .run_id , safe = "" )
163+ path = f"/namespaces/{ namespace } /nexus-operations/{ operation_id } /{ run_id } /details"
172164
173165 # urllib will omit '//' from the url if netloc is empty so we add the scheme manually
174- url = f"{ scheme } ://{ urllib .parse .urlunparse (('' , '' , path , '' , query_params , '' ))} "
166+ url = f"{ scheme } ://{ urllib .parse .urlunparse (('' , '' , path , '' , '' , '' ))} "
175167
176168 return nexusrpc .Link (url = url , type = _LinkType .NEXUS_OPERATION .value )
177169
@@ -183,14 +175,10 @@ def activity_link_to_nexus_link(
183175 scheme = "temporal"
184176 namespace = urllib .parse .quote (activity .namespace , safe = "" )
185177 activity_id = urllib .parse .quote (activity .activity_id , safe = "" )
186- path = f"/namespaces/{ namespace } /activities/{ activity_id } "
178+ run_id = urllib .parse .quote (activity .run_id , safe = "" )
179+ path = f"/namespaces/{ namespace } /activities/{ activity_id } /{ run_id } /details"
187180
188- if activity .run_id :
189- query_params = urllib .parse .urlencode ({LINK_RUN_ID_PARAM_NAME : activity .run_id })
190- else :
191- query_params = ""
192-
193- url = f"{ scheme } ://{ urllib .parse .urlunparse (('' , '' , path , '' , query_params , '' ))} "
181+ url = f"{ scheme } ://{ urllib .parse .urlunparse (('' , '' , path , '' , '' , '' ))} "
194182
195183 return nexusrpc .Link (url = url , type = _LinkType .ACTIVITY .value )
196184
@@ -258,24 +246,11 @@ def nexus_link_to_nexus_operation_link(
258246 )
259247 return None
260248
261- query_params = urllib .parse .parse_qs (url .query )
262-
263- match query_params .get (LINK_RUN_ID_PARAM_NAME ):
264- case [run_id_param ]:
265- run_id = run_id_param
266- case [] | None :
267- run_id = ""
268- case _:
269- logger .warning (
270- f"Invalid Nexus link: { nexus_link } . Expected { LINK_RUN_ID_PARAM_NAME } to have at most 1 value"
271- )
272- return None
273-
274249 groups = match .groupdict ()
275250 nexus_op_link = temporalio .api .common .v1 .Link .NexusOperation (
276251 namespace = urllib .parse .unquote (groups ["namespace" ]),
277252 operation_id = urllib .parse .unquote (groups ["operation_id" ]),
278- run_id = run_id ,
253+ run_id = urllib . parse . unquote ( groups [ " run_id" ]) ,
279254 )
280255 return temporalio .api .common .v1 .Link (nexus_operation = nexus_op_link )
281256
@@ -292,22 +267,11 @@ def nexus_link_to_activity_link(
292267 )
293268 return None
294269
295- query_params = urllib .parse .parse_qs (url .query , keep_blank_values = True )
296-
297- match query_params .get (LINK_RUN_ID_PARAM_NAME ):
298- case [run_id_param ]:
299- run_id = run_id_param
300- case _:
301- logger .warning (
302- f"Invalid Nexus link: { nexus_link } . Expected { LINK_RUN_ID_PARAM_NAME } to have exactly 1 value"
303- )
304- return None
305-
306270 groups = match .groupdict ()
307271 activity_link = temporalio .api .common .v1 .Link .Activity (
308272 namespace = urllib .parse .unquote (groups ["namespace" ]),
309273 activity_id = urllib .parse .unquote (groups ["activity_id" ]),
310- run_id = run_id ,
274+ run_id = urllib . parse . unquote ( groups [ " run_id" ]) ,
311275 )
312276 return temporalio .api .common .v1 .Link (activity = activity_link )
313277
0 commit comments