Merge lp:~alecu/ubuntuone-client/cleanup-emit-signals into lp:ubuntuone-client
- cleanup-emit-signals
- Merge into trunk
Proposed by
Alejandro J. Cura
Status: | Merged | ||||
---|---|---|---|---|---|
Approved by: | Manuel de la Peña | ||||
Approved revision: | 1125 | ||||
Merged at revision: | 1126 | ||||
Proposed branch: | lp:~alecu/ubuntuone-client/cleanup-emit-signals | ||||
Merge into: | lp:ubuntuone-client | ||||
Diff against target: |
471 lines (+168/-88) 3 files modified
tests/platform/windows/test_ipc.py (+99/-28) ubuntuone/platform/windows/ipc.py (+18/-20) ubuntuone/platform/windows/ipc_client.py (+51/-40) |
||||
To merge this branch: | bzr merge lp:~alecu/ubuntuone-client/cleanup-emit-signals | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Manuel de la Peña (community) | Approve | ||
Natalia Bidart (community) | Approve | ||
Review via email: mp+73733@code.launchpad.net |
Commit message
Connect each IPC client to the signals it should listen to. (LP: #839060)
Description of the change
Connect each IPC client to the signals it should listen to. (LP: #839060)
To post a comment you must log in.
Revision history for this message
Natalia Bidart (nataliabidart) wrote : | # |
Looks good to me!
review:
Approve
- 1124. By Alejandro J. Cura
-
separate the list of signal handlers from the list of remote calls.
- 1125. By Alejandro J. Cura
-
fix some tests
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'tests/platform/windows/test_ipc.py' | |||
2 | --- tests/platform/windows/test_ipc.py 2011-08-26 00:03:30 +0000 | |||
3 | +++ tests/platform/windows/test_ipc.py 2011-09-02 15:03:18 +0000 | |||
4 | @@ -43,6 +43,7 @@ | |||
5 | 43 | IPCInterface, | 43 | IPCInterface, |
6 | 44 | IPCRoot, | 44 | IPCRoot, |
7 | 45 | PublicFiles, | 45 | PublicFiles, |
8 | 46 | RemoteMeta, | ||
9 | 46 | Shares, | 47 | Shares, |
10 | 47 | SignalBroadcaster, | 48 | SignalBroadcaster, |
11 | 48 | Status, | 49 | Status, |
12 | @@ -58,9 +59,10 @@ | |||
13 | 58 | FoldersClient, | 59 | FoldersClient, |
14 | 59 | FileSystemClient, | 60 | FileSystemClient, |
15 | 60 | PublicFilesClient, | 61 | PublicFilesClient, |
16 | 62 | RemoteClient, | ||
17 | 61 | StatusClient, | 63 | StatusClient, |
18 | 62 | SyncDaemonClient, | 64 | SyncDaemonClient, |
20 | 63 | SharesClient | 65 | SharesClient, |
21 | 64 | ) | 66 | ) |
22 | 65 | 67 | ||
23 | 66 | TEST_PORT = 40404 | 68 | TEST_PORT = 40404 |
24 | @@ -272,6 +274,7 @@ | |||
25 | 272 | """Return the public files remote object.""" | 274 | """Return the public files remote object.""" |
26 | 273 | return self._public_files | 275 | return self._public_files |
27 | 274 | 276 | ||
28 | 277 | |||
29 | 275 | class TestSignalBroadcaster(MockerTestCase): | 278 | class TestSignalBroadcaster(MockerTestCase): |
30 | 276 | """Test the signal broadcaster code.""" | 279 | """Test the signal broadcaster code.""" |
31 | 277 | 280 | ||
32 | @@ -279,13 +282,15 @@ | |||
33 | 279 | super(TestSignalBroadcaster, self).setUp() | 282 | super(TestSignalBroadcaster, self).setUp() |
34 | 280 | self.client = self.mocker.mock() | 283 | self.client = self.mocker.mock() |
35 | 281 | self.broad_caster = SignalBroadcaster() | 284 | self.broad_caster = SignalBroadcaster() |
36 | 282 | self.broad_caster.clients.append(self.client) | ||
37 | 283 | 285 | ||
38 | 284 | def test_remote_register_to_signals(self): | 286 | def test_remote_register_to_signals(self): |
39 | 285 | """Assert that the client was added.""" | 287 | """Assert that the client was added.""" |
40 | 286 | self.mocker.replay() | 288 | self.mocker.replay() |
43 | 287 | self.broad_caster.remote_register_to_signals(self.client) | 289 | signals = ["demo_signal1", "demo_signal2"] |
44 | 288 | self.assertTrue(self.client in self.broad_caster.clients) | 290 | self.broad_caster.remote_register_to_signals(self.client, signals) |
45 | 291 | for signal in signals: | ||
46 | 292 | clients = self.broad_caster.clients_per_signal[signal] | ||
47 | 293 | self.assertTrue(self.client in clients) | ||
48 | 289 | 294 | ||
49 | 290 | def test_emit_signal(self): | 295 | def test_emit_signal(self): |
50 | 291 | """Assert that the client method was called.""" | 296 | """Assert that the client method was called.""" |
51 | @@ -299,6 +304,8 @@ | |||
52 | 299 | deferred.addErrback(ANY, ANY, ANY) | 304 | deferred.addErrback(ANY, ANY, ANY) |
53 | 300 | deferred.addErrback(ANY, ANY, ANY) | 305 | deferred.addErrback(ANY, ANY, ANY) |
54 | 301 | self.mocker.replay() | 306 | self.mocker.replay() |
55 | 307 | signals = [signal_name] | ||
56 | 308 | self.broad_caster.remote_register_to_signals(self.client, signals) | ||
57 | 302 | self.broad_caster.emit_signal(signal_name, first, second, word=word) | 309 | self.broad_caster.emit_signal(signal_name, first, second, word=word) |
58 | 303 | 310 | ||
59 | 304 | def test_emit_signal_dead_reference(self): | 311 | def test_emit_signal_dead_reference(self): |
60 | @@ -310,10 +317,11 @@ | |||
61 | 310 | self.mocker.replay() | 317 | self.mocker.replay() |
62 | 311 | 318 | ||
63 | 312 | sb = SignalBroadcaster() | 319 | sb = SignalBroadcaster() |
66 | 313 | sb.remote_register_to_signals(fake_remote_client) | 320 | sb.remote_register_to_signals(fake_remote_client, [sample_signal]) |
67 | 314 | self.assertIn(fake_remote_client, sb.clients) | 321 | self.assertIn(fake_remote_client, sb.clients_per_signal[sample_signal]) |
68 | 315 | sb.emit_signal(sample_signal) | 322 | sb.emit_signal(sample_signal) |
70 | 316 | self.assertNotIn(fake_remote_client, sb.clients) | 323 | self.assertNotIn(fake_remote_client, |
71 | 324 | sb.clients_per_signal[sample_signal]) | ||
72 | 317 | 325 | ||
73 | 318 | def test_emit_signal_some_dead_some_not(self): | 326 | def test_emit_signal_some_dead_some_not(self): |
74 | 319 | """Test a clean reference after a dead one.""" | 327 | """Test a clean reference after a dead one.""" |
75 | @@ -328,8 +336,8 @@ | |||
76 | 328 | self.mocker.replay() | 336 | self.mocker.replay() |
77 | 329 | 337 | ||
78 | 330 | sb = SignalBroadcaster() | 338 | sb = SignalBroadcaster() |
81 | 331 | sb.remote_register_to_signals(fake_dead_remote) | 339 | sb.remote_register_to_signals(fake_dead_remote, [sample_signal]) |
82 | 332 | sb.remote_register_to_signals(fake_alive_remote) | 340 | sb.remote_register_to_signals(fake_alive_remote, [sample_signal]) |
83 | 333 | sb.emit_signal(sample_signal) | 341 | sb.emit_signal(sample_signal) |
84 | 334 | 342 | ||
85 | 335 | 343 | ||
86 | @@ -360,8 +368,10 @@ | |||
87 | 360 | fake_remote_client = FakeRemoteClient() | 368 | fake_remote_client = FakeRemoteClient() |
88 | 361 | 369 | ||
89 | 362 | sb = SignalBroadcaster() | 370 | sb = SignalBroadcaster() |
92 | 363 | sb.remote_register_to_signals(fake_remote_client) | 371 | signals = [fake_remote_client.missing_signal] |
93 | 364 | self.assertIn(fake_remote_client, sb.clients) | 372 | sb.remote_register_to_signals(fake_remote_client, signals) |
94 | 373 | sb_clients = sb.clients_per_signal[fake_remote_client.missing_signal] | ||
95 | 374 | self.assertIn(fake_remote_client, sb_clients) | ||
96 | 365 | sb.emit_signal(fake_remote_client.missing_signal) | 375 | sb.emit_signal(fake_remote_client.missing_signal) |
97 | 366 | 376 | ||
98 | 367 | expected = ( | 377 | expected = ( |
99 | @@ -379,8 +389,10 @@ | |||
100 | 379 | fake_remote_client = FakeRemoteClient() | 389 | fake_remote_client = FakeRemoteClient() |
101 | 380 | 390 | ||
102 | 381 | sb = SignalBroadcaster() | 391 | sb = SignalBroadcaster() |
105 | 382 | sb.remote_register_to_signals(fake_remote_client) | 392 | signals = [fake_remote_client.failing_signal] |
106 | 383 | self.assertIn(fake_remote_client, sb.clients) | 393 | sb.remote_register_to_signals(fake_remote_client, signals) |
107 | 394 | sb_clients = sb.clients_per_signal[fake_remote_client.failing_signal] | ||
108 | 395 | self.assertIn(fake_remote_client, sb_clients) | ||
109 | 384 | sb.emit_signal(fake_remote_client.failing_signal) | 396 | sb.emit_signal(fake_remote_client.failing_signal) |
110 | 385 | 397 | ||
111 | 386 | expected = ( | 398 | expected = ( |
112 | @@ -392,11 +404,38 @@ | |||
113 | 392 | self.assertIn(expected, warnings) | 404 | self.assertIn(expected, warnings) |
114 | 393 | 405 | ||
115 | 394 | 406 | ||
116 | 407 | class FakeRemoteObject(object): | ||
117 | 408 | """A test helper.""" | ||
118 | 409 | |||
119 | 410 | def __init__(self): | ||
120 | 411 | """Initialize this test helper.""" | ||
121 | 412 | self.called = [] | ||
122 | 413 | |||
123 | 414 | def callRemote(self, *args): | ||
124 | 415 | """A remote call to this object.""" | ||
125 | 416 | self.called.append(args) | ||
126 | 417 | |||
127 | 418 | |||
128 | 419 | class RemoteClientTestCase(TestCase): | ||
129 | 420 | """Tests for the RemoteClient class.""" | ||
130 | 421 | |||
131 | 422 | def test_register_to_signals(self): | ||
132 | 423 | """Test the register_to_signals method.""" | ||
133 | 424 | fake_remote_object = FakeRemoteObject() | ||
134 | 425 | client = RemoteClient(fake_remote_object) | ||
135 | 426 | client.signal_handlers = ["on_abc"] | ||
136 | 427 | client.register_to_signals() | ||
137 | 428 | expected = [ | ||
138 | 429 | ("register_to_signals", client, client.signal_handlers) | ||
139 | 430 | ] | ||
140 | 431 | self.assertEqual(fake_remote_object.called, expected) | ||
141 | 432 | |||
142 | 433 | |||
143 | 395 | class TestStatusEmitSignals(PerspectiveBrokerTestCase, MockerTestCase): | 434 | class TestStatusEmitSignals(PerspectiveBrokerTestCase, MockerTestCase): |
144 | 396 | """Tests that the emit methods are correct.""" | 435 | """Tests that the emit methods are correct.""" |
145 | 397 | 436 | ||
146 | 398 | def setUp(self): | 437 | def setUp(self): |
148 | 399 | """Setup tests.""" | 438 | """Setup tests.""" |
149 | 400 | super(TestStatusEmitSignals, self).setUp() | 439 | super(TestStatusEmitSignals, self).setUp() |
150 | 401 | self.signal_method = self.mocker.mock() | 440 | self.signal_method = self.mocker.mock() |
151 | 402 | self.status.syncdaemon_status = self.mocker.mock() | 441 | self.status.syncdaemon_status = self.mocker.mock() |
152 | @@ -885,21 +924,11 @@ | |||
153 | 885 | root = yield self.client_factory.getRootObject() | 924 | root = yield self.client_factory.getRootObject() |
154 | 886 | remote = yield root.callRemote('get_status') | 925 | remote = yield root.callRemote('get_status') |
155 | 887 | client = StatusClient(remote) | 926 | client = StatusClient(remote) |
156 | 927 | # set the cb | ||
157 | 928 | callback_names = [signal + "_cb" for signal in client.signal_handlers] | ||
158 | 888 | yield client.register_to_signals() | 929 | yield client.register_to_signals() |
173 | 889 | # set the cb | 930 | for callback_name in callback_names: |
174 | 890 | for signal in ['on_content_queue_changed_cb', | 931 | setattr(client, callback_name, self.mocker.mock()) |
161 | 891 | 'on_invalid_name_cb', | ||
162 | 892 | 'on_broken_node_cb', | ||
163 | 893 | 'on_status_changed_cb', | ||
164 | 894 | 'on_download_started_cb', | ||
165 | 895 | 'on_download_file_progress_cb', | ||
166 | 896 | 'on_download_finished_cb', | ||
167 | 897 | 'on_upload_started_cb', | ||
168 | 898 | 'on_upload_file_progress_cb', | ||
169 | 899 | 'on_upload_finished_cb', | ||
170 | 900 | 'on_account_changed_cb', | ||
171 | 901 | 'on_metaqueue_changed_cb']: | ||
172 | 902 | setattr(client, signal, self.mocker.mock()) | ||
175 | 903 | defer.returnValue(client) | 932 | defer.returnValue(client) |
176 | 904 | 933 | ||
177 | 905 | def test_current_status(self): | 934 | def test_current_status(self): |
178 | @@ -3119,6 +3148,48 @@ | |||
179 | 3119 | self.sender.handle_default(event_name, **kwargs) | 3148 | self.sender.handle_default(event_name, **kwargs) |
180 | 3120 | 3149 | ||
181 | 3121 | 3150 | ||
182 | 3151 | class RemoteMetaTestCase(TestCase): | ||
183 | 3152 | """Tests for the RemoteMeta metaclass.""" | ||
184 | 3153 | |||
185 | 3154 | def test_remote_calls_renamed(self): | ||
186 | 3155 | """The remote_calls are renamed.""" | ||
187 | 3156 | test_token = object() | ||
188 | 3157 | |||
189 | 3158 | class TestClass(object): | ||
190 | 3159 | """A class for testing.""" | ||
191 | 3160 | |||
192 | 3161 | __metaclass__ = RemoteMeta | ||
193 | 3162 | |||
194 | 3163 | remote_calls = ['test_method'] | ||
195 | 3164 | |||
196 | 3165 | def test_method(self): | ||
197 | 3166 | """Fake call.""" | ||
198 | 3167 | return test_token | ||
199 | 3168 | |||
200 | 3169 | tc = TestClass() | ||
201 | 3170 | self.assertEquals(tc.test_method(), test_token) | ||
202 | 3171 | self.assertEquals(tc.remote_test_method(), test_token) | ||
203 | 3172 | |||
204 | 3173 | def test_signal_handlers_renamed(self): | ||
205 | 3174 | """The signal_handlers are renamed.""" | ||
206 | 3175 | test_token = object() | ||
207 | 3176 | |||
208 | 3177 | class TestClass(object): | ||
209 | 3178 | """A class for testing.""" | ||
210 | 3179 | |||
211 | 3180 | __metaclass__ = RemoteMeta | ||
212 | 3181 | |||
213 | 3182 | signal_handlers = ['test_signal_handler'] | ||
214 | 3183 | |||
215 | 3184 | def test_signal_handler(self): | ||
216 | 3185 | """Fake call.""" | ||
217 | 3186 | return test_token | ||
218 | 3187 | |||
219 | 3188 | tc = TestClass() | ||
220 | 3189 | self.assertEquals(tc.test_signal_handler(), test_token) | ||
221 | 3190 | self.assertEquals(tc.remote_test_signal_handler(), test_token) | ||
222 | 3191 | |||
223 | 3192 | |||
224 | 3122 | class TestIPCRoot(BaseIPCTestCase): | 3193 | class TestIPCRoot(BaseIPCTestCase): |
225 | 3123 | """Ensure that the IPCRoot works as expected.""" | 3194 | """Ensure that the IPCRoot works as expected.""" |
226 | 3124 | 3195 | ||
227 | 3125 | 3196 | ||
228 | === modified file 'ubuntuone/platform/windows/ipc.py' | |||
229 | --- ubuntuone/platform/windows/ipc.py 2011-08-26 00:03:30 +0000 | |||
230 | +++ ubuntuone/platform/windows/ipc.py 2011-09-02 15:03:18 +0000 | |||
231 | @@ -20,6 +20,7 @@ | |||
232 | 20 | 20 | ||
233 | 21 | import logging | 21 | import logging |
234 | 22 | 22 | ||
235 | 23 | from collections import defaultdict | ||
236 | 23 | from threading import Thread | 24 | from threading import Thread |
237 | 24 | 25 | ||
238 | 25 | from twisted.internet import defer, reactor | 26 | from twisted.internet import defer, reactor |
239 | @@ -139,10 +140,10 @@ | |||
240 | 139 | """ | 140 | """ |
241 | 140 | 141 | ||
242 | 141 | def __new__(cls, name, bases, attrs): | 142 | def __new__(cls, name, bases, attrs): |
247 | 142 | remote_calls = attrs.get('remote_calls', None) | 143 | remote_calls = attrs.get('remote_calls', []) |
248 | 143 | if remote_calls: | 144 | signal_handlers = attrs.get('signal_handlers', []) |
249 | 144 | for current in remote_calls: | 145 | for current in remote_calls + signal_handlers: |
250 | 145 | attrs['remote_' + current] = attrs[current] | 146 | attrs['remote_' + current] = attrs[current] |
251 | 146 | return super(RemoteMeta, cls).__new__(cls, name, bases, attrs) | 147 | return super(RemoteMeta, cls).__new__(cls, name, bases, attrs) |
252 | 147 | 148 | ||
253 | 148 | 149 | ||
254 | @@ -154,7 +155,7 @@ | |||
255 | 154 | 155 | ||
256 | 155 | def __init__(self): | 156 | def __init__(self): |
257 | 156 | """Create a new instance.""" | 157 | """Create a new instance.""" |
259 | 157 | self.clients = [] | 158 | self.clients_per_signal = defaultdict(set) |
260 | 158 | 159 | ||
261 | 159 | def _ignore_no_such_method(self, failure, signal_name, current_client): | 160 | def _ignore_no_such_method(self, failure, signal_name, current_client): |
262 | 160 | """NoSuchMethod is not an error, ignore it.""" | 161 | """NoSuchMethod is not an error, ignore it.""" |
263 | @@ -167,33 +168,29 @@ | |||
264 | 167 | current_client, failure.value) | 168 | current_client, failure.value) |
265 | 168 | logger.warning('Traceback is:\n%s', failure.printDetailedTraceback()) | 169 | logger.warning('Traceback is:\n%s', failure.printDetailedTraceback()) |
266 | 169 | 170 | ||
273 | 170 | def remote_register_to_signals(self, client): | 171 | def remote_register_to_signals(self, client, signals): |
274 | 171 | """Allow a client to register to a signal.""" | 172 | """Allow a client to register to some signals.""" |
275 | 172 | if client not in self.clients: | 173 | for signal in signals: |
276 | 173 | self.clients.append(client) | 174 | self.clients_per_signal[signal].add(client) |
271 | 174 | else: | ||
272 | 175 | logger.warning('Client %s tried to register twice.', client) | ||
277 | 176 | 175 | ||
278 | 177 | def remote_unregister_to_signals(self, client): | 176 | def remote_unregister_to_signals(self, client): |
285 | 178 | """Allow a client to register to a signal.""" | 177 | """Allow a client to unregister from the signal.""" |
286 | 179 | if client in self.clients: | 178 | for connected_clients in self.clients_per_signal.values(): |
287 | 180 | self.clients.remove(client) | 179 | if client in connected_clients: |
288 | 181 | else: | 180 | connected_clients.remove(client) |
283 | 182 | logger.warning('Tried to remove %s when was not registered.', | ||
284 | 183 | client) | ||
289 | 184 | 181 | ||
290 | 185 | def emit_signal(self, signal_name, *args, **kwargs): | 182 | def emit_signal(self, signal_name, *args, **kwargs): |
291 | 186 | """Emit the given signal to the clients.""" | 183 | """Emit the given signal to the clients.""" |
292 | 187 | logger.debug("emitting %r to all connected clients.", signal_name) | 184 | logger.debug("emitting %r to all connected clients.", signal_name) |
295 | 188 | dead_clients = [] | 185 | dead_clients = set() |
296 | 189 | for current_client in self.clients: | 186 | for current_client in self.clients_per_signal[signal_name]: |
297 | 190 | try: | 187 | try: |
298 | 191 | d = current_client.callRemote(signal_name, *args, **kwargs) | 188 | d = current_client.callRemote(signal_name, *args, **kwargs) |
299 | 192 | d.addErrback(self._ignore_no_such_method, signal_name, | 189 | d.addErrback(self._ignore_no_such_method, signal_name, |
300 | 193 | current_client) | 190 | current_client) |
301 | 194 | d.addErrback(self._other_failure, signal_name, current_client) | 191 | d.addErrback(self._other_failure, signal_name, current_client) |
302 | 195 | except DeadReferenceError: | 192 | except DeadReferenceError: |
304 | 196 | dead_clients.append(current_client) | 193 | dead_clients.add(current_client) |
305 | 197 | for client in dead_clients: | 194 | for client in dead_clients: |
306 | 198 | self.remote_unregister_to_signals(client) | 195 | self.remote_unregister_to_signals(client) |
307 | 199 | 196 | ||
308 | @@ -379,6 +376,7 @@ | |||
309 | 379 | 376 | ||
310 | 380 | def __init__(self, root, main, volume_manager, action_queue): | 377 | def __init__(self, root, main, volume_manager, action_queue): |
311 | 381 | """ Creates the instance.""" | 378 | """ Creates the instance.""" |
312 | 379 | super(SyncDaemon, self).__init__() | ||
313 | 382 | self.service = SyncdaemonService(root, main, volume_manager, | 380 | self.service = SyncdaemonService(root, main, volume_manager, |
314 | 383 | action_queue) | 381 | action_queue) |
315 | 384 | self.clients = [] | 382 | self.clients = [] |
316 | 385 | 383 | ||
317 | === modified file 'ubuntuone/platform/windows/ipc_client.py' | |||
318 | --- ubuntuone/platform/windows/ipc_client.py 2011-07-15 17:03:13 +0000 | |||
319 | +++ ubuntuone/platform/windows/ipc_client.py 2011-09-02 15:03:18 +0000 | |||
320 | @@ -1,6 +1,7 @@ | |||
321 | 1 | # -*- coding: utf-8 -*- | 1 | # -*- coding: utf-8 -*- |
322 | 2 | # | 2 | # |
324 | 3 | # Author: Manuel de la Pena<manuel@canonical.com> | 3 | # Authors: Manuel de la Pena <manuel@canonical.com> |
325 | 4 | # Alejandro J. Cura <alecu@canonical.com> | ||
326 | 4 | # | 5 | # |
327 | 5 | # Copyright 2011 Canonical Ltd. | 6 | # Copyright 2011 Canonical Ltd. |
328 | 6 | # | 7 | # |
329 | @@ -65,13 +66,16 @@ | |||
330 | 65 | class RemoteClient(object): | 66 | class RemoteClient(object): |
331 | 66 | """Represent a client for remote calls.""" | 67 | """Represent a client for remote calls.""" |
332 | 67 | 68 | ||
333 | 69 | signal_handlers = [] | ||
334 | 70 | |||
335 | 68 | def __init__(self, remote_object): | 71 | def __init__(self, remote_object): |
336 | 69 | """Create instance.""" | 72 | """Create instance.""" |
337 | 70 | self.remote = remote_object | 73 | self.remote = remote_object |
338 | 71 | 74 | ||
339 | 72 | def register_to_signals(self): | 75 | def register_to_signals(self): |
340 | 73 | """Register to the signals.""" | 76 | """Register to the signals.""" |
342 | 74 | return self.remote.callRemote('register_to_signals', self) | 77 | return self.remote.callRemote('register_to_signals', self, |
343 | 78 | self.signal_handlers) | ||
344 | 75 | 79 | ||
345 | 76 | def unregister_to_signals(self): | 80 | def unregister_to_signals(self): |
346 | 77 | """Register to the signals.""" | 81 | """Register to the signals.""" |
347 | @@ -124,18 +128,20 @@ | |||
348 | 124 | __metaclass__ = RemoteMeta | 128 | __metaclass__ = RemoteMeta |
349 | 125 | 129 | ||
350 | 126 | # calls that will be accessible remotely | 130 | # calls that will be accessible remotely |
363 | 127 | remote_calls = ['on_content_queue_changed', | 131 | signal_handlers = [ |
364 | 128 | 'on_invalid_name', | 132 | 'on_content_queue_changed', |
365 | 129 | 'on_broken_node', | 133 | 'on_invalid_name', |
366 | 130 | 'on_status_changed', | 134 | 'on_broken_node', |
367 | 131 | 'on_download_started', | 135 | 'on_status_changed', |
368 | 132 | 'on_download_file_progress', | 136 | 'on_download_started', |
369 | 133 | 'on_download_finished', | 137 | 'on_download_file_progress', |
370 | 134 | 'on_upload_started', | 138 | 'on_download_finished', |
371 | 135 | 'on_upload_file_progress', | 139 | 'on_upload_started', |
372 | 136 | 'on_upload_finished', | 140 | 'on_upload_file_progress', |
373 | 137 | 'on_account_changed', | 141 | 'on_upload_finished', |
374 | 138 | 'on_metaqueue_changed'] | 142 | 'on_account_changed', |
375 | 143 | 'on_metaqueue_changed', | ||
376 | 144 | ] | ||
377 | 139 | 145 | ||
378 | 140 | def __init__(self, remote_status): | 146 | def __init__(self, remote_status): |
379 | 141 | """Creates the instance.""" | 147 | """Creates the instance.""" |
380 | @@ -228,7 +234,7 @@ | |||
381 | 228 | __metaclass__ = RemoteMeta | 234 | __metaclass__ = RemoteMeta |
382 | 229 | 235 | ||
383 | 230 | # calls that will be accessible remotely | 236 | # calls that will be accessible remotely |
385 | 231 | remote_calls = ['on_event',] | 237 | signal_handlers = ['on_event',] |
386 | 232 | 238 | ||
387 | 233 | def __init__(self, remote_events): | 239 | def __init__(self, remote_events): |
388 | 234 | """Creates the instance.""" | 240 | """Creates the instance.""" |
389 | @@ -249,8 +255,7 @@ | |||
390 | 249 | __metaclass__ = RemoteMeta | 255 | __metaclass__ = RemoteMeta |
391 | 250 | 256 | ||
392 | 251 | # calls that will be accessible remotely | 257 | # calls that will be accessible remotely |
395 | 252 | remote_calls = ['on_root_mismatch', | 258 | signal_handlers = ['on_root_mismatch', 'on_quota_exceeded'] |
394 | 253 | 'on_quota_exceeded'] | ||
396 | 254 | 259 | ||
397 | 255 | def __init__(self, remote_daemon): | 260 | def __init__(self, remote_daemon): |
398 | 256 | """Creates the instance.""" | 261 | """Creates the instance.""" |
399 | @@ -332,17 +337,19 @@ | |||
400 | 332 | __metaclass__ = RemoteMeta | 337 | __metaclass__ = RemoteMeta |
401 | 333 | 338 | ||
402 | 334 | # calls that will be accessible remotely | 339 | # calls that will be accessible remotely |
414 | 335 | remote_calls = ['on_share_deleted', | 340 | signal_handlers = [ |
415 | 336 | 'on_share_changed', | 341 | 'on_share_deleted', |
416 | 337 | 'on_share_delete_error', | 342 | 'on_share_changed', |
417 | 338 | 'on_share_created', | 343 | 'on_share_delete_error', |
418 | 339 | 'on_share_create_error', | 344 | 'on_share_created', |
419 | 340 | 'on_share_answer_response', | 345 | 'on_share_create_error', |
420 | 341 | 'on_new_share', | 346 | 'on_share_answer_response', |
421 | 342 | 'on_share_subscribed', | 347 | 'on_new_share', |
422 | 343 | 'on_share_subscribe_error', | 348 | 'on_share_subscribed', |
423 | 344 | 'on_share_unsubscribed', | 349 | 'on_share_subscribe_error', |
424 | 345 | 'on_share_unsubscribe_error'] | 350 | 'on_share_unsubscribed', |
425 | 351 | 'on_share_unsubscribe_error', | ||
426 | 352 | ] | ||
427 | 346 | 353 | ||
428 | 347 | def __init__(self, remote_shares): | 354 | def __init__(self, remote_shares): |
429 | 348 | """Create the instance.""" | 355 | """Create the instance.""" |
430 | @@ -556,14 +563,16 @@ | |||
431 | 556 | __metaclass__ = RemoteMeta | 563 | __metaclass__ = RemoteMeta |
432 | 557 | 564 | ||
433 | 558 | # calls that will be accessible remotely | 565 | # calls that will be accessible remotely |
442 | 559 | remote_calls = ['on_folder_created', | 566 | signal_handlers = [ |
443 | 560 | 'on_folder_create_error', | 567 | 'on_folder_created', |
444 | 561 | 'on_folder_deleted', | 568 | 'on_folder_create_error', |
445 | 562 | 'on_folder_delete_error', | 569 | 'on_folder_deleted', |
446 | 563 | 'on_folder_subscribed', | 570 | 'on_folder_delete_error', |
447 | 564 | 'on_folder_subscribe_error', | 571 | 'on_folder_subscribed', |
448 | 565 | 'on_folder_unsubscribed', | 572 | 'on_folder_subscribe_error', |
449 | 566 | 'on_folder_unsubscribe_error'] | 573 | 'on_folder_unsubscribed', |
450 | 574 | 'on_folder_unsubscribe_error', | ||
451 | 575 | ] | ||
452 | 567 | 576 | ||
453 | 568 | def __init__(self, remote_folders): | 577 | def __init__(self, remote_folders): |
454 | 569 | """Creates the instance.""" | 578 | """Creates the instance.""" |
455 | @@ -636,10 +645,12 @@ | |||
456 | 636 | __metaclass__ = RemoteMeta | 645 | __metaclass__ = RemoteMeta |
457 | 637 | 646 | ||
458 | 638 | # calls that will be accessible remotely | 647 | # calls that will be accessible remotely |
463 | 639 | remote_calls = ['on_public_access_changed', | 648 | signal_handlers = [ |
464 | 640 | 'on_public_access_change_error', | 649 | 'on_public_access_changed', |
465 | 641 | 'on_public_files_list', | 650 | 'on_public_access_change_error', |
466 | 642 | 'on_public_files_list_error'] | 651 | 'on_public_files_list', |
467 | 652 | 'on_public_files_list_error', | ||
468 | 653 | ] | ||
469 | 643 | 654 | ||
470 | 644 | def __init__(self, remote_public_files): | 655 | def __init__(self, remote_public_files): |
471 | 645 | super(PublicFilesClient, self).__init__(remote_public_files) | 656 | super(PublicFilesClient, self).__init__(remote_public_files) |
A small comment, sending the entire collection of remote_calls to be signals seems wrong to me. Because remove_calls can be all the calls that can be remotly called from the client. I know that at this point we just have signals.. but who knows, what about using the @signal decorator to create a signals collection? Or at least a subset of all the remote_calls.