You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2017/01/09 15:24:38 UTC
[02/34] qpid-proton git commit: PROTON-1325: Repair broken fix for
python "buffer" type.
PROTON-1325: Repair broken fix for python "buffer" type.
Commit 05deba72edebd0cf1e7bf148ba7e99ab2fb62bfe was incorrect and did not
address the bug, this commit does.
Add an automatic mapping from a python buffer or memoryview object to the AMQP binary type.
In the other direction, AMQP "binary" maps to the python "bytes" or "str" type, as before.
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/e2357e2c
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/e2357e2c
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/e2357e2c
Branch: refs/heads/go1
Commit: e2357e2cc8af94cf038d31936f19fea2e46a323b
Parents: 440131e
Author: Alan Conway <ac...@redhat.com>
Authored: Thu Jan 5 10:06:28 2017 -0500
Committer: Alan Conway <ac...@redhat.com>
Committed: Thu Jan 5 16:33:04 2017 -0500
----------------------------------------------------------------------
proton-c/bindings/python/proton/__init__.py | 21 +++++++----
tests/python/proton_tests/codec.py | 44 ++++++++++++++----------
2 files changed, 39 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/e2357e2c/proton-c/bindings/python/proton/__init__.py
----------------------------------------------------------------------
diff --git a/proton-c/bindings/python/proton/__init__.py b/proton-c/bindings/python/proton/__init__.py
index d3f6922..cfac01e 100644
--- a/proton-c/bindings/python/proton/__init__.py
+++ b/proton-c/bindings/python/proton/__init__.py
@@ -1840,7 +1840,15 @@ class Data:
@type b: binary
@param b: a binary value
"""
- self._check(pn_data_put_binary(self._data, bytes(b)))
+ self._check(pn_data_put_binary(self._data, b))
+
+ def put_memoryview(self, mv):
+ """Put a python memoryview object as an AMQP binary value"""
+ self.put_binary(mv.tobytes())
+
+ def put_buffer(self, buff):
+ """Put a python buffer object as an AMQP binary value"""
+ self.put_binary(bytes(buff))
def put_string(self, s):
"""
@@ -2236,12 +2244,11 @@ class Data:
# we need to add an explicit int since it is a different type
if int not in put_mappings:
put_mappings[int] = put_int
- # For python 3.x use 'memoryview', for <=2.5 use 'buffer'. Python >=2.6 has both.
- if getattr(__builtins__, 'memoryview', None):
- put_mappings[memoryview] = put_binary
- if getattr(__builtins__, 'buffer', None):
- put_mappings[buffer] = put_binary
-
+ # Python >=3.0 has 'memoryview', <=2.5 has 'buffer', >=2.6 has both.
+ try: put_mappings[memoryview] = put_memoryview
+ except NameError: pass
+ try: put_mappings[buffer] = put_buffer
+ except NameError: pass
get_mappings = {
NULL: lambda s: None,
BOOL: get_bool,
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/e2357e2c/tests/python/proton_tests/codec.py
----------------------------------------------------------------------
diff --git a/tests/python/proton_tests/codec.py b/tests/python/proton_tests/codec.py
index 4d3d906..49a57e0 100644
--- a/tests/python/proton_tests/codec.py
+++ b/tests/python/proton_tests/codec.py
@@ -357,25 +357,31 @@ class DataTest(Test):
copy = data.get_object()
assert copy == obj, (copy, obj)
- if getattr(__builtins__, 'buffer', None):
- def testBuffer(self):
- self.data.put_object(buffer("foo"))
- data = Data()
- data.decode(self.data.encode())
- data.rewind()
- assert data.next()
- assert data.type() == Data.BINARY
- assert data.get_object() == "foo"
-
- if getattr(__builtins__, 'memoryview', None):
- def testBuffer(self):
- self.data.put_object(memoryview("foo"))
- data = Data()
- data.decode(self.data.encode())
- data.rewind()
- assert data.next()
- assert data.type() == Data.BINARY
- assert data.get_object() == "foo"
+ def testBuffer(self):
+ try:
+ self.data.put_object(buffer(str2bin("foo")))
+ except NameError:
+ # python >= 3.0 does not have `buffer`
+ return
+ data = Data()
+ data.decode(self.data.encode())
+ data.rewind()
+ assert data.next()
+ assert data.type() == Data.BINARY
+ assert data.get_object() == str2bin("foo")
+
+ def testMemoryView(self):
+ try:
+ self.data.put_object(memoryview(str2bin("foo")))
+ except NameError:
+ # python <= 2.6 does not have `memoryview`
+ return
+ data = Data()
+ data.decode(self.data.encode())
+ data.rewind()
+ assert data.next()
+ assert data.type() == Data.BINARY
+ assert data.get_object() == str2bin("foo")
def testLookup(self):
obj = {symbol("key"): str2unicode("value"),
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org