From c35db7acf803296aec4185e169cd74fc5f4255e5 Mon Sep 17 00:00:00 2001 From: Tomeu Vizoso Date: Tue, 29 May 2007 13:53:58 +0000 Subject: Some refactoring of the DataStore API. --- (limited to 'sugar/datastore') 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 -- cgit v0.9.1