Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSascha Silbe <sascha@silbe.org>2009-07-20 12:15:08 (GMT)
committer Sascha Silbe <sascha@silbe.org>2009-07-20 12:15:08 (GMT)
commitb32ab14f31f1f527efdccc4019eb78472aa6a39d (patch)
tree26ca20e16538acd84625dc069f6aad2193a2763a
parent527f5fef6ecde84da4e851064424932ecee0f96d (diff)
several fixes
-rw-r--r--src/sugar/datastore/datastore.py47
-rw-r--r--src/sugar/datastore/dbus_helpers.py18
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,