1111# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1212# See the License for the specific language governing permissions and
1313# limitations under the License.
14- """OpenTelemetry Tracing Interop Helper for Python gRPC Interop Client/Server."""
14+ """OpenTelemetry Tracing Interop Helper for Python gRPC Interop Client/Server
15+ """
1516
1617import os
1718from typing import Optional , Tuple
1819
1920import grpc
2021from opentelemetry import trace
21- from opentelemetry .proto .collector .trace .v1 import trace_service_pb2 , trace_service_pb2_grpc
22+ from opentelemetry .proto .collector .trace .v1 import (
23+ trace_service_pb2 ,
24+ trace_service_pb2_grpc ,
25+ )
2226from opentelemetry .proto .common .v1 import common_pb2
2327from opentelemetry .proto .trace .v1 import trace_pb2
2428from opentelemetry .sdk .trace import ReadableSpan , TracerProvider
@@ -119,7 +123,9 @@ def force_flush(self, timeout_millis: int = 30000) -> bool:
119123def init_tracer_provider () -> Tuple [TracerProvider , trace .Tracer ]:
120124 global _GLOBAL_PROVIDER
121125 if _GLOBAL_PROVIDER is None :
122- endpoint = os .environ .get ("OTEL_EXPORTER_OTLP_ENDPOINT" , "http://localhost:4317" )
126+ endpoint = os .environ .get (
127+ "OTEL_EXPORTER_OTLP_ENDPOINT" , "http://localhost:4317"
128+ )
123129 exporter = OTLPSpanExporter (endpoint )
124130 processor = SimpleSpanProcessor (exporter )
125131 _GLOBAL_PROVIDER = TracerProvider ()
@@ -141,7 +147,14 @@ def pack_grpc_trace_bin(
141147 trace_id_bytes = trace_id_int .to_bytes (16 , "big" )
142148 span_id_bytes = span_id_int .to_bytes (8 , "big" )
143149 options = 1 if is_sampled else 0
144- return b"\x00 \x00 " + trace_id_bytes + b"\x01 " + span_id_bytes + b"\x02 " + bytes ([options ])
150+ return (
151+ b"\x00 \x00 "
152+ + trace_id_bytes
153+ + b"\x01 "
154+ + span_id_bytes
155+ + b"\x02 "
156+ + bytes ([options ])
157+ )
145158
146159
147160def unpack_grpc_trace_bin (
@@ -171,31 +184,44 @@ def parse_traceparent(
171184
172185
173186class OTelServerInterceptor (grpc .ServerInterceptor ):
174- """Server interceptor to extract trace context and create server Recv span."""
187+ """Server interceptor to extract trace context and create Recv span."""
175188
176189 def __init__ (self , tracer : trace .Tracer ):
177190 self ._tracer = tracer
178191
179192 def intercept_service (self , continuation , handler_call_details ):
180- print (f"DEBUG_SERVER_METADATA: { handler_call_details .invocation_metadata } " , flush = True )
181193 trace_bin_header = None
182194 traceparent_header = None
183195 for k , v in handler_call_details .invocation_metadata :
184- k_str = k .decode ("ascii" , errors = "ignore" ) if isinstance (k , bytes ) else str (k )
196+ k_str = (
197+ k .decode ("ascii" , errors = "ignore" )
198+ if isinstance (k , bytes )
199+ else str (k )
200+ )
185201 if k_str .lower () == "grpc-trace-bin" :
186202 trace_bin_header = v
187203 elif k_str .lower () == "traceparent" :
188- traceparent_header = v if isinstance (v , str ) else v .decode ("latin1" )
204+ traceparent_header = (
205+ v if isinstance (v , str ) else v .decode ("latin1" )
206+ )
189207
190208 parent_ctx = None
191209 trace_id , parent_span_id , is_sampled = None , None , False
192210
193211 if trace_bin_header :
194212 if isinstance (trace_bin_header , str ):
195213 trace_bin_header = trace_bin_header .encode ("latin1" )
196- trace_id , parent_span_id , is_sampled = unpack_grpc_trace_bin (trace_bin_header )
214+ (
215+ trace_id ,
216+ parent_span_id ,
217+ is_sampled ,
218+ ) = unpack_grpc_trace_bin (trace_bin_header )
197219 elif traceparent_header :
198- trace_id , parent_span_id , is_sampled = parse_traceparent (traceparent_header )
220+ (
221+ trace_id ,
222+ parent_span_id ,
223+ is_sampled ,
224+ ) = parse_traceparent (traceparent_header )
199225
200226 if trace_id and parent_span_id :
201227 parent_ctx = trace .SpanContext (
0 commit comments