From f2f714666ac000d885f5a1d05f922b6f38be3741 Mon Sep 17 00:00:00 2001 From: Sascha Silbe Date: Wed, 15 Jul 2009 11:50:08 +0000 Subject: change Python datastore API to use tuples called object_id instead of separate parameters called tree_id and version_id in most places --- 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): -- cgit v0.9.1