You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by as...@apache.org on 2021/09/03 02:11:45 UTC
[qpid-proton] branch main updated (1d1bf11 -> 7f2fd8d)
This is an automated email from the ASF dual-hosted git repository.
astitcher pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-proton.git.
from 1d1bf11 PROTON-2429: Introduce restricted pn_msgid_t typedef
new 7bc27ef PROTON-2429: Fix merging error
new 7f2fd8d PROTON-2430: Changed python binding to use pn_message_set/get_id/correlation_id
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
c/src/core/message.c | 2 +-
python/cproton.i | 82 ++++++++++++++++++++++++++++++++++++++++++++---
python/proton/_message.py | 40 ++++++++++++++---------
3 files changed, 103 insertions(+), 21 deletions(-)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[qpid-proton] 02/02: PROTON-2430: Changed python binding to use
pn_message_set/get_id/correlation_id
Posted by as...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
astitcher pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-proton.git
commit 7f2fd8d97283937d9f479ae425d0b11f822055f3
Author: Andrew Stitcher <as...@apache.org>
AuthorDate: Fri Aug 27 14:25:56 2021 -0400
PROTON-2430: Changed python binding to use pn_message_set/get_id/correlation_id
Stop using pn_message_id/pn_message_correlation_id which are inherently
ineefficient and should be deprecated.
Added in a SWIG typemap for pn_msgid_t that knows the types that are
necessary for msgid types.
---
python/cproton.i | 82 ++++++++++++++++++++++++++++++++++++++++++++---
python/proton/_message.py | 40 ++++++++++++++---------
2 files changed, 102 insertions(+), 20 deletions(-)
diff --git a/python/cproton.i b/python/cproton.i
index 2a7bff9..f863cc7 100644
--- a/python/cproton.i
+++ b/python/cproton.i
@@ -96,10 +96,8 @@ PN_HANDLE(PNI_PYTRACER);
// These are not used/needed in the python binding
%ignore pn_dtag;
-%ignore pn_message_get_id;
-%ignore pn_message_set_id;
-%ignore pn_message_get_correlation_id;
-%ignore pn_message_set_correlation_id;
+%ignore pn_message_id;
+%ignore pn_message_correlation_id;
%ignore pn_list;
%ignore pn_list_size;
@@ -163,6 +161,7 @@ PN_HANDLE(PNI_PYTRACER);
$result = PyLong_FromVoidPtr((void*)$1);
}
+
%typemap(in) pn_bytes_t {
if ($input == Py_None) {
$1.start = NULL;
@@ -181,6 +180,81 @@ PN_HANDLE(PNI_PYTRACER);
$result = PyBytes_FromStringAndSize($1.start, $1.size);
}
+%typemap(in) pn_msgid_t {
+ if (PyTuple_Check($input)) {
+ pn_type_t type = PyLong_AsUnsignedLong(PyTuple_GetItem($input, 0));
+ PyObject* obj = PyTuple_GetItem($input, 1);
+ switch (type) {
+ case PN_NULL:
+ break;
+ case PN_ULONG:
+ $1.u.as_ulong = PyLong_AsUnsignedLong(obj);
+ break;
+ case PN_UUID:
+ if (PyBytes_Check(obj)) {
+ memmove(&$1.u.as_uuid, PyBytes_AsString(obj), (PyBytes_Size(obj) < 16 ? PyBytes_Size(obj) : 16));
+ break;
+ }
+ type = PN_NULL;
+ break;
+ case PN_BINARY:
+ if (PyBytes_Check(obj)) {
+ $1.u.as_bytes = (pn_bytes_t){.size=PyBytes_Size(obj), .start=PyBytes_AsString(obj)};
+ break;
+ }
+ type = PN_NULL;
+ break;
+ case PN_STRING:
+ if (PyBytes_Check(obj)) {
+ $1.u.as_bytes = (pn_bytes_t){.size=PyBytes_Size(obj), .start=PyBytes_AsString(obj)};
+ break;
+ }
+ default:
+ type = PN_NULL;
+ break;
+ }
+ $1.type = type;
+ } else if (PyLong_Check($input)) {
+ $1.type = PN_ULONG;
+ $1.u.as_ulong = PyLong_AsUnsignedLong($input);
+ } else if (PyBytes_Check($input)) {
+ $1.type = PN_BINARY;
+ $1.u.as_bytes = (pn_bytes_t){.size=PyBytes_Size($input), .start=PyBytes_AsString($input)};
+ } else if (PyUnicode_Check($input)) {
+ $1.type = PN_STRING;
+ Py_ssize_t utf8size;
+ const char *utf8 = PyUnicode_AsUTF8AndSize($input, &utf8size);
+ $1.u.as_bytes = (pn_bytes_t){.size=utf8size, .start=utf8};
+ } else {
+ $1.type = PN_NULL;
+ }
+}
+
+%typemap(out) pn_msgid_t {
+ switch ($1.type) {
+ case PN_NULL:
+ $result = Py_None;
+ break;
+ case PN_ULONG:
+ $result = PyLong_FromUnsignedLong($1.u.as_ulong);
+ break;
+ case PN_BINARY:
+ $result = PyBytes_FromStringAndSize($1.u.as_bytes.start, $1.u.as_bytes.size);
+ break;
+ case PN_STRING:
+ $result = PyUnicode_FromStringAndSize($1.u.as_bytes.start, $1.u.as_bytes.size);
+ break;
+ case PN_UUID:
+ $result = PyTuple_New(2);
+ PyTuple_SetItem($result, 0, PyLong_FromUnsignedLong($1.type));
+ PyTuple_SetItem($result, 1, PyBytes_FromStringAndSize($1.u.as_uuid.bytes, 16));
+ break;
+ default:
+ $result = Py_None;
+ break;
+ }
+}
+
%typemap(out) pn_delivery_tag_t {
$result = PyBytes_FromStringAndSize($1.bytes, $1.size);
}
diff --git a/python/proton/_message.py b/python/proton/_message.py
index 6952c8a..cf0f7b9 100644
--- a/python/proton/_message.py
+++ b/python/proton/_message.py
@@ -19,17 +19,17 @@
from __future__ import absolute_import
-from cproton import PN_DEFAULT_PRIORITY, PN_OVERFLOW, pn_error_text, pn_message, \
- pn_message_annotations, pn_message_body, pn_message_clear, pn_message_correlation_id, pn_message_decode, \
+from cproton import PN_DEFAULT_PRIORITY, PN_STRING, PN_UUID, PN_OVERFLOW, pn_error_text, pn_message, \
+ pn_message_annotations, pn_message_body, pn_message_clear, pn_message_decode, \
pn_message_encode, pn_message_error, pn_message_free, pn_message_get_address, pn_message_get_content_encoding, \
- pn_message_get_content_type, pn_message_get_creation_time, pn_message_get_delivery_count, \
- pn_message_get_expiry_time, pn_message_get_group_id, pn_message_get_group_sequence, pn_message_get_priority, \
+ pn_message_get_content_type, pn_message_get_correlation_id, pn_message_get_creation_time, pn_message_get_delivery_count, \
+ pn_message_get_expiry_time, pn_message_get_group_id, pn_message_get_group_sequence, pn_message_get_id, pn_message_get_priority, \
pn_message_get_reply_to, pn_message_get_reply_to_group_id, pn_message_get_subject, pn_message_get_ttl, \
- pn_message_get_user_id, pn_message_id, pn_message_instructions, pn_message_is_durable, \
+ pn_message_get_user_id, pn_message_instructions, pn_message_is_durable, \
pn_message_is_first_acquirer, pn_message_is_inferred, pn_message_properties, pn_message_set_address, \
- pn_message_set_content_encoding, pn_message_set_content_type, pn_message_set_creation_time, \
+ pn_message_set_content_encoding, pn_message_set_content_type, pn_message_set_correlation_id, pn_message_set_creation_time, \
pn_message_set_delivery_count, pn_message_set_durable, pn_message_set_expiry_time, pn_message_set_first_acquirer, \
- pn_message_set_group_id, pn_message_set_group_sequence, pn_message_set_inferred, pn_message_set_priority, \
+ pn_message_set_group_id, pn_message_set_group_sequence, pn_message_set_id, pn_message_set_inferred, pn_message_set_priority, \
pn_message_set_reply_to, pn_message_set_reply_to_group_id, pn_message_set_subject, \
pn_message_set_ttl, pn_message_set_user_id
@@ -37,12 +37,12 @@ from ._common import isinteger, millis2secs, secs2millis, unicode2utf8, utf82uni
from ._data import char, Data, symbol, ulong, AnnotationDict
from ._endpoints import Link
from ._exceptions import EXCEPTIONS, MessageException
+from uuid import UUID
from typing import Dict, Optional, Union, TYPE_CHECKING, overload
if TYPE_CHECKING:
from proton._delivery import Delivery
from proton._endpoints import Sender, Receiver
- from uuid import UUID
from proton._data import Described, PythonAMQPData
@@ -69,8 +69,6 @@ class Message(object):
**kwargs
) -> None:
self._msg = pn_message()
- self._id = Data(pn_message_id(self._msg))
- self._correlation_id = Data(pn_message_correlation_id(self._msg))
self.instructions = None
self.annotations = None
self.properties = None
@@ -273,14 +271,19 @@ class Message(object):
* ``bytes``
* ``str``
"""
- return self._id.get_object()
+ value = pn_message_get_id(self._msg)
+ if isinstance(value, tuple):
+ if value[0] == PN_UUID:
+ value = UUID(bytes=value[1])
+ return value
@id.setter
def id(self, value: Optional[Union[str, bytes, 'UUID', int]]) -> None:
if isinteger(value):
value = ulong(value)
- self._id.rewind()
- self._id.put_object(value)
+ elif isinstance(value, UUID):
+ value = (PN_UUID, value.bytes)
+ pn_message_set_id(self._msg, value)
@property
def user_id(self) -> bytes:
@@ -341,14 +344,19 @@ class Message(object):
* ``bytes``
* ``str``
"""
- return self._correlation_id.get_object()
+ value = pn_message_get_correlation_id(self._msg)
+ if isinstance(value, tuple):
+ if value[0] == PN_UUID:
+ value = UUID(bytes=value[1])
+ return value
@correlation_id.setter
def correlation_id(self, value: Optional[Union[str, bytes, 'UUID', int]]) -> None:
if isinteger(value):
value = ulong(value)
- self._correlation_id.rewind()
- self._correlation_id.put_object(value)
+ elif isinstance(value, UUID):
+ value = (PN_UUID, value.bytes)
+ pn_message_set_correlation_id(self._msg, value)
@property
def content_type(self) -> symbol:
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[qpid-proton] 01/02: PROTON-2429: Fix merging error
Posted by as...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
astitcher pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-proton.git
commit 7bc27ef4b24d590af97489b63b14d27f36d29624
Author: Andrew Stitcher <as...@apache.org>
AuthorDate: Thu Sep 2 21:59:52 2021 -0400
PROTON-2429: Fix merging error
---
c/src/core/message.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/c/src/core/message.c b/c/src/core/message.c
index 987ff20..092b6fc 100644
--- a/c/src/core/message.c
+++ b/c/src/core/message.c
@@ -565,7 +565,7 @@ int pn_message_set_correlation_id(pn_message_t *msg, pn_msgid_t id)
{
assert(msg);
pn_data_rewind(msg->correlation_id);
- return pn_data_put_atom(msg->correlation_id, atom);
+ return pn_data_put_atom(msg->correlation_id, id);
}
const char *pn_message_get_content_type(pn_message_t *msg)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org