Skip to content

Commit fdc2c6c

Browse files
authored
Return unsubscribe function from SettingsDict.subscribe (#47)
2 parents adb681f + 7fbbb40 commit fdc2c6c

File tree

2 files changed

+8
-12
lines changed

2 files changed

+8
-12
lines changed

st3/sublime_lib/settings_dict.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from uuid import uuid4
44
from collections.abc import Mapping
5+
from functools import partial
56

67
from .collection_utils import projection
78

@@ -145,8 +146,9 @@ def update(self, other=[], **kwargs):
145146

146147
def subscribe(self, selector, callback, default_value=None):
147148
"""
148-
Register a calback to be invoked when the a value derived from the
149-
settings object changes.
149+
Register a callback to be invoked when the a value derived from the
150+
settings object changes. Returns a function that when invoked will
151+
unregister the callback.
150152
151153
The derived value depends on the type of `selector`:
152154
@@ -181,10 +183,7 @@ def onchange():
181183

182184
key = str(uuid4())
183185
self.settings.add_on_change(key, onchange)
184-
return key
185-
186-
def unsubscribe(self, key):
187-
self.settings.clear_on_change(key)
186+
return partial(self.settings.clear_on_change, key)
188187

189188

190189
class NamedSettingsDict(SettingsDict):

tests/test_settings_dict.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,6 @@ def tearDown(self):
140140
self.view.window().focus_view(self.view)
141141
self.view.window().run_command("close_file")
142142

143-
if self.fancy and getattr(self, 'key', None):
144-
self.fancy.unsubscribe(self.key)
145-
146143
def test_subscribe(self):
147144
self.fancy['example_setting'] = 1
148145

@@ -152,12 +149,12 @@ def callback(new, old):
152149
nonlocal values
153150
values = (new, old)
154151

155-
self.key = self.fancy.subscribe('example_setting', callback)
152+
unsubscribe = self.fancy.subscribe('example_setting', callback)
156153

157154
self.fancy['example_setting'] = 2
158155
self.assertEqual(values, (2, 1))
159156

160-
self.fancy.unsubscribe(self.key)
157+
unsubscribe()
161158
self.fancy['example_setting'] = 3
162159
self.assertEqual(values, (2, 1))
163160

@@ -173,7 +170,7 @@ def callback(new, old):
173170
nonlocal values
174171
values = new
175172

176-
self.key = self.fancy.subscribe({'example_1', 'example_2', 'example_3'}, callback)
173+
self.fancy.subscribe({'example_1', 'example_2', 'example_3'}, callback)
177174

178175
self.fancy['example_1'] = 10
179176

0 commit comments

Comments
 (0)