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-15 11:50:08 (GMT)
committer Sascha Silbe <sascha@silbe.org>2009-07-15 11:50:08 (GMT)
commitf2f714666ac000d885f5a1d05f922b6f38be3741 (patch)
treec40f99b7ba9954e240cbad63786203af534292c9
parentbe3cc8da174ca031986eb3c3fa9f8f2fdf5de1dc (diff)
change Python datastore API to use tuples called object_id instead of separate parameters called tree_id and version_id in most places
-rw-r--r--src/sugar/activity/activity.py24
-rw-r--r--src/sugar/activity/activityfactory.py21
-rw-r--r--src/sugar/activity/activityhandle.py36
-rw-r--r--src/sugar/activity/main.py4
-rw-r--r--src/sugar/datastore/datastore.py25
-rw-r--r--src/sugar/graphics/objectchooser.py17
6 files changed, 76 insertions, 51 deletions
diff --git a/src/sugar/activity/activity.py b/src/sugar/activity/activity.py
index 3cbc5d5..4a56d4b 100644
--- a/src/sugar/activity/activity.py
+++ b/src/sugar/activity/activity.py
@@ -500,8 +500,8 @@ class Activity(Window, gtk.Container):
share_scope = SCOPE_PRIVATE
- if handle.tree_id:
- self._jobject = datastore.get(handle.tree_id, handle.version_id)
+ if handle.object_id:
+ self._jobject = datastore.get(handle.object_id)
self.set_title(self._jobject.metadata['title'])
if self._jobject.metadata.has_key('share-scope'):
@@ -537,7 +537,7 @@ class Activity(Window, gtk.Container):
else:
logging.debug("Unknown share scope %r" % share_scope)
- if handle.tree_id is None and create_jobject:
+ if handle.object_id is None and create_jobject:
logging.debug('Creating a jobject.')
self._jobject = datastore.create()
title = _('%s Activity') % get_bundle_name()
@@ -691,7 +691,7 @@ class Activity(Window, gtk.Container):
"""
raise NotImplementedError
- def __save_cb(self, tree_id, version_id):
+ def __save_cb(self, object_id):
logging.debug('Activity.__save_cb')
self._updating_jobject = False
if self._quit_requested:
@@ -771,7 +771,7 @@ class Activity(Window, gtk.Container):
logging.debug('Cannot save, no journal object.')
return
- logging.debug('Activity.save: (%r,%r)' % (self._jobject.tree_id, self._jobject.version_id))
+ logging.debug('Activity.save: %r' % (self._jobject.object_id,))
if self._updating_jobject:
logging.info('Activity.save: still processing a previous request.')
@@ -799,13 +799,13 @@ class Activity(Window, gtk.Container):
# Cannot call datastore.write async for creates:
# https://dev.laptop.org/ticket/3071
- if self._jobject.tree_id is None:
+ if self._jobject.object_id is None:
datastore.write(self._jobject, transfer_ownership=True)
else:
self._updating_jobject = True
datastore.write(self._jobject,
transfer_ownership=True,
- reply_handler=self.__save_cb,
+ reply_handler=(lambda tree_id, version_id: self.__save_cb((tree_id,version_id))),
error_handler=self.__save_error_cb)
def copy(self):
@@ -815,10 +815,9 @@ class Activity(Window, gtk.Container):
Activities should not override this method. Instead, like save() do any
copy work that needs to be done in write_file()
"""
- logging.debug('Activity.copy: (%r,%r)' % (self._jobject.tree_id, self._jobject.version_id))
+ logging.debug('Activity.copy: %r' % (self._jobject.object_id,))
self.save()
- self._jobject.tree_id = None
- self._jobject.version_id = None
+ self._jobject.object_id = None
def __privacy_changed_cb(self, shared_activity, param_spec):
if shared_activity.props.private:
@@ -1057,9 +1056,8 @@ def get_activity_root():
else:
raise RuntimeError("No SUGAR_ACTIVITY_ROOT set.")
-# SS: TODO: optionally pass version_id
-def show_object_in_journal(tree_id):
+def show_object_in_journal(object_id):
bus = dbus.SessionBus()
obj = bus.get_object(J_DBUS_SERVICE, J_DBUS_PATH)
journal = dbus.Interface(obj, J_DBUS_INTERFACE)
- journal.ShowObject(tree_id)
+ journal.ShowObject(object_id)
diff --git a/src/sugar/activity/activityfactory.py b/src/sugar/activity/activityfactory.py
index 58de117..7cba1d6 100644
--- a/src/sugar/activity/activityfactory.py
+++ b/src/sugar/activity/activityfactory.py
@@ -123,7 +123,7 @@ def get_environment(activity):
return environ
-def get_command(activity, activity_id=None, tree_id=None, version_id=None, uri=None):
+def get_command(activity, activity_id=None, object_id=None, uri=None):
if not activity_id:
activity_id = create_activity_id()
@@ -131,9 +131,9 @@ def get_command(activity, activity_id=None, tree_id=None, version_id=None, uri=N
command.extend(['-b', activity.get_bundle_id()])
command.extend(['-a', activity_id])
- if tree_id is not None:
- command.extend(['-o', tree_id])
- if version_id is not None:
+ if object_id is not None:
+ tree_id, version_id = object_id
+ command.extend(['-t', tree_id])
command.extend(['-r', version_id])
if uri is not None:
command.extend(['-u', uri])
@@ -222,7 +222,7 @@ class ActivityCreationHandler(gobject.GObject):
self._shell = dbus.Interface(bus_object, _SHELL_IFACE)
if handle.activity_id is not None and \
- handle.tree_id is None:
+ handle.object_id is None:
datastore = dbus.Interface(
bus.get_object(_DS_SERVICE, _DS_PATH), _DS_INTERFACE)
datastore.find({ 'activity_id': self._handle.activity_id }, [],
@@ -252,8 +252,7 @@ class ActivityCreationHandler(gobject.GObject):
environ = get_environment(self._bundle)
(log_path, log_file) = open_log_file(self._bundle)
command = get_command(self._bundle, self._handle.activity_id,
- self._handle.tree_id,
- self._handle.version_id,
+ self._handle.object_id,
self._handle.uri)
if not self._use_rainbow:
@@ -321,9 +320,8 @@ class ActivityCreationHandler(gobject.GObject):
def _find_object_reply_handler(self, jobjects, count):
if count > 0:
if count > 1:
- logging.debug("Multiple objects has the same activity_id.")
- self._handle.tree_id = jobjects[0]['tree_id']
- self._handle.version_id = jobjects[0]['version_id']
+ logging.debug("Multiple objects have the same activity_id.")
+ self._handle.object_id = (jobjects[0]['tree_id'], jobjects[0]['version_id'])
self._launch_activity()
def _find_object_error_handler(self, err):
@@ -341,7 +339,8 @@ def create_with_uri(bundle, uri):
activity_handle = ActivityHandle(uri=uri)
return ActivityCreationHandler(bundle, activity_handle)
-def create_with_tree_id(bundle, tree_id, version_id):
+def create_with_object_id(bundle, object_id):
"""Create a new activity and pass both the tree id and the version id as handle."""
+ tree_id, version_id = object_id
activity_handle = ActivityHandle(tree_id=tree_id, version_id=version_id)
return ActivityCreationHandler(bundle, activity_handle)
diff --git a/src/sugar/activity/activityhandle.py b/src/sugar/activity/activityhandle.py
index 2153ffb..ac4ee0b 100644
--- a/src/sugar/activity/activityhandle.py
+++ b/src/sugar/activity/activityhandle.py
@@ -18,20 +18,20 @@
"""
STABLE.
"""
+import logging
+
class ActivityHandle(object):
"""Data structure storing simple activity metadata"""
def __init__(
- self, activity_id=None, tree_id=None, version_id=None, uri=None
+ self, activity_id=None, object_id=None, uri=None
):
"""Initialise the handle from activity_id
activity_id -- unique id for the activity to be
created
- tree_id -- identity of the journal object
- associated with the activity.
- version_id -- the exact version of the journal
- object.
+ object_id -- tuple of tree_id and version_id of
+ the journal object associated with the activity.
When you resume an activity from the journal
the tree_id and version_id will be passed in.
@@ -44,14 +44,14 @@ class ActivityHandle(object):
example or web pages)
"""
self.activity_id = activity_id
- self.tree_id = tree_id
- self.version_id = version_id
+ self.object_id = object_id
self.uri = uri
def get_dict(self):
"""Retrieve our settings as a dictionary"""
result = { 'activity_id' : self.activity_id }
if self.tree_id:
+ result['object_id'] = self.object_id
result['tree_id'] = self.tree_id
result['version_id'] = self.version_id
if self.uri:
@@ -59,12 +59,30 @@ class ActivityHandle(object):
return result
+ def get_object_id(self) :
+ logging.debug("AH.get_object_id %r %r" % (self.tree_id, self.version_id))
+ if self.tree_id is None and self.version_id is None :
+ logging.debug("AH.get_object_id returning None")
+ return None
+
+ return (self.tree_id, self.version_id)
+
+ def set_object_id(self, object_id) :
+ self.tree_id, self.version_id = object_id or (None, None)
+
+ object_id = property(get_object_id, set_object_id)
+
+
def create_from_dict(handle_dict):
"""Create a handle from a dictionary of parameters"""
+ if handle_dict.get('object_id') :
+ handle_dict = dict(handle_dict)
+ handle_dict['tree_id'], handle_dict['version_id'] = handle_dict['object_id']
+
result = ActivityHandle(
handle_dict['activity_id'],
- tree_id = handle_dict.get('tree_id'),
- version_id = handle_dict.get('version_id'),
+ object_id = (handle_dict.get('tree_id'),
+ handle_dict.get('version_id')),
uri = handle_dict.get('uri'),
)
return result
diff --git a/src/sugar/activity/main.py b/src/sugar/activity/main.py
index 458696a..6214f2b 100644
--- a/src/sugar/activity/main.py
+++ b/src/sugar/activity/main.py
@@ -60,7 +60,7 @@ def main():
help="identifier of the activity bundle")
parser.add_option("-a", "--activity-id", dest="activity_id",
help="identifier of the activity instance")
- parser.add_option("-o", "--tree-id", dest="tree_id",
+ parser.add_option("-t", "--tree-id", dest="tree_id",
help="identifier of the associated datastore object")
parser.add_option("-r", "--version-id", dest="version_id",
help="version of the associated datastore object")
@@ -111,7 +111,7 @@ def main():
activity_constructor = getattr(module, class_name)
activity_handle = activityhandle.ActivityHandle(
activity_id=options.activity_id,
- tree_id=options.tree_id, version_id=options.version_id,
+ object_id=(options.tree_id,options.version_id),
uri=options.uri)
if options.single_process is True:
diff --git a/src/sugar/datastore/datastore.py b/src/sugar/datastore/datastore.py
index 74806e5..44d0ac8 100644
--- a/src/sugar/datastore/datastore.py
+++ b/src/sugar/datastore/datastore.py
@@ -90,7 +90,7 @@ class DSObject(object):
self._owns_file = False
def get_metadata(self):
- if self._metadata is None and not self.tree_id is None:
+ if self._metadata is None and self.tree_id is not None:
metadata = DSMetadata(dbus_helpers.get_properties(self.tree_id, self.version_id))
self._metadata = metadata
return self._metadata
@@ -102,7 +102,7 @@ class DSObject(object):
metadata = property(get_metadata, set_metadata)
def get_file_path(self, fetch=True):
- if fetch and self._file_path is None and not self.tree_id is None:
+ if fetch and self._file_path is None and self.tree_id is not None:
self.set_file_path(dbus_helpers.get_filename(self.tree_id, self.version_id))
self._owns_file = True
return self._file_path
@@ -117,6 +117,17 @@ class DSObject(object):
file_path = property(get_file_path, set_file_path)
+ def get_object_id(self) :
+ if self.tree_id is None and self.version_id is None :
+ return None
+
+ return (self.tree_id, self.version_id)
+
+ def set_object_id(self, object_id) :
+ self.tree_id, self.version_id = object_id or (None, None)
+
+ object_id = property(get_object_id, set_object_id)
+
def destroy(self):
if self._destroyed:
logging.warning('This DSObject has already been destroyed!.')
@@ -137,8 +148,9 @@ class DSObject(object):
def copy(self):
return DSObject(None, self._metadata.copy(), self._file_path)
-def get(tree_id, version_id):
- logging.debug('datastore.get')
+def get(object_id):
+ logging.debug('datastore.get %r' % (object_id,))
+ tree_id, version_id = object_id
metadata = dbus_helpers.get_properties(tree_id, version_id)
ds_object = DSObject(tree_id, version_id, DSMetadata(metadata), None)
@@ -187,8 +199,9 @@ def write(ds_object, update_mtime=True, transfer_ownership=False,
# TODO: register the object for updates
logging.debug('Written object (%s,%s) to the datastore.' % (ds_object.tree_id, ds_object.version_id))
-def delete(tree_id, version_id):
- logging.debug('datastore.delete')
+def delete(object_id):
+ logging.debug('datastore.delete %r' % (object_id,))
+ tree_id, version_id = object_id
dbus_helpers.delete(tree_id, version_id)
def find(query, sorting=None, limit=None, offset=None, properties=None,
diff --git a/src/sugar/graphics/objectchooser.py b/src/sugar/graphics/objectchooser.py
index c4b9daf..9f0368a 100644
--- a/src/sugar/graphics/objectchooser.py
+++ b/src/sugar/graphics/objectchooser.py
@@ -51,16 +51,14 @@ class ObjectChooser(object):
self._parent_xid = parent_xid
self._main_loop = None
- self._tree_id = None
- self._version_id = None
+ self._object_id = None
self._bus = None
self._chooser_id = None
self._response_code = gtk.RESPONSE_NONE
self._what_filter = what_filter
def run(self):
- self._tree_id = None
- self._version_id = None
+ self._object_id = None
self._main_loop = gobject.MainLoop()
@@ -95,10 +93,10 @@ class ObjectChooser(object):
return self._response_code
def get_selected_object(self):
- if self._tree_id is None:
+ if self._object_id is None:
return None
else:
- return datastore.get(self._tree_id, self._version_id)
+ return datastore.get(self._object_id)
def destroy(self):
self._cleanup()
@@ -109,13 +107,12 @@ class ObjectChooser(object):
self._main_loop = None
self._bus = None
- def __chooser_response_cb(self, chooser_id, tree_id, version_id):
+ def __chooser_response_cb(self, chooser_id, object_id):
if chooser_id != self._chooser_id:
return
- logging.debug('ObjectChooser.__chooser_response_cb: (%r,%r)' % (tree_id, version_id))
+ logging.debug('ObjectChooser.__chooser_response_cb: %r' % (object_id,))
self._response_code = gtk.RESPONSE_ACCEPT
- self._tree_id = tree_id
- self._version_id = version_id
+ self._object_id = object_id
self._cleanup()
def __chooser_cancelled_cb(self, chooser_id):