Skip to content

Commit c81fd5e

Browse files
authored
Hide certain implementation specific classes/variables (open-telemetry#1684)
1 parent 0cd037f commit c81fd5e

File tree

17 files changed

+64
-56
lines changed

17 files changed

+64
-56
lines changed

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
4848
([#1674](https://github.com/open-telemetry/opentelemetry-python/pull/1674))
4949
- Remove time_ns from API and add a warning for older versions of Python
5050
([#1602](https://github.com/open-telemetry/opentelemetry-python/pull/1602))
51+
- Hide implementation classes/variables in api/sdk
52+
([#1684](https://github.com/open-telemetry/opentelemetry-python/pull/1684))
5153

5254
### Removed
5355
- Removed unused `get_hexadecimal_trace_id` and `get_hexadecimal_span_id` methods.

docs/conf.py

+1
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@
101101
# Even if wrapt is added to intersphinx_mapping, sphinx keeps failing
102102
# with "class reference target not found: ObjectProxy".
103103
("py:class", "ObjectProxy"),
104+
("py:class", "opentelemetry.trace._LinkBase",),
104105
# TODO: Understand why sphinx is not able to find this local class
105106
("py:class", "opentelemetry.propagators.textmap.TextMapPropagator",),
106107
("py:class", "opentelemetry.propagators.textmap.DictGetter",),

opentelemetry-api/setup.cfg

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ where = src
5151
opentelemetry_context =
5252
contextvars_context = opentelemetry.context.contextvars_context:ContextVarsRuntimeContext
5353
opentelemetry_tracer_provider =
54-
default_tracer_provider = opentelemetry.trace:DefaultTracerProvider
54+
default_tracer_provider = opentelemetry.trace:_DefaultTracerProvider
5555
opentelemetry_propagator =
5656
tracecontext = opentelemetry.trace.propagation.tracecontext:TraceContextTextMapPropagator
5757
baggage = opentelemetry.baggage.propagation:W3CBaggagePropagator

opentelemetry-api/src/opentelemetry/baggage/propagation/__init__.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@
2424
class W3CBaggagePropagator(textmap.TextMapPropagator):
2525
"""Extracts and injects Baggage which is used to annotate telemetry."""
2626

27-
MAX_HEADER_LENGTH = 8192
28-
MAX_PAIR_LENGTH = 4096
29-
MAX_PAIRS = 180
27+
_MAX_HEADER_LENGTH = 8192
28+
_MAX_PAIR_LENGTH = 4096
29+
_MAX_PAIRS = 180
3030
_BAGGAGE_HEADER_NAME = "baggage"
3131

3232
def extract(
@@ -48,16 +48,16 @@ def extract(
4848
getter.get(carrier, self._BAGGAGE_HEADER_NAME)
4949
)
5050

51-
if not header or len(header) > self.MAX_HEADER_LENGTH:
51+
if not header or len(header) > self._MAX_HEADER_LENGTH:
5252
return context
5353

5454
baggage_entries = header.split(",")
55-
total_baggage_entries = self.MAX_PAIRS
55+
total_baggage_entries = self._MAX_PAIRS
5656
for entry in baggage_entries:
5757
if total_baggage_entries <= 0:
5858
return context
5959
total_baggage_entries -= 1
60-
if len(entry) > self.MAX_PAIR_LENGTH:
60+
if len(entry) > self._MAX_PAIR_LENGTH:
6161
continue
6262
try:
6363
name, value = entry.split("=", 1)

opentelemetry-api/src/opentelemetry/context/__init__.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@
2020

2121
from pkg_resources import iter_entry_points
2222

23-
from opentelemetry.context.context import Context, RuntimeContext
23+
from opentelemetry.context.context import Context, _RuntimeContext
2424
from opentelemetry.environment_variables import OTEL_PYTHON_CONTEXT
2525

2626
logger = logging.getLogger(__name__)
27-
_RUNTIME_CONTEXT = None # type: typing.Optional[RuntimeContext]
27+
_RUNTIME_CONTEXT = None # type: typing.Optional[_RuntimeContext]
2828
_RUNTIME_CONTEXT_LOCK = threading.Lock()
2929

3030
_F = typing.TypeVar("_F", bound=typing.Callable[..., typing.Any])

opentelemetry-api/src/opentelemetry/context/context.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def __setitem__(self, key: str, value: object) -> None:
2121
raise ValueError
2222

2323

24-
class RuntimeContext(ABC):
24+
class _RuntimeContext(ABC):
2525
"""The RuntimeContext interface provides a wrapper for the different
2626
mechanisms that are used to propagate context in Python.
2727
Implementations can be made available via entry_points and
@@ -39,7 +39,7 @@ def attach(self, context: Context) -> object:
3939

4040
@abstractmethod
4141
def get_current(self) -> Context:
42-
""" Returns the current `Context` object. """
42+
"""Returns the current `Context` object. """
4343

4444
@abstractmethod
4545
def detach(self, token: object) -> None:
@@ -50,4 +50,4 @@ def detach(self, token: object) -> None:
5050
"""
5151

5252

53-
__all__ = ["Context", "RuntimeContext"]
53+
__all__ = ["Context"]

opentelemetry-api/src/opentelemetry/context/contextvars_context.py

+14-5
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from contextvars import ContextVar
1515
from sys import version_info
1616

17-
from opentelemetry.context.context import Context, RuntimeContext
17+
from opentelemetry.context.context import Context, _RuntimeContext
1818

1919
if (3, 5, 3) <= version_info < (3, 7):
2020
import aiocontextvars # type: ignore # pylint:disable=unused-import,import-error
@@ -23,7 +23,7 @@
2323
import opentelemetry.context.aiocontextvarsfix # pylint:disable=unused-import
2424

2525

26-
class ContextVarsRuntimeContext(RuntimeContext):
26+
class ContextVarsRuntimeContext(_RuntimeContext):
2727
"""An implementation of the RuntimeContext interface which wraps ContextVar under
2828
the hood. This is the prefered implementation for usage with Python 3.5+
2929
"""
@@ -36,15 +36,24 @@ def __init__(self) -> None:
3636
)
3737

3838
def attach(self, context: Context) -> object:
39-
"""See `opentelemetry.context.RuntimeContext.attach`."""
39+
"""Sets the current `Context` object. Returns a
40+
token that can be used to reset to the previous `Context`.
41+
42+
Args:
43+
context: The Context to set.
44+
"""
4045
return self._current_context.set(context)
4146

4247
def get_current(self) -> Context:
43-
"""See `opentelemetry.context.RuntimeContext.get_current`."""
48+
"""Returns the current `Context` object. """
4449
return self._current_context.get()
4550

4651
def detach(self, token: object) -> None:
47-
"""See `opentelemetry.context.RuntimeContext.detach`."""
52+
"""Resets Context to a previous value
53+
54+
Args:
55+
token: A reference to a previous Context.
56+
"""
4857
self._current_context.reset(token) # type: ignore
4958

5059

opentelemetry-api/src/opentelemetry/trace/__init__.py

+5-12
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@
110110
logger = getLogger(__name__)
111111

112112

113-
class LinkBase(ABC):
113+
class _LinkBase(ABC):
114114
def __init__(self, context: "SpanContext") -> None:
115115
self._context = context
116116

@@ -124,7 +124,7 @@ def attributes(self) -> types.Attributes:
124124
pass
125125

126126

127-
class Link(LinkBase):
127+
class Link(_LinkBase):
128128
"""A link to a `Span`.
129129
130130
Args:
@@ -205,7 +205,7 @@ def get_tracer(
205205
"""
206206

207207

208-
class DefaultTracerProvider(TracerProvider):
208+
class _DefaultTracerProvider(TracerProvider):
209209
"""The default TracerProvider, used when no implementation is available.
210210
211211
All operations are no-op.
@@ -217,7 +217,7 @@ def get_tracer(
217217
instrumenting_library_version: str = "",
218218
) -> "Tracer":
219219
# pylint:disable=no-self-use,unused-argument
220-
return DefaultTracer()
220+
return _DefaultTracer()
221221

222222

223223
class Tracer(ABC):
@@ -227,10 +227,6 @@ class Tracer(ABC):
227227
and controlling spans' lifecycles.
228228
"""
229229

230-
# Constant used to represent the current span being used as a parent.
231-
# This is the default behavior when creating spans.
232-
CURRENT_SPAN = NonRecordingSpan(INVALID_SPAN_CONTEXT)
233-
234230
@abstractmethod
235231
def start_span(
236232
self,
@@ -353,7 +349,7 @@ def start_as_current_span(
353349
"""
354350

355351

356-
class DefaultTracer(Tracer):
352+
class _DefaultTracer(Tracer):
357353
"""The default Tracer, used when no Tracer implementation is available.
358354
359355
All operations are no-op.
@@ -496,10 +492,7 @@ def use_span(
496492
"INVALID_SPAN_ID",
497493
"INVALID_TRACE_ID",
498494
"NonRecordingSpan",
499-
"DefaultTracer",
500-
"DefaultTracerProvider",
501495
"Link",
502-
"LinkBase",
503496
"Span",
504497
"SpanContext",
505498
"SpanKind",

opentelemetry-api/tests/baggage/test_baggage_propagation.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ def test_invalid_header(self):
8787
self.assertEqual(self._extract(header), expected)
8888

8989
def test_header_too_long(self):
90-
long_value = "s" * (W3CBaggagePropagator.MAX_HEADER_LENGTH + 1)
90+
long_value = "s" * (W3CBaggagePropagator._MAX_HEADER_LENGTH + 1)
9191
header = "key1={}".format(long_value)
9292
expected = {}
9393
self.assertEqual(self._extract(header), expected)
@@ -96,15 +96,15 @@ def test_header_contains_too_many_entries(self):
9696
header = ",".join(
9797
[
9898
"key{}=val".format(k)
99-
for k in range(W3CBaggagePropagator.MAX_PAIRS + 1)
99+
for k in range(W3CBaggagePropagator._MAX_PAIRS + 1)
100100
]
101101
)
102102
self.assertEqual(
103-
len(self._extract(header)), W3CBaggagePropagator.MAX_PAIRS
103+
len(self._extract(header)), W3CBaggagePropagator._MAX_PAIRS
104104
)
105105

106106
def test_header_contains_pair_too_long(self):
107-
long_value = "s" * (W3CBaggagePropagator.MAX_PAIR_LENGTH + 1)
107+
long_value = "s" * (W3CBaggagePropagator._MAX_PAIR_LENGTH + 1)
108108
header = "key1=value1,key2={},key3=value3".format(long_value)
109109
expected = {"key1": "value1", "key3": "value3"}
110110
self.assertEqual(self._extract(header), expected)

opentelemetry-api/tests/test_implementation.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ def test_tracer(self):
3333
trace.TracerProvider() # type:ignore
3434

3535
def test_default_tracer(self):
36-
tracer_provider = trace.DefaultTracerProvider()
36+
# pylint: disable=protected-access
37+
tracer_provider = trace._DefaultTracerProvider()
3738
tracer = tracer_provider.get_tracer(__name__)
3839
with tracer.start_span("test") as span:
3940
self.assertEqual(

opentelemetry-api/tests/trace/test_globals.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,11 @@ def test_get_tracer(self):
4444

4545
class TestTracer(unittest.TestCase):
4646
def setUp(self):
47-
self.tracer = trace.DefaultTracer()
47+
# pylint: disable=protected-access
48+
self.tracer = trace._DefaultTracer()
4849

4950
def test_get_current_span(self):
50-
"""DefaultTracer's start_span will also
51+
"""_DefaultTracer's start_span will also
5152
be retrievable via get_current_span
5253
"""
5354
self.assertEqual(trace.get_current_span(), trace.INVALID_SPAN)

opentelemetry-api/tests/trace/test_tracer.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919

2020
class TestTracer(unittest.TestCase):
2121
def setUp(self):
22-
self.tracer = trace.DefaultTracer()
22+
# pylint: disable=protected-access
23+
self.tracer = trace._DefaultTracer()
2324

2425
def test_start_span(self):
2526
with self.tracer.start_span("") as span:

opentelemetry-sdk/src/opentelemetry/sdk/error_handler/__init__.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ def _handle(self, error: Exception, *args, **kwargs):
7575
"""
7676

7777

78-
class DefaultErrorHandler(ErrorHandler):
78+
class _DefaultErrorHandler(ErrorHandler):
7979
"""
8080
Default error handler
8181
@@ -144,6 +144,6 @@ def __exit__(self, exc_type, exc_value, traceback):
144144

145145
if not plugin_handled:
146146

147-
DefaultErrorHandler()._handle(exc_value)
147+
_DefaultErrorHandler()._handle(exc_value)
148148

149149
return True

opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@
149149
TELEMETRY_SDK_LANGUAGE = "telemetry.sdk.language"
150150

151151

152-
OPENTELEMETRY_SDK_VERSION = pkg_resources.get_distribution(
152+
_OPENTELEMETRY_SDK_VERSION = pkg_resources.get_distribution(
153153
"opentelemetry-sdk"
154154
).version
155155

@@ -225,7 +225,7 @@ def __hash__(self):
225225
{
226226
TELEMETRY_SDK_LANGUAGE: "python",
227227
TELEMETRY_SDK_NAME: "opentelemetry",
228-
TELEMETRY_SDK_VERSION: OPENTELEMETRY_SDK_VERSION,
228+
TELEMETRY_SDK_VERSION: _OPENTELEMETRY_SDK_VERSION,
229229
}
230230
)
231231

opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py

+12-12
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,11 @@
6262
environ.get(OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT, 128)
6363
)
6464

65-
SPAN_EVENT_COUNT_LIMIT = int(environ.get(OTEL_SPAN_EVENT_COUNT_LIMIT, 128))
66-
SPAN_LINK_COUNT_LIMIT = int(environ.get(OTEL_SPAN_LINK_COUNT_LIMIT, 128))
67-
VALID_ATTR_VALUE_TYPES = (bool, str, int, float)
65+
_SPAN_EVENT_COUNT_LIMIT = int(environ.get(OTEL_SPAN_EVENT_COUNT_LIMIT, 128))
66+
_SPAN_LINK_COUNT_LIMIT = int(environ.get(OTEL_SPAN_LINK_COUNT_LIMIT, 128))
67+
_VALID_ATTR_VALUE_TYPES = (bool, str, int, float)
6868
# pylint: disable=protected-access
69-
TRACE_SAMPLER = sampling._get_from_env_or_default()
69+
_TRACE_SAMPLER = sampling._get_from_env_or_default()
7070

7171

7272
class SpanProcessor:
@@ -333,14 +333,14 @@ def _is_valid_attribute_value(value: types.AttributeValue) -> bool:
333333
if element is None:
334334
continue
335335
element_type = type(element)
336-
if element_type not in VALID_ATTR_VALUE_TYPES:
336+
if element_type not in _VALID_ATTR_VALUE_TYPES:
337337
logger.warning(
338338
"Invalid type %s in attribute value sequence. Expected one of "
339339
"%s or None",
340340
element_type.__name__,
341341
[
342342
valid_type.__name__
343-
for valid_type in VALID_ATTR_VALUE_TYPES
343+
for valid_type in _VALID_ATTR_VALUE_TYPES
344344
],
345345
)
346346
return False
@@ -356,12 +356,12 @@ def _is_valid_attribute_value(value: types.AttributeValue) -> bool:
356356
)
357357
return False
358358

359-
elif not isinstance(value, VALID_ATTR_VALUE_TYPES):
359+
elif not isinstance(value, _VALID_ATTR_VALUE_TYPES):
360360
logger.warning(
361361
"Invalid type %s for attribute value. Expected one of %s or a "
362362
"sequence of those types",
363363
type(value).__name__,
364-
[valid_type.__name__ for valid_type in VALID_ATTR_VALUE_TYPES],
364+
[valid_type.__name__ for valid_type in _VALID_ATTR_VALUE_TYPES],
365365
)
366366
return False
367367
return True
@@ -640,7 +640,7 @@ def __init__(
640640
if links is None:
641641
self._links = self._new_links()
642642
else:
643-
self._links = BoundedList.from_seq(SPAN_LINK_COUNT_LIMIT, links)
643+
self._links = BoundedList.from_seq(_SPAN_LINK_COUNT_LIMIT, links)
644644

645645
def __repr__(self):
646646
return '{}(name="{}", context={})'.format(
@@ -653,11 +653,11 @@ def _new_attributes():
653653

654654
@staticmethod
655655
def _new_events():
656-
return BoundedList(SPAN_EVENT_COUNT_LIMIT)
656+
return BoundedList(_SPAN_EVENT_COUNT_LIMIT)
657657

658658
@staticmethod
659659
def _new_links():
660-
return BoundedList(SPAN_LINK_COUNT_LIMIT)
660+
return BoundedList(_SPAN_LINK_COUNT_LIMIT)
661661

662662
def get_span_context(self):
663663
return self._context
@@ -962,7 +962,7 @@ class TracerProvider(trace_api.TracerProvider):
962962

963963
def __init__(
964964
self,
965-
sampler: sampling.Sampler = TRACE_SAMPLER,
965+
sampler: sampling.Sampler = _TRACE_SAMPLER,
966966
resource: Resource = Resource.create({}),
967967
shutdown_on_exit: bool = True,
968968
active_span_processor: Union[

0 commit comments

Comments
 (0)