Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
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
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.
-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')