Skip to content

Commit b8355e0

Browse files
authored
[EventHub] add EventData.from_bytes (Azure#39952)
* [EventHub] add EventData.from_bytes * copilot comments * fix test
1 parent c82fdb4 commit b8355e0

File tree

4 files changed

+31
-3
lines changed

4 files changed

+31
-3
lines changed

sdk/eventhub/azure-eventhub/CHANGELOG.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# Release History
22

3-
## 5.14.1 (Unreleased)
3+
## 5.15.0 (Unreleased)
4+
5+
### Features Added
6+
7+
- Added a class method `from bytes` to create `EventData` from a message payload of bytes. ([#39711](https://github.com/Azure/azure-sdk-for-python/issues/39711))
48

59
### Bugs Fixed
610

@@ -10,7 +14,7 @@
1014

1115
### Features Added
1216

13-
- Add support for Decimal128 in pyAMQP ([#39511]https://github.com/Azure/azure-sdk-for-python/pull/39511)
17+
- Add support for Decimal128 in pyAMQP ([#39511](https://github.com/Azure/azure-sdk-for-python/pull/39511))
1418

1519
### Bugs Fixed
1620

sdk/eventhub/azure-eventhub/azure/eventhub/_common.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
)
5656
from ._pyamqp._message_backcompat import LegacyMessage, LegacyBatchMessage
5757
from ._pyamqp.message import Message as pyamqp_Message
58+
from ._pyamqp._decode import decode_payload
5859
from ._transport._pyamqp_transport import PyamqpTransport
5960

6061
if TYPE_CHECKING:
@@ -223,6 +224,15 @@ def from_message_content( # pylint: disable=unused-argument
223224
event_data.content_type = content_type
224225
return event_data
225226

227+
@classmethod
228+
def from_bytes(cls, message: bytes) -> "EventData":
229+
230+
amqp_message = decode_payload(memoryview(message))
231+
event_data = cls(body="")
232+
event_data._message = amqp_message
233+
event_data._raw_amqp_message = AmqpAnnotatedMessage(message=amqp_message)
234+
return event_data
235+
226236
@classmethod
227237
def _from_message(
228238
cls,

sdk/eventhub/azure-eventhub/azure/eventhub/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@
44
# ------------------------------------
55

66

7-
VERSION = "5.14.1"
7+
VERSION = "5.15.0"

sdk/eventhub/azure-eventhub/tests/unittest/test_event_data.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import platform
99
import pytest
10+
import datetime
1011
from packaging import version
1112

1213
try:
@@ -369,3 +370,16 @@ def test_legacy_message(uamqp_transport):
369370
assert event_data_batch.message.header.priority is None
370371
assert event_data_batch.message.on_send_complete is None
371372
assert event_data_batch.message.properties is None
373+
374+
def test_from_bytes(uamqp_transport):
375+
if uamqp_transport:
376+
pytest.skip("This test is only for pyamqp transport")
377+
data = b'\x00Sr\xc1\x87\x08\xa3\x1bx-opt-sequence-number-epochT\xff\xa3\x15x-opt-sequence-numberU\x00\xa3\x0cx-opt-offsetU\x00\xa3\x13x-opt-enqueued-time\x00\xa3\x1dcom.microsoft:datetime-offset\x83\x00\x00\x01\x95\xf3XB\x86\x00St\xc1I\x02\xa1\rDiagnostic-Id\xa1700-1aa201483d464ac3c3d2ab796fbccb36-72e947bb22f404fc-00\x00Su\xa0\x08message1'
378+
379+
event_data = EventData.from_bytes(data)
380+
assert event_data.body_as_str() == 'message1'
381+
assert event_data.sequence_number == 0
382+
assert event_data.offset is None
383+
assert event_data.properties == {b'Diagnostic-Id': b'00-1aa201483d464ac3c3d2ab796fbccb36-72e947bb22f404fc-00'}
384+
assert event_data.partition_key is None
385+
assert isinstance(event_data.enqueued_time, datetime.datetime)

0 commit comments

Comments
 (0)