|
5 | 5 | import random |
6 | 6 | import uuid |
7 | 7 | from contextlib import contextmanager |
8 | | -from typing import Any, Mapping, Protocol, Type |
| 8 | +from typing import Any, Mapping, Optional, Protocol, Type |
9 | 9 |
|
10 | 10 | from agents import CustomSpanData, custom_span, get_current_span, trace |
11 | 11 | from agents.tracing import ( |
12 | 12 | get_trace_provider, |
13 | 13 | ) |
14 | 14 | from agents.tracing.scope import Scope |
15 | | -from agents.tracing.spans import NoOpSpan |
| 15 | +from agents.tracing.spans import NoOpSpan, Span |
16 | 16 |
|
17 | 17 | import temporalio.activity |
18 | 18 | import temporalio.api.common.v1 |
@@ -370,55 +370,78 @@ class _ContextPropagationWorkflowOutboundInterceptor( |
370 | 370 | async def signal_child_workflow( |
371 | 371 | self, input: temporalio.worker.SignalChildWorkflowInput |
372 | 372 | ) -> None: |
373 | | - with custom_span( |
374 | | - name="temporal:signalChildWorkflow", |
375 | | - data={"workflowId": input.child_workflow_id}, |
376 | | - ): |
| 373 | + trace = get_trace_provider().get_current_trace() |
| 374 | + if trace: |
| 375 | + with custom_span( |
| 376 | + name="temporal:signalChildWorkflow", |
| 377 | + data={"workflowId": input.child_workflow_id}, |
| 378 | + ): |
| 379 | + set_header_from_context(input, temporalio.workflow.payload_converter()) |
| 380 | + await self.next.signal_child_workflow(input) |
| 381 | + else: |
377 | 382 | set_header_from_context(input, temporalio.workflow.payload_converter()) |
378 | 383 | await self.next.signal_child_workflow(input) |
379 | 384 |
|
380 | 385 | async def signal_external_workflow( |
381 | 386 | self, input: temporalio.worker.SignalExternalWorkflowInput |
382 | 387 | ) -> None: |
383 | | - with custom_span( |
384 | | - name="temporal:signalExternalWorkflow", |
385 | | - data={"workflowId": input.workflow_id}, |
386 | | - ): |
| 388 | + trace = get_trace_provider().get_current_trace() |
| 389 | + if trace: |
| 390 | + with custom_span( |
| 391 | + name="temporal:signalExternalWorkflow", |
| 392 | + data={"workflowId": input.workflow_id}, |
| 393 | + ): |
| 394 | + set_header_from_context(input, temporalio.workflow.payload_converter()) |
| 395 | + await self.next.signal_external_workflow(input) |
| 396 | + else: |
387 | 397 | set_header_from_context(input, temporalio.workflow.payload_converter()) |
388 | 398 | await self.next.signal_external_workflow(input) |
389 | 399 |
|
390 | 400 | def start_activity( |
391 | 401 | self, input: temporalio.worker.StartActivityInput |
392 | 402 | ) -> temporalio.workflow.ActivityHandle: |
393 | | - span = custom_span( |
394 | | - name="temporal:startActivity", data={"activity": input.activity} |
395 | | - ) |
396 | | - span.start(mark_as_current=True) |
| 403 | + trace = get_trace_provider().get_current_trace() |
| 404 | + span: Optional[Span] = None |
| 405 | + if trace: |
| 406 | + span = custom_span( |
| 407 | + name="temporal:startActivity", data={"activity": input.activity} |
| 408 | + ) |
| 409 | + span.start(mark_as_current=True) |
| 410 | + |
397 | 411 | set_header_from_context(input, temporalio.workflow.payload_converter()) |
398 | 412 | handle = self.next.start_activity(input) |
399 | | - handle.add_done_callback(lambda _: span.finish()) |
| 413 | + if span: |
| 414 | + handle.add_done_callback(lambda _: span.finish()) # type: ignore |
400 | 415 | return handle |
401 | 416 |
|
402 | 417 | async def start_child_workflow( |
403 | 418 | self, input: temporalio.worker.StartChildWorkflowInput |
404 | 419 | ) -> temporalio.workflow.ChildWorkflowHandle: |
405 | | - span = custom_span( |
406 | | - name="temporal:startChildWorkflow", data={"workflow": input.workflow} |
407 | | - ) |
408 | | - span.start(mark_as_current=True) |
| 420 | + trace = get_trace_provider().get_current_trace() |
| 421 | + span: Optional[Span] = None |
| 422 | + if trace: |
| 423 | + span = custom_span( |
| 424 | + name="temporal:startChildWorkflow", data={"workflow": input.workflow} |
| 425 | + ) |
| 426 | + span.start(mark_as_current=True) |
409 | 427 | set_header_from_context(input, temporalio.workflow.payload_converter()) |
410 | 428 | handle = await self.next.start_child_workflow(input) |
411 | | - handle.add_done_callback(lambda _: span.finish()) |
| 429 | + if span: |
| 430 | + handle.add_done_callback(lambda _: span.finish()) # type: ignore |
412 | 431 | return handle |
413 | 432 |
|
414 | 433 | def start_local_activity( |
415 | 434 | self, input: temporalio.worker.StartLocalActivityInput |
416 | 435 | ) -> temporalio.workflow.ActivityHandle: |
417 | | - span = custom_span( |
418 | | - name="temporal:startLocalActivity", data={"activity": input.activity} |
419 | | - ) |
420 | | - span.start(mark_as_current=True) |
| 436 | + trace = get_trace_provider().get_current_trace() |
| 437 | + span: Optional[Span] = None |
| 438 | + if trace: |
| 439 | + span = custom_span( |
| 440 | + name="temporal:startLocalActivity", data={"activity": input.activity} |
| 441 | + ) |
| 442 | + span.start(mark_as_current=True) |
421 | 443 | set_header_from_context(input, temporalio.workflow.payload_converter()) |
422 | 444 | handle = self.next.start_local_activity(input) |
423 | | - handle.add_done_callback(lambda _: span.finish()) |
| 445 | + if span: |
| 446 | + handle.add_done_callback(lambda _: span.finish()) # type: ignore |
424 | 447 | return handle |
0 commit comments