Make datastore find & update operations async

This commit is contained in:
Dan Williams
2007-05-16 00:41:45 -04:00
parent 28e8b9025e
commit e659d15384
3 changed files with 37 additions and 13 deletions
+6 -4
View File
@@ -71,20 +71,22 @@ def get(object_id):
def create():
return DSObject(object_id=None, metadata={}, file_path=None)
def write(ds_object):
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.file_path)
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.file_path)
# TODO: register the object for updates
logging.debug('Written object %s to the datastore.' % ds_object.object_id)
def find(query):
object_ids = dbus_helpers.find({})
def find(query, reply_handler=None, error_handler=None):
object_ids = dbus_helpers.find(query, reply_handler, error_handler)
objects = []
for object_id in object_ids:
objects.append(get(object_id))
+13 -4
View File
@@ -54,13 +54,18 @@ def create(properties, filename):
logging.debug('dbus_helpers.create: ' + object_id)
return object_id
def update(uid, properties, filename):
def update(uid, properties, filename, reply_handler=None, error_handler=None):
logging.debug('dbus_helpers.update: %s, %s, %s' % (uid, properties, filename))
try:
logging.debug(get_contents(filename))
except UnicodeDecodeError:
pass
_data_store.update(uid, dbus.Dictionary(properties), filename)
if reply_handler and error_handler:
_data_store.update(uid, dbus.Dictionary(properties), filename,
reply_handler=reply_handler,
error_handler=error_handler)
else:
_data_store.update(uid, dbus.Dictionary(properties), filename)
def get_properties(uid):
props = _data_store.get_properties(uid)
@@ -76,8 +81,12 @@ def get_filename(uid):
pass
return filename
def find(query):
return _data_store.find(query)
def find(query, reply_handler, error_handler):
if reply_handler and error_handler:
return _data_store.find(query, reply_handler=reply_handler,
error_handler=error_handler)
else:
return _data_store.find(query)
"""