Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@tomeuvizoso.net>2007-03-04 10:27:33 (GMT)
committer Tomeu Vizoso <tomeu@tomeuvizoso.net>2007-03-04 10:27:33 (GMT)
commita585221b164ef353634afd407af5d330931e36f4 (patch)
tree8908aba3d058495ed9a1b00f0dc4468c7a92fe37
parent559d21d4d26da6bb4d42389852a447a562eab15a (diff)
Added object update to the datastore.
-rw-r--r--services/datastore/datastore.py39
-rw-r--r--sugar/datastore/datastore.py12
2 files changed, 15 insertions, 36 deletions
diff --git a/services/datastore/datastore.py b/services/datastore/datastore.py
index c9c9c07..177f528 100644
--- a/services/datastore/datastore.py
+++ b/services/datastore/datastore.py
@@ -112,6 +112,12 @@ class DataStoreDBusHelper(dbus.service.Object):
return _create_op(uid)
@dbus.service.method(_DS_DBUS_INTERFACE,
+ in_signature="ia{sv}", out_signature="o")
+ def update(self, uid, prop_dict):
+ self._parent.update(uid, prop_dict)
+ return _create_op(uid)
+
+ @dbus.service.method(_DS_DBUS_INTERFACE,
in_signature="o", out_signature="i")
def delete(self, op):
uid = _get_uid_from_op(op)
@@ -285,23 +291,7 @@ class DataStore(object):
del curs
return uids
- def set_data(self, uid, data):
- curs = self._dbcx.cursor()
- curs.execute('SELECT uid FROM objects WHERE uid=?;', (uid,))
- res = curs.fetchall()
- self._dbcx.commit()
- if len(res) <= 0:
- del curs
- raise NotFoundError("Object %d was not found." % uid)
- data = _get_data_as_string(data)
- curs.execute("UPDATE objects SET data=? WHERE uid=?;", (data, uid))
- self._dbcx.commit()
- del curs
- self._dbus_obj_helper.Updated(True, {}, False, uid=uid)
-
- _reserved_keys = ["handle", "objid", "data", "created", "modified",
- "object-type", "file-path"]
- def set_properties(self, uid, prop_dict):
+ def update(self, uid, prop_dict):
curs = self._dbcx.cursor()
curs.execute('SELECT uid FROM objects WHERE uid=?;', (uid,))
res = curs.fetchall()
@@ -310,10 +300,6 @@ class DataStore(object):
del curs
raise NotFoundError("Object %d was not found." % uid)
- for key in prop_dict.keys():
- if key in self._reserved_keys:
- raise ValueError("key %s is a reserved key." % key)
-
for (key, value) in prop_dict.items():
value = _get_data_as_string(value)
if not len(value):
@@ -329,17 +315,6 @@ class DataStore(object):
del curs
self._dbus_obj_helper.Updated(False, {}, False, uid=uid)
- def get_data(self, uid):
- curs = self._dbcx.cursor()
- curs.execute('SELECT uid, data FROM objects WHERE uid=?;', (uid,))
- res = curs.fetchall()
- self._dbcx.commit()
- if len(res) <= 0:
- raise NotFoundError("Object %d was not found." % uid)
- data = res[0][1]
- del curs
- return data
-
def get_properties(self, uid, keys):
query = "SELECT objid, key, value FROM properties WHERE (objid=%d" % uid
subquery = ""
diff --git a/sugar/datastore/datastore.py b/sugar/datastore/datastore.py
index 33deadc..f62e7af 100644
--- a/sugar/datastore/datastore.py
+++ b/sugar/datastore/datastore.py
@@ -91,10 +91,14 @@ def write(obj):
metadata = obj.get_metadata().copy()
metadata['file-path'] = obj.get_file_path()
metadata['object-type'] = obj.get_object_type()
- logging.debug(str(metadata))
- object_path = _data_store.create(dbus.Dictionary(metadata))
- dbus_object = _bus.get_object(DS_DBUS_SERVICE, object_path)
- return dbus_object.get_properties(['handle'])['handle']
+
+ if obj.get_handle():
+ _data_store.update(int(obj.get_handle()), dbus.Dictionary(metadata))
+ return obj.get_handle()
+ else:
+ object_path = _data_store.create(dbus.Dictionary(metadata))
+ dbus_object = _bus.get_object(DS_DBUS_SERVICE, object_path)
+ return dbus_object.get_properties(['handle'])['handle']
def find(query):
object_paths = _data_store.find(query)