From 502b4a86d21dcf6dc2e3b02b0244e11bed504527 Mon Sep 17 00:00:00 2001
From: Sascha Silbe <sascha@silbe.org>
Date: Sun, 24 Jan 2010 19:36:04 +0000
Subject: [PATCH] sugar.datastore.datastore: replace naive listeners with sugar.dispatch.DbusSignal instances
---
src/sugar/datastore/datastore.py | 55 +++++++++++++++++++++++++++-----------
1 files changed, 39 insertions(+), 16 deletions(-)
diff --git a/src/sugar/datastore/datastore.py b/src/sugar/datastore/datastore.py
index 66e29ed..0320cb6 100644
a
|
b
|
DS_DBUS_INTERFACE = "org.laptop.sugar.DataStore" |
40 | 40 | DS_DBUS_PATH = "/org/laptop/sugar/DataStore" |
41 | 41 | |
42 | 42 | _data_store = None |
43 | | _data_store_listener = None |
44 | 43 | |
45 | 44 | |
46 | 45 | def _get_data_store(): |
… |
… |
def _get_data_store(): |
51 | 50 | _data_store = dbus.Interface(_bus.get_object(DS_DBUS_SERVICE, |
52 | 51 | DS_DBUS_PATH), |
53 | 52 | DS_DBUS_INTERFACE) |
54 | | _data_store.connect_to_signal('Created', __datastore_created_cb) |
55 | | _data_store.connect_to_signal('Deleted', __datastore_deleted_cb) |
56 | | _data_store.connect_to_signal('Updated', __datastore_updated_cb) |
57 | 53 | |
58 | 54 | return _data_store |
59 | 55 | |
60 | 56 | |
61 | | def __datastore_created_cb(object_id): |
62 | | metadata = _get_data_store().get_properties(object_id, byte_arrays=True) |
63 | | updated.send(None, object_id=object_id, metadata=metadata) |
| 57 | class DataStoreSignal(dispatch.DbusSignal): |
64 | 58 | |
| 59 | def __init__(self, signal_name, signal_args): |
| 60 | dispatch.DbusSignal.__init__(self, signal_name, signal_args, |
| 61 | bus=dbus.SessionBus(), iface_name=DS_DBUS_INTERFACE, |
| 62 | service_name=DS_DBUS_SERVICE, path=DS_DBUS_PATH) |
| 63 | |
| 64 | |
| 65 | class CreatedSignal(DataStoreSignal): |
| 66 | |
| 67 | def __init__(self): |
| 68 | DataStoreSignal.__init__(self, 'Created', ['metadata', 'object_id']) |
| 69 | |
| 70 | def _relay(self, object_id): |
| 71 | # pylint: disable-msg=W0221 |
| 72 | metadata = _get_data_store().get_properties(object_id, |
| 73 | byte_arrays=True) |
| 74 | self.send(None, metadata=metadata, object_id=object_id) |
65 | 75 | |
66 | | def __datastore_updated_cb(object_id): |
67 | | metadata = _get_data_store().get_properties(object_id, byte_arrays=True) |
68 | | updated.send(None, object_id=object_id, metadata=metadata) |
69 | 76 | |
| 77 | class UpdatedSignal(DataStoreSignal): |
70 | 78 | |
71 | | def __datastore_deleted_cb(object_id): |
72 | | deleted.send(None, object_id=object_id) |
| 79 | def __init__(self): |
| 80 | DataStoreSignal.__init__(self, 'Updated', ['metadata', 'object_id']) |
73 | 81 | |
74 | | created = dispatch.Signal() |
75 | | deleted = dispatch.Signal() |
76 | | updated = dispatch.Signal() |
| 82 | def _relay(self, object_id): |
| 83 | # pylint: disable-msg=W0221 |
| 84 | metadata = _get_data_store().get_properties(object_id, |
| 85 | byte_arrays=True) |
| 86 | self.send(None, metadata=metadata, object_id=object_id) |
77 | 87 | |
78 | | _get_data_store() |
| 88 | |
| 89 | class DeletedSignal(DataStoreSignal): |
| 90 | |
| 91 | def __init__(self): |
| 92 | DataStoreSignal.__init__(self, 'Deleted', ['object_id']) |
| 93 | |
| 94 | def _relay(self, object_id): |
| 95 | # pylint: disable-msg=W0221 |
| 96 | self.send(None, object_id=object_id) |
79 | 97 | |
80 | 98 | |
81 | 99 | class DSMetadata(gobject.GObject): |
… |
… |
def get_unique_values(key): |
518 | 536 | """ |
519 | 537 | return _get_data_store().get_uniquevaluesfor( |
520 | 538 | key, dbus.Dictionary({}, signature='ss')) |
| 539 | |
| 540 | |
| 541 | created = CreatedSignal() |
| 542 | updated = UpdatedSignal() |
| 543 | deleted = DeletedSignal() |