Skip to content

Commit 7b7ba67

Browse files
authored
Merge branch 'main' into add-type-hints-to-dbapi
2 parents 6ef9de9 + 3ebdb63 commit 7b7ba67

File tree

5 files changed

+39
-18
lines changed

5 files changed

+39
-18
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1717
([#3100](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3100))
1818
- Add support to database stability opt-in in `_semconv` utilities and add tests
1919
([#3111](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3111))
20+
- `opentelemetry-opentelemetry-pymongo` Add `py.typed` file to enable PEP 561
21+
([#3136](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3136))
22+
- `opentelemetry-opentelemetry-requests` Add `py.typed` file to enable PEP 561
23+
([#3135](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3135))
2024
- `opentelemetry-instrumentation-system-metrics` Add `py.typed` file to enable PEP 561
2125
([#3132](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3132))
2226
- `opentelemetry-opentelemetry-sqlite3` Add `py.typed` file to enable PEP 561

instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/__init__.py

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,10 @@ def failed_hook(span, event):
7575
7676
"""
7777

78+
from __future__ import annotations
79+
7880
from logging import getLogger
79-
from typing import Callable, Collection
81+
from typing import Any, Callable, Collection, TypeVar
8082

8183
from pymongo import monitoring
8284

@@ -88,7 +90,7 @@ def failed_hook(span, event):
8890
from opentelemetry.instrumentation.pymongo.version import __version__
8991
from opentelemetry.instrumentation.utils import is_instrumentation_enabled
9092
from opentelemetry.semconv.trace import DbSystemValues, SpanAttributes
91-
from opentelemetry.trace import SpanKind, get_tracer
93+
from opentelemetry.trace import SpanKind, Tracer, get_tracer
9294
from opentelemetry.trace.span import Span
9395
from opentelemetry.trace.status import Status, StatusCode
9496

@@ -98,14 +100,21 @@ def failed_hook(span, event):
98100
ResponseHookT = Callable[[Span, monitoring.CommandSucceededEvent], None]
99101
FailedHookT = Callable[[Span, monitoring.CommandFailedEvent], None]
100102

103+
CommandEvent = TypeVar(
104+
"CommandEvent",
105+
monitoring.CommandStartedEvent,
106+
monitoring.CommandSucceededEvent,
107+
monitoring.CommandFailedEvent,
108+
)
109+
101110

102-
def dummy_callback(span, event): ...
111+
def dummy_callback(span: Span, event: CommandEvent): ...
103112

104113

105114
class CommandTracer(monitoring.CommandListener):
106115
def __init__(
107116
self,
108-
tracer,
117+
tracer: Tracer,
109118
request_hook: RequestHookT = dummy_callback,
110119
response_hook: ResponseHookT = dummy_callback,
111120
failed_hook: FailedHookT = dummy_callback,
@@ -195,10 +204,12 @@ def failed(self, event: monitoring.CommandFailedEvent):
195204
_LOG.exception(hook_exception)
196205
span.end()
197206

198-
def _pop_span(self, event):
207+
def _pop_span(self, event: CommandEvent) -> Span | None:
199208
return self._span_dict.pop(_get_span_dict_key(event), None)
200209

201-
def _get_statement_by_command_name(self, command_name, event):
210+
def _get_statement_by_command_name(
211+
self, command_name: str, event: CommandEvent
212+
) -> str:
202213
statement = command_name
203214
command_attribute = COMMAND_TO_ATTRIBUTE_MAPPING.get(command_name)
204215
command = event.command.get(command_attribute)
@@ -207,14 +218,16 @@ def _get_statement_by_command_name(self, command_name, event):
207218
return statement
208219

209220

210-
def _get_span_dict_key(event):
221+
def _get_span_dict_key(
222+
event: CommandEvent,
223+
) -> int | tuple[int, tuple[str, int | None]]:
211224
if event.connection_id is not None:
212225
return event.request_id, event.connection_id
213226
return event.request_id
214227

215228

216229
class PymongoInstrumentor(BaseInstrumentor):
217-
_commandtracer_instance = None # type CommandTracer
230+
_commandtracer_instance: CommandTracer | None = None
218231
# The instrumentation for PyMongo is based on the event listener interface
219232
# https://api.mongodb.com/python/current/api/pymongo/monitoring.html.
220233
# This interface only allows to register listeners and does not provide
@@ -225,7 +238,7 @@ class PymongoInstrumentor(BaseInstrumentor):
225238
def instrumentation_dependencies(self) -> Collection[str]:
226239
return _instruments
227240

228-
def _instrument(self, **kwargs):
241+
def _instrument(self, **kwargs: Any):
229242
"""Integrate with pymongo to trace it using event listener.
230243
https://api.mongodb.com/python/current/api/pymongo/monitoring.html
231244
@@ -259,6 +272,6 @@ def _instrument(self, **kwargs):
259272
# If already created, just enable it
260273
self._commandtracer_instance.is_enabled = True
261274

262-
def _uninstrument(self, **kwargs):
275+
def _uninstrument(self, **kwargs: Any):
263276
if self._commandtracer_instance is not None:
264277
self._commandtracer_instance.is_enabled = False

instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/py.typed

Whitespace-only changes.

instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/__init__.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,12 @@ def response_hook(span, request_obj, response)
7272
---
7373
"""
7474

75+
from __future__ import annotations
76+
7577
import functools
7678
import types
7779
from timeit import default_timer
78-
from typing import Callable, Collection, Optional
80+
from typing import Any, Callable, Collection, Optional
7981
from urllib.parse import urlparse
8082

8183
from requests.models import PreparedRequest, Response
@@ -146,7 +148,7 @@ def _instrument(
146148
duration_histogram_new: Histogram,
147149
request_hook: _RequestHookT = None,
148150
response_hook: _ResponseHookT = None,
149-
excluded_urls: ExcludeList = None,
151+
excluded_urls: ExcludeList | None = None,
150152
sem_conv_opt_in_mode: _StabilityMode = _StabilityMode.DEFAULT,
151153
):
152154
"""Enables tracing of all requests calls that go through
@@ -164,7 +166,9 @@ def _instrument(
164166

165167
# pylint: disable-msg=too-many-locals,too-many-branches
166168
@functools.wraps(wrapped_send)
167-
def instrumented_send(self, request, **kwargs):
169+
def instrumented_send(
170+
self: Session, request: PreparedRequest, **kwargs: Any
171+
):
168172
if excluded_urls and excluded_urls.url_disabled(request.url):
169173
return wrapped_send(self, request, **kwargs)
170174

@@ -345,7 +349,7 @@ def _uninstrument():
345349
_uninstrument_from(Session)
346350

347351

348-
def _uninstrument_from(instr_root, restore_as_bound_func=False):
352+
def _uninstrument_from(instr_root, restore_as_bound_func: bool = False):
349353
for instr_func_name in ("request", "send"):
350354
instr_func = getattr(instr_root, instr_func_name)
351355
if not getattr(
@@ -361,7 +365,7 @@ def _uninstrument_from(instr_root, restore_as_bound_func=False):
361365
setattr(instr_root, instr_func_name, original)
362366

363367

364-
def get_default_span_name(method):
368+
def get_default_span_name(method: str) -> str:
365369
"""
366370
Default implementation for name_callback, returns HTTP {method_name}.
367371
https://opentelemetry.io/docs/reference/specification/trace/semantic_conventions/http/#name
@@ -385,7 +389,7 @@ class RequestsInstrumentor(BaseInstrumentor):
385389
def instrumentation_dependencies(self) -> Collection[str]:
386390
return _instruments
387391

388-
def _instrument(self, **kwargs):
392+
def _instrument(self, **kwargs: Any):
389393
"""Instruments requests module
390394
391395
Args:
@@ -443,10 +447,10 @@ def _instrument(self, **kwargs):
443447
sem_conv_opt_in_mode=semconv_opt_in_mode,
444448
)
445449

446-
def _uninstrument(self, **kwargs):
450+
def _uninstrument(self, **kwargs: Any):
447451
_uninstrument()
448452

449453
@staticmethod
450-
def uninstrument_session(session):
454+
def uninstrument_session(session: Session):
451455
"""Disables instrumentation on the session object."""
452456
_uninstrument_from(session, restore_as_bound_func=True)

instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/py.typed

Whitespace-only changes.

0 commit comments

Comments
 (0)