Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/gdatastore/datastore.py
diff options
context:
space:
mode:
authorSascha Silbe <sascha-pgp@silbe.org>2013-03-02 18:05:21 (GMT)
committer Sascha Silbe <sascha-pgp@silbe.org>2013-03-02 18:05:21 (GMT)
commit23164d7f0d0ce69556225315f1c2989780576f7b (patch)
tree36ab561fae522d7ba0c5a4dc19058c30bca2b5b7 /gdatastore/datastore.py
parentfb038743626915f226f9733089620f94539e49bf (diff)
Fix handling of non-ASCII data paths
For the native interface, we switch to using byte arrays, which is the only sane way to handle paths on POSIX file systems. For the Sugar v2 interface, we assume UTF-8 representation, like Sugar does.
Diffstat (limited to 'gdatastore/datastore.py')
-rw-r--r--gdatastore/datastore.py18
1 files changed, 10 insertions, 8 deletions
diff --git a/gdatastore/datastore.py b/gdatastore/datastore.py
index 0fd7765..cfb6074 100644
--- a/gdatastore/datastore.py
+++ b/gdatastore/datastore.py
@@ -116,7 +116,7 @@ class DBusApiNativeV1(dbus.service.Object):
pass
@dbus.service.method(DBUS_INTERFACE_NATIVE_V1,
- in_signature='a{sv}s', out_signature='ss',
+ in_signature='a{sv}ay', out_signature='ss',
async_callbacks=('async_cb', 'async_err_cb'),
byte_arrays=True)
def create(self, metadata, data_path, async_cb, async_err_cb):
@@ -127,7 +127,8 @@ class DBusApiNativeV1(dbus.service.Object):
"""
# TODO: what about transfer_ownership/delete_after?
self._internal_api.save(tree_id='', parent_id='', metadata=metadata,
- path=data_path, delete_after=True,
+ path=data_path,
+ delete_after=True,
async_cb=async_cb,
async_err_cb=async_err_cb)
@@ -152,7 +153,7 @@ class DBusApiNativeV1(dbus.service.Object):
async_err_cb=async_err_cb)
@dbus.service.method(DBUS_INTERFACE_NATIVE_V1,
- in_signature='ssa{sv}s', out_signature='s',
+ in_signature='ssa{sv}ay', out_signature='s',
async_callbacks=('async_cb', 'async_err_cb'),
byte_arrays=True)
def add_version(self, tree_id, parent_id, metadata, data_path, async_cb,
@@ -169,7 +170,8 @@ class DBusApiNativeV1(dbus.service.Object):
if not parent_id:
raise ValueError('No parent_id given')
- self._internal_api.save(tree_id, parent_id, metadata, data_path,
+ self._internal_api.save(tree_id, parent_id, metadata,
+ data_path,
delete_after=True,
async_cb=success_cb,
async_err_cb=async_err_cb)
@@ -227,7 +229,7 @@ class DBusApiNativeV1(dbus.service.Object):
return self._internal_api.find(query_dict, options)
@dbus.service.method(DBUS_INTERFACE_NATIVE_V1,
- in_signature='ss', out_signature='s',
+ in_signature='ss', out_signature='ay',
sender_keyword='sender')
def get_data_path(self, tree_id, version_id, sender=None):
object_id = (tree_id, version_id)
@@ -254,7 +256,7 @@ class DBusApiNativeV1(dbus.service.Object):
return self._internal_api.find(query_dict, options, query_string)
@dbus.service.method(DBUS_INTERFACE_NATIVE_V1,
- in_signature='sssa{sv}s', out_signature='ss',
+ in_signature='sssa{sv}ay', out_signature='ss',
async_callbacks=('async_cb', 'async_err_cb'),
byte_arrays=True)
def restore(self, tree_id, parent_id, version_id, metadata, data_path,
@@ -338,7 +340,7 @@ class DBusApiSugarV2(dbus.service.Object):
async_cb(tree_id)
self._internal_api.save(tree_id='', parent_id='', metadata=props,
- path=file_path,
+ path=file_path.encode('utf-8'),
delete_after=transfer_ownership,
async_cb=success_cb,
async_err_cb=async_err_cb)
@@ -370,7 +372,7 @@ class DBusApiSugarV2(dbus.service.Object):
self._internal_api.save(tree_id=uid,
parent_id=parent['version_id'], metadata=props,
- path=file_path, delete_after=transfer_ownership,
+ path=file_path.encode('utf-8'), delete_after=transfer_ownership,
async_cb=success_cb, async_err_cb=async_err_cb)
@dbus.service.signal(DBUS_INTERFACE_SUGAR_V2, signature='s')