[ARVADOS] updated: a4bc28672ca603f74cf1e386b1e054a4467bf5c2

git at public.curoverse.com git at public.curoverse.com
Mon Feb 23 16:33:57 EST 2015


Summary of changes:
 sdk/python/arvados/collection.py     |  2 +-
 sdk/python/arvados/keep.py           |  8 +++++---
 sdk/python/tests/test_keep_client.py | 13 ++++++++++---
 3 files changed, 16 insertions(+), 7 deletions(-)

       via  a4bc28672ca603f74cf1e386b1e054a4467bf5c2 (commit)
      from  7b0d3939e19b6c62effdb5c808b811b38f4ffd57 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit a4bc28672ca603f74cf1e386b1e054a4467bf5c2
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Mon Feb 23 16:36:09 2015 -0500

    4520: Coerce unicode strings to ascii in put().  Use result.content (returns
    literal result bytes) instead result.text (returns unicode) when processing
    Keep responses.

diff --git a/sdk/python/arvados/collection.py b/sdk/python/arvados/collection.py
index 42ee16f..7bfdf78 100644
--- a/sdk/python/arvados/collection.py
+++ b/sdk/python/arvados/collection.py
@@ -585,7 +585,7 @@ class CollectionWriter(CollectionBase):
             manifest += ' ' + ' '.join("%d:%d:%s" % (sfile[0], sfile[1], sfile[2].replace(' ', '\\040')) for sfile in stream[2])
             manifest += "\n"
 
-        return manifest.encode("utf-8")
+        return manifest
 
     def data_locators(self):
         ret = []
diff --git a/sdk/python/arvados/keep.py b/sdk/python/arvados/keep.py
index c443f60..71dc7ce 100644
--- a/sdk/python/arvados/keep.py
+++ b/sdk/python/arvados/keep.py
@@ -394,11 +394,11 @@ class KeepClient(object):
                     replicas_stored = int(result.headers['x-keep-replicas-stored'])
                 except (KeyError, ValueError):
                     replicas_stored = 1
-                limiter.save_response(result.text.strip(), replicas_stored)
+                limiter.save_response(result.content.strip(), replicas_stored)
             elif status is not None:
                 _logger.debug("Request fail: PUT %s => %s %s",
                               self.args['data_hash'], status,
-                              self.service.last_result.text)
+                              self.service.last_result.content)
 
 
     def __init__(self, api_client=None, proxy=None,
@@ -685,7 +685,9 @@ class KeepClient(object):
           KeepClient is initialized.
         """
 
-        if not isinstance(data, str):
+        if isinstance(data, unicode):
+            data = data.encode("ascii")
+        elif not isinstance(data, str):
             raise arvados.errors.ArgumentError("Argument 'data' to KeepClient.put must be type 'str'")
 
         data_hash = hashlib.md5(data).hexdigest()
diff --git a/sdk/python/tests/test_keep_client.py b/sdk/python/tests/test_keep_client.py
index 7e6bb0c..6f1e2a0 100644
--- a/sdk/python/tests/test_keep_client.py
+++ b/sdk/python/tests/test_keep_client.py
@@ -76,10 +76,17 @@ class KeepTestCase(run_test_server.TestCaseWithServers):
             '^d41d8cd98f00b204e9800998ecf8427e\+0',
             ('wrong locator from Keep.put(""): ' + blob_locator))
 
-    def test_data_must_be_str(self):
+    def test_unicode_must_be_ascii(self):
+        # If unicode type, must only consist of valid ASCII
+        self.keep_client.put(u'foo')
+
+        with self.assertRaises(UnicodeEncodeError):
+            # Error if it is not ASCII
+            foo_locator = self.keep_client.put(u'\xe2')
+
         with self.assertRaises(arvados.errors.ArgumentError):
-            # Illegal to put() a unicode string.
-            foo_locator = self.keep_client.put(u'foo')
+            # Must be a string type
+            foo_locator = self.keep_client.put({})
 
 class KeepPermissionTestCase(run_test_server.TestCaseWithServers):
     MAIN_SERVER = {}

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list