3636 import pandas
3737except (ImportError , AttributeError ): # pragma: NO COVER
3838 pandas = None
39+
3940try :
4041 import opentelemetry
41- from opentelemetry import trace
42- from opentelemetry .sdk .trace import TracerProvider
43- from opentelemetry .sdk .trace .export import SimpleExportSpanProcessor
44- from opentelemetry .sdk .trace .export .in_memory_span_exporter import (
45- InMemorySpanExporter ,
46- )
47- except (ImportError , AttributeError ): # pragma: NO COVER
42+ except ImportError :
4843 opentelemetry = None
44+
45+ if opentelemetry is not None :
46+ try :
47+ from opentelemetry import trace
48+ from opentelemetry .sdk .trace import TracerProvider
49+ from opentelemetry .sdk .trace .export import SimpleSpanProcessor
50+ from opentelemetry .sdk .trace .export .in_memory_span_exporter import (
51+ InMemorySpanExporter ,
52+ )
53+ except (ImportError , AttributeError ) as exc : # pragma: NO COVER
54+ msg = "Error importing from opentelemetry, is the installed version compatible?"
55+ raise ImportError (msg ) from exc
56+
4957try :
5058 import pyarrow
5159except (ImportError , AttributeError ): # pragma: NO COVER
@@ -784,9 +792,12 @@ def test_span_status_is_set(self):
784792
785793 tracer_provider = TracerProvider ()
786794 memory_exporter = InMemorySpanExporter ()
787- span_processor = SimpleExportSpanProcessor (memory_exporter )
795+ span_processor = SimpleSpanProcessor (memory_exporter )
788796 tracer_provider .add_span_processor (span_processor )
789- trace .set_tracer_provider (tracer_provider )
797+
798+ # OpenTelemetry API >= 0.12b0 does not allow overriding the tracer once
799+ # initialized, thus directly override the internal global var.
800+ tracer_patcher = mock .patch .object (trace , "_TRACER_PROVIDER" , tracer_provider )
790801
791802 creds = _make_credentials ()
792803 client = self ._make_one (project = self .PROJECT , credentials = creds )
@@ -797,7 +808,7 @@ def test_span_status_is_set(self):
797808 full_routine_id = "test-routine-project.test_routines.minimal_routine"
798809 routine = Routine (full_routine_id )
799810
800- with pytest .raises (google .api_core .exceptions .AlreadyExists ):
811+ with pytest .raises (google .api_core .exceptions .AlreadyExists ), tracer_patcher :
801812 client .create_routine (routine )
802813
803814 span_list = memory_exporter .get_finished_spans ()
0 commit comments