Skip to content

Commit f981213

Browse files
committed
Use wrapt for proxy object
1 parent 8622474 commit f981213

File tree

4 files changed

+207
-23
lines changed

4 files changed

+207
-23
lines changed

monitored_ioloop/monitoring.py

+18-18
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
from dataclasses import dataclass
66
from logging import getLogger
77

8+
import wrapt
9+
810
from monitored_ioloop.formatting_utils import pretty_format_handle, pretty_callback_name
911

1012
logger = getLogger(__name__)
@@ -68,39 +70,40 @@ def decrease_handles_count_thread_safe(self, decrease_by: int) -> None:
6870
self.handles_count -= decrease_by
6971

7072

71-
class MonitoredCallbackWrapper:
73+
class MonitoredCallbackWrapper(wrapt.ObjectProxy): # type: ignore
7274
def __init__(
7375
self,
7476
callback: typing.Callable[..., typing.Any],
7577
monitor_callback: typing.Callable[[IoLoopMonitorState], None],
7678
io_loop_state: IoLoopInnerState,
7779
):
78-
self._original_callback = callback
79-
self._monitor_callback = monitor_callback
80-
self._ioloop_state = io_loop_state
81-
self._added_to_loop_time = time.perf_counter()
82-
self._handle: typing.Optional[Handle] = None
80+
super().__init__(callback)
81+
self._self_original_callback = callback
82+
self._self_monitor_callback = monitor_callback
83+
self._self_ioloop_state = io_loop_state
84+
self._self_added_to_loop_time = time.perf_counter()
85+
self._self_handle: typing.Optional[Handle] = None
8386

8487
def set_handle(self, handle: Handle) -> None:
85-
self._handle = handle
88+
self._self_handle = handle
8689

8790
def __call__(self, *args: typing.Any, **kwargs: typing.Any) -> typing.Any:
88-
loop_lag = time.perf_counter() - self._added_to_loop_time
91+
loop_lag = time.perf_counter() - self._self_added_to_loop_time
8992
start_wall_time = time.perf_counter()
90-
response = self._original_callback(*args, **kwargs)
91-
self._ioloop_state.decrease_handles_count_thread_safe(1)
93+
response = self._self_original_callback(*args, **kwargs)
94+
self._self_ioloop_state.decrease_handles_count_thread_safe(1)
9295
wall_duration = time.perf_counter() - start_wall_time
9396

9497
try:
9598
pretty_name = (
96-
pretty_format_handle(self._handle)
97-
if self._handle
98-
else pretty_callback_name(self._original_callback)
99+
pretty_format_handle(self._self_handle)
100+
if self._self_handle
101+
else pretty_callback_name(self._self_original_callback)
99102
)
100-
self._monitor_callback(
103+
self._self_monitor_callback(
101104
IoLoopMonitorState(
102105
callback_wall_time=wall_duration,
103-
loop_handles_count=self._ioloop_state.handles_count,
106+
loop_handles_count=self._self_ioloop_state.handles_count,
104107
loop_lag=loop_lag,
105108
callback_pretty_name=pretty_name,
106109
)
@@ -109,9 +112,6 @@ def __call__(self, *args: typing.Any, **kwargs: typing.Any) -> typing.Any:
109112
logger.warning("Monitor callback failed.", exc_info=True)
110113
return response
111114

112-
def __getattr__(self, item: str) -> typing.Any:
113-
return getattr(self._original_callback, item)
114-
115115

116116
def wrap_callback_with_monitoring(
117117
callback: typing.Callable[..., typing.Any],

mypy.ini

+3
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,6 @@ show_error_codes = True
1010
warn_unused_ignores = True
1111
warn_redundant_casts = True
1212
strict_equality = True
13+
14+
[mypy-wrapt.*]
15+
ignore_missing_imports = True

0 commit comments

Comments
 (0)