diff options
author | Sascha Silbe <sascha@silbe.org> | 2009-07-20 12:15:08 (GMT) |
---|---|---|
committer | Sascha Silbe <sascha@silbe.org> | 2009-07-20 12:15:08 (GMT) |
commit | b32ab14f31f1f527efdccc4019eb78472aa6a39d (patch) | |
tree | 26ca20e16538acd84625dc069f6aad2193a2763a | |
parent | 527f5fef6ecde84da4e851064424932ecee0f96d (diff) |
several fixes
-rw-r--r-- | src/sugar/datastore/datastore.py | 47 | ||||
-rw-r--r-- | src/sugar/datastore/dbus_helpers.py | 18 |
2 files changed, 41 insertions, 24 deletions
diff --git a/src/sugar/datastore/datastore.py b/src/sugar/datastore/datastore.py index 5b12bbf..36ab58e 100644 --- a/src/sugar/datastore/datastore.py +++ b/src/sugar/datastore/datastore.py @@ -42,7 +42,7 @@ class DSMetadata(gobject.GObject): if not props: self._props = {} else: - self._props = props + self._props = dict(props) default_keys = ['bundle_id', 'activity_id', 'mime_type', 'title_set_by_user'] @@ -159,9 +159,7 @@ class DSObject(object): def get(object_id): logging.debug('datastore.get %r' % (object_id,)) tree_id, version_id = object_id - metadata = dbus_helpers.find({'tree_id': tree_id, - 'version_id': version_id}, {})[0] - + metadata = get_metadata(object_id) ds_object = DSObject(tree_id, version_id, DSMetadata(metadata), None) # TODO: register the object for updates return ds_object @@ -170,19 +168,33 @@ def create(): metadata = DSMetadata() return DSObject(tree_id=None, version_id=None, metadata=metadata, file_path=None) +def _write_reply_handler(ds_object, tree_id, version_id, user_handler) : + ds_object.object_id = (tree_id, version_id) + # TODO: eliminate redundancy + ds_object.metadata['tree_id'] = ds_object.tree_id + ds_object.metadata['version_id'] = ds_object.version_id + user_handler(tree_id, version_id) + def write(ds_object, transfer_ownership=False, reply_handler=None, error_handler=None, timeout=-1): logging.debug('datastore.write') metadata = ds_object.metadata.get_dictionary() - file_path = ds_object.get_file_path(fetch=False) - if file_path is None: - file_path = '' + file_path = ds_object.get_file_path(fetch=False) or '' + + if reply_handler and error_handler : + w_reply_handler = (lambda tree_id, version_id, reply_handler=reply_handler: + _write_reply_handler(tree_id, version_id, reply_handler)) + + return dbus_helpers.save(ds_object.tree_id or '', + ds_object.version_id or '', metadata, file_path, + transfer_ownership, + reply_handler=reply_handler, error_handler=error_handler, + timeout=timeout) ds_object.object_id = dbus_helpers.save(ds_object.tree_id, ds_object.version_id, metadata, file_path, transfer_ownership, - reply_handler=reply_handler, error_handler=error_handler, timeout=timeout) ds_object.metadata['tree_id'] = ds_object.tree_id @@ -201,8 +213,12 @@ def delete(object_id): def get_metadata(object_id, metadata_names=[]) : tree_id, version_id = object_id - res = find({'tree_id': tree_id, 'version_id': version_id}) - return (res and res[0]) or None + options = {} + if metadata_names : + options['metadata'] = metadata_names + + entries, count = dbus_helpers.find({'tree_id': tree_id, 'version_id': version_id}, options) + return (entries and entries[0]) or None def find(query, options={}, sorting=None, limit=None, offset=None, properties=None, reply_handler=None, error_handler=None): @@ -295,21 +311,22 @@ class DatastoreListener(object): # have already been collected pass - def _datastore_saved_cb(self, tree_id, version_id): - metadata = get_metadata((tree_id, version_id)) + def _datastore_saved_cb(self, tree_id, parent_id, child_id): + metadata = get_metadata((tree_id, child_id)) + # TODO: pass parent_id self.saved.send(self, metadata=metadata) - def _datastore_changedMetadata_cb(self, tree_id, version_id): + def _datastore_changedMetadata_cb(self, tree_id, version_id, metadata): metadata = get_metadata((tree_id, version_id)) self.changedMetadata.send(self, metadata=metadata) def _datastore_deleted_cb(self, tree_id, version_id): self.deleted.send(self, object_id=(tree_id, version_id)) - def _datastore_ready_cb(self): + def _datastore_ready_cb(self, **kwargs): self.ready.send(self) - def _datastore_stopped_cb(self): + def _datastore_stopped_cb(self, **kwargs): self.stopped.send(self) diff --git a/src/sugar/datastore/dbus_helpers.py b/src/sugar/datastore/dbus_helpers.py index 2f02695..588e750 100644 --- a/src/sugar/datastore/dbus_helpers.py +++ b/src/sugar/datastore/dbus_helpers.py @@ -42,22 +42,22 @@ def _get_data_store(): DS_DBUS_INTERFACE) return _data_store +# TODO: convert DBus types to native types for return values, esp. dbus.Dictionary def save(tree_id, parent_id, metadata, path, delete_after=False, reply_handler=None, error_handler=None, timeout=-1): - debug_props = properties.copy() + debug_props = metadata.copy() if debug_props.has_key("preview"): debug_props["preview"] = "<omitted>" logging.debug('dbus_helpers.save: %s, %s, %s, %s, %s', - tree_id, version_id, filename, debug_props, transfer_ownership) + tree_id, parent_id, path, debug_props, delete_after) if reply_handler and error_handler: - return _get_data_store().save(tree_id, parent_id, dbus.Dictionary(metadata), path, - delete_after, - reply_handler=reply_handler, - error_handler=error_handler, - timeout=timeout) + return _get_data_store().save(tree_id or '', parent_id or '', + dbus.Dictionary(metadata), path, delete_after, + reply_handler=reply_handler, error_handler=error_handler, + timeout=timeout) else: - return _get_data_store().save(tree_id, parent_id, dbus.Dictionary(metadata), - path, delete_after) + return _get_data_store().save(tree_id or '', parent_id or '', + dbus.Dictionary(metadata), path, delete_after) def change_metadata(tree_id, version_id, metadata): logging.debug('dbus_helpers.change_metadata: (%r, %r, %r)', tree_id, |