8000 Simplify the internal API to connect picklable callbacks. · matplotlib/matplotlib@4caa5ba · GitHub
[go: up one dir, main page]

Skip to content

Commit 4caa5ba

Browse files
committed
Simplify the internal API to connect picklable callbacks.
The API may be made public in the future, but right now the point is only to make its internal use more ergonomic as it can be helpful in some other internal places too (to be updated in a separate patch).
1 parent a093342 commit 4caa5ba

File tree

4 files changed

+21
-14
lines changed

4 files changed

+21
-14
lines changed

lib/matplotlib/axes/_base.py

Lines changed: 2 additions & 3 deletions
8000
Original file line numberDiff line numberDiff line change
@@ -658,9 +658,8 @@ def __init__(self, fig, rect,
658658
self._internal_update(kwargs)
659659

660660
for name, axis in self._axis_map.items():
661-
axis.callbacks._pickled_cids.add(
662-
axis.callbacks.connect(
663-
'units', self._unit_change_handler(name)))
661+
axis.callbacks._connect_picklable(
662+
'units', self._unit_change_handler(name))
664663

665664
rcParams = mpl.rcParams
666665
self.tick_params(

lib/matplotlib/cbook/__init__.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,16 @@ def connect(self, signal, func):
236236
self.callbacks[signal][cid] = proxy
237237
return cid
238238

239+
def _connect_picklable(self, signal, func):
240+
"""
241+
Like `.connect`, but the callback is kept when pickling/unpickling.
242+
243+
Currently internal-use only.
244+
"""
245+
cid = self.connect(signal, func)
246+
self._pickled_cids.add(cid)
247+
return cid
248+
239249
# Keep a reference to sys.is_finalizing, as sys may have been cleared out
240250
# at that point.
241251
def _remove_proxy(self, proxy, *, _is_finalizing=sys.is_finalizing):

lib/matplotlib/tests/test_cbook.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,10 +183,10 @@ def setup(self):
183183
self.callbacks = cbook.CallbackRegistry()
184184

185185
def connect(self, s, func, pickle):
186-
cid = self.callbacks.connect(s, func)
187186
if pickle:
188-
self.callbacks._pickled_cids.add(cid)
189-
return cid
187+
return self.callbacks.connect(s, func)
188+
else:
189+
return self.callbacks._connect_picklable(s, func)
190190

191191
def disconnect(self, cid):
192192
return self.callbacks.disconnect(cid)

lib/mpl_toolkits/mplot3d/axes3d.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -157,14 +157,12 @@ def __init__(
157157
self.fmt_zdata = None
158158

159159
self.mouse_init()
160-
self.figure.canvas.callbacks._pickled_cids.update({
161-
self.figure.canvas.mpl_connect(
162-
'motion_notify_event', self._on_move),
163-
self.figure.canvas.mpl_connect(
164-
'button_press_event', self._button_press),
165-
self.figure.canvas.mpl_connect(
166-
'button_release_event', self._button_release),
167-
})
160+
self.figure.canvas.callbacks._connect_picklable(
161+
'motion_notify_event', self._on_move)
162+
self.figure.canvas.callbacks._connect_picklable(
163+
'button_press_event', self._button_press)
164+
self.figure.canvas.callbacks._connect_picklable(
165+
'button_release_event', self._button_release)
168166
self.set_top_view()
169167

170168
self.patch.set_linewidth(0)

0 commit comments

Comments
 (0)
0