3434
3535from typing import Optional , Type
3636
37+ from opentelemetry import trace as _otel_trace
38+ from temporalio .contrib .opentelemetry import TracingInterceptor
3739from temporalio .plugin import SimplePlugin
3840from temporalio .worker import ActivityInboundInterceptor , Interceptor , WorkflowInterceptorClassInput , WorkflowOutboundInterceptor
41+ from temporalio .worker .workflow_sandbox import SandboxedWorkflowRunner
3942
4043from .config import ParseableConfig , LogsConfig , TracesConfig
4144from .exporters import build_tracer_provider , build_logger_provider
4750from . import workflow as _workflow_module
4851from ._version import PLUGIN_VERSION
4952
53+ _PASSTHROUGH_MODULES = (
54+ "temporal_parseable" ,
55+ "opentelemetry" ,
56+ "google.protobuf" ,
57+ )
58+
5059__version__ = PLUGIN_VERSION
5160__all__ = [
5261 "ParseablePlugin" ,
@@ -69,10 +78,17 @@ def __init__(self, config: Optional[ParseableConfig] = None) -> None:
6978 _workflow_module ._set_emitter (self ._emitter )
7079
7180 worker_interceptor = _ParseableWorkerInterceptor (self ._emitter )
81+ interceptors : list [Interceptor ] = [worker_interceptor ]
82+
83+ if self ._tracer_provider is not None :
84+ _otel_trace .set_tracer_provider (self ._tracer_provider )
85+ tracer = self ._tracer_provider .get_tracer (__name__ )
86+ interceptors .append (TracingInterceptor (tracer = tracer ))
7287
7388 super ().__init__ (
74- name = "parseable.temporal" ,
75- interceptors = [worker_interceptor ],
89+ name = "parseable.ParseablePlugin" ,
90+ interceptors = interceptors ,
91+ workflow_runner = _apply_passthrough ,
7692 )
7793
7894 @property
@@ -86,6 +102,15 @@ def shutdown(self) -> None:
86102 self ._logger_provider .shutdown ()
87103
88104
105+ def _apply_passthrough (existing : object ) -> SandboxedWorkflowRunner :
106+ base = existing if isinstance (existing , SandboxedWorkflowRunner ) else SandboxedWorkflowRunner ()
107+ restrictions = base .restrictions .with_passthrough_modules (* _PASSTHROUGH_MODULES )
108+ return SandboxedWorkflowRunner (
109+ restrictions = restrictions ,
110+ runner_class = base .runner_class ,
111+ )
112+
113+
89114class _ParseableWorkerInterceptor (Interceptor ):
90115 def __init__ (self , emitter : ParseableEmitter ) -> None :
91116 self ._emitter = emitter
0 commit comments