Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar/datastore/datastore.py
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@tomeuvizoso.net>2007-05-29 13:53:58 (GMT)
committer Tomeu Vizoso <tomeu@tomeuvizoso.net>2007-05-29 13:53:58 (GMT)
commitc35db7acf803296aec4185e169cd74fc5f4255e5 (patch)
tree001bba7ba6ac4ce35e73f341d8f8dc1e76bca69d /sugar/datastore/datastore.py
parent53d64a053682d1739326e28f0fe76e940a8f78ec (diff)
Some refactoring of the DataStore API.
Diffstat (limited to 'sugar/datastore/datastore.py')
-rw-r--r--sugar/datastore/datastore.py43
1 files changed, 26 insertions, 17 deletions
diff --git a/sugar/datastore/datastore.py b/sugar/datastore/datastore.py
index 82f5026..52d735f 100644
--- a/sugar/datastore/datastore.py
+++ b/sugar/datastore/datastore.py
@@ -19,38 +19,48 @@ import gobject
from sugar.datastore import dbus_helpers
-class DSObject(gobject.GObject):
+class DSMetadata(gobject.GObject):
__gsignals__ = {
'updated': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
([]))
}
- def __init__(self, object_id, metadata=None, file_path=None):
+ def __init__(self, props={}):
gobject.GObject.__init__(self)
- self.object_id = object_id
- self._metadata = metadata
- self._file_path = file_path
+ self._props = props
def __getitem__(self, key):
- return self.metadata[key]
+ return self._props[key]
def __setitem__(self, key, value):
- if not self.metadata.has_key(key) or self.metadata[key] != value:
- self.metadata[key] = value
+ if not self._props.has_key(key) or self._props[key] != value:
+ self._props[key] = value
self.emit('updated')
def __delitem__(self, key):
- del self.metadata[key]
+ del self._props[key]
+
+ def has_key(self, key):
+ return self._props.has_key(key)
+
+ def get_dictionary(self):
+ return self._props
+
+class DSObject:
+ def __init__(self, object_id, metadata=None, file_path=None):
+ self.object_id = object_id
+ self._metadata = metadata
+ self._file_path = file_path
def get_metadata(self):
if self._metadata is None and not self.object_id is None:
- self.set_metadata(dbus_helpers.get_properties(self.object_id))
+ metadata = DSMetadata(dbus_helpers.get_properties(self.object_id))
+ self._metadata = metadata
return self._metadata
def set_metadata(self, metadata):
if self._metadata != metadata:
self._metadata = metadata
- self.emit('updated')
metadata = property(get_metadata, set_metadata)
@@ -62,7 +72,6 @@ class DSObject(gobject.GObject):
def set_file_path(self, file_path):
if self._file_path != file_path:
self._file_path = file_path
- self.emit('updated')
file_path = property(get_file_path, set_file_path)
@@ -71,23 +80,23 @@ def get(object_id):
metadata = dbus_helpers.get_properties(object_id)
file_path = dbus_helpers.get_filename(object_id)
- ds_object = DSObject(object_id, metadata, file_path)
+ ds_object = DSObject(object_id, DSMetadata(metadata), file_path)
# TODO: register the object for updates
return ds_object
def create():
- return DSObject(object_id=None, metadata={}, file_path=None)
+ return DSObject(object_id=None, metadata=DSMetadata(), file_path=None)
def write(ds_object, reply_handler=None, error_handler=None):
logging.debug('datastore.write')
if ds_object.object_id:
dbus_helpers.update(ds_object.object_id,
- ds_object.metadata,
+ ds_object.metadata.get_dictionary(),
ds_object.file_path,
reply_handler=reply_handler,
error_handler=error_handler)
else:
- ds_object.object_id = dbus_helpers.create(ds_object.metadata,
+ ds_object.object_id = dbus_helpers.create(ds_object.metadata.get_dictionary(),
ds_object.file_path)
# TODO: register the object for updates
logging.debug('Written object %s to the datastore.' % ds_object.object_id)
@@ -114,7 +123,7 @@ def find(query, sorting=None, limit=None, offset=None, reply_handler=None,
object_id = props['uid']
del props['uid']
- ds_object = DSObject(object_id, props, file_path)
+ ds_object = DSObject(object_id, DSMetadata(props), file_path)
objects.append(ds_object)
return objects, total_count