aws-lambda-powertools 3.14.1a6__py3-none-any.whl → 3.15.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- aws_lambda_powertools/shared/version.py +1 -1
- aws_lambda_powertools/utilities/kafka/deserializer/protobuf.py +53 -1
- {aws_lambda_powertools-3.14.1a6.dist-info → aws_lambda_powertools-3.15.0.dist-info}/METADATA +1 -1
- {aws_lambda_powertools-3.14.1a6.dist-info → aws_lambda_powertools-3.15.0.dist-info}/RECORD +6 -6
- {aws_lambda_powertools-3.14.1a6.dist-info → aws_lambda_powertools-3.15.0.dist-info}/LICENSE +0 -0
- {aws_lambda_powertools-3.14.1a6.dist-info → aws_lambda_powertools-3.15.0.dist-info}/WHEEL +0 -0
@@ -2,6 +2,7 @@ from __future__ import annotations
|
|
2
2
|
|
3
3
|
from typing import Any
|
4
4
|
|
5
|
+
from google.protobuf.internal.decoder import _DecodeVarint # type: ignore[attr-defined]
|
5
6
|
from google.protobuf.json_format import MessageToDict
|
6
7
|
|
7
8
|
from aws_lambda_powertools.utilities.kafka.deserializer.base import DeserializerBase
|
@@ -43,6 +44,12 @@ class ProtobufDeserializer(DeserializerBase):
|
|
43
44
|
When the data cannot be deserialized according to the message class,
|
44
45
|
typically due to data format incompatibility or incorrect message class.
|
45
46
|
|
47
|
+
Notes
|
48
|
+
-----
|
49
|
+
This deserializer handles both standard Protocol Buffer format and the Confluent
|
50
|
+
Schema Registry format which includes message index information. It will first try
|
51
|
+
standard deserialization and fall back to message index handling if needed.
|
52
|
+
|
46
53
|
Example
|
47
54
|
--------
|
48
55
|
>>> # Assuming proper protobuf setup
|
@@ -54,11 +61,56 @@ class ProtobufDeserializer(DeserializerBase):
|
|
54
61
|
... except KafkaConsumerDeserializationError as e:
|
55
62
|
... print(f"Failed to deserialize: {e}")
|
56
63
|
"""
|
64
|
+
value = self._decode_input(data)
|
57
65
|
try:
|
58
|
-
value = self._decode_input(data)
|
59
66
|
message = self.message_class()
|
60
67
|
message.ParseFromString(value)
|
61
68
|
return MessageToDict(message, preserving_proto_field_name=True)
|
69
|
+
except Exception:
|
70
|
+
return self._deserialize_with_message_index(value, self.message_class())
|
71
|
+
|
72
|
+
def _deserialize_with_message_index(self, data: bytes, parser: Any) -> dict:
|
73
|
+
"""
|
74
|
+
Deserialize protobuf message with Confluent message index handling.
|
75
|
+
|
76
|
+
Parameters
|
77
|
+
----------
|
78
|
+
data : bytes
|
79
|
+
data
|
80
|
+
parser : google.protobuf.message.Message
|
81
|
+
Protobuf message instance to parse the data into
|
82
|
+
|
83
|
+
Returns
|
84
|
+
-------
|
85
|
+
dict
|
86
|
+
Dictionary representation of the parsed protobuf message with original field names
|
87
|
+
|
88
|
+
Raises
|
89
|
+
------
|
90
|
+
KafkaConsumerDeserializationError
|
91
|
+
If deserialization fails
|
92
|
+
|
93
|
+
Notes
|
94
|
+
-----
|
95
|
+
This method handles the special case of Confluent Schema Registry's message index
|
96
|
+
format, where the message is prefixed with either a single 0 (for the first schema)
|
97
|
+
or a list of schema indexes. The actual protobuf message follows these indexes.
|
98
|
+
"""
|
99
|
+
|
100
|
+
buffer = memoryview(data)
|
101
|
+
pos = 0
|
102
|
+
|
103
|
+
try:
|
104
|
+
first_value, new_pos = _DecodeVarint(buffer, pos)
|
105
|
+
pos = new_pos
|
106
|
+
|
107
|
+
if first_value != 0:
|
108
|
+
for _ in range(first_value):
|
109
|
+
_, new_pos = _DecodeVarint(buffer, pos)
|
110
|
+
pos = new_pos
|
111
|
+
|
112
|
+
parser.ParseFromString(data[pos:])
|
113
|
+
return MessageToDict(parser, preserving_proto_field_name=True)
|
62
114
|
except Exception as e:
|
63
115
|
raise KafkaConsumerDeserializationError(
|
64
116
|
f"Error trying to deserialize protobuf data - {type(e).__name__}: {str(e)}",
|
{aws_lambda_powertools-3.14.1a6.dist-info → aws_lambda_powertools-3.15.0.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: aws_lambda_powertools
|
3
|
-
Version: 3.
|
3
|
+
Version: 3.15.0
|
4
4
|
Summary: Powertools for AWS Lambda (Python) is a developer toolkit to implement Serverless best practices and increase developer velocity.
|
5
5
|
License: MIT
|
6
6
|
Keywords: aws_lambda_powertools,aws,tracing,logging,lambda,powertools,feature_flags,idempotency,middleware
|
@@ -98,7 +98,7 @@ aws_lambda_powertools/shared/json_encoder.py,sha256=JQeWNu-4M7_xI_hqYExrxsb3OcEH
|
|
98
98
|
aws_lambda_powertools/shared/lazy_import.py,sha256=TbXQm2bcwXdZrYdBaJJXIswyLlumM85RJ_A_0w-h-GU,2019
|
99
99
|
aws_lambda_powertools/shared/types.py,sha256=EZ_tbX3F98LA4Zcra1hTEjzRacpZAtggK957Zcv1oKg,135
|
100
100
|
aws_lambda_powertools/shared/user_agent.py,sha256=DrCMFQuT4a4iIrpcWpAIjY37EFqR9-QxlxDGD-Nn9Gg,7081
|
101
|
-
aws_lambda_powertools/shared/version.py,sha256=
|
101
|
+
aws_lambda_powertools/shared/version.py,sha256=and7WBc_Ox1Z0FcIGlQjGhuFeAT1WVEaKytTKGK0tuk,83
|
102
102
|
aws_lambda_powertools/tracing/__init__.py,sha256=f4bMThOPBPWTPVcYqcAIErAJPerMsf3H_Z4gCXCsK9I,141
|
103
103
|
aws_lambda_powertools/tracing/base.py,sha256=WSO986XGBOe9K0F2SnG6ustJokIrtO0m0mcL8N7mfno,4544
|
104
104
|
aws_lambda_powertools/tracing/extensions.py,sha256=APOfXOq-hRBKaK5WyfIyrd_6M1_9SWJZ3zxLA9jDZzU,492
|
@@ -198,7 +198,7 @@ aws_lambda_powertools/utilities/kafka/deserializer/base.py,sha256=-bOPbZADsKK-Hu
|
|
198
198
|
aws_lambda_powertools/utilities/kafka/deserializer/default.py,sha256=GhAUfZO3rcasy_ZiKEv3IOFX_VNDTA61zb2eo0HAIcQ,1416
|
199
199
|
aws_lambda_powertools/utilities/kafka/deserializer/deserializer.py,sha256=Wh4-srDUFGBUZ0kXiiU-R8DznumOKdLPk9Va88LT7zE,3733
|
200
200
|
aws_lambda_powertools/utilities/kafka/deserializer/json.py,sha256=2_helv8DyUoK60z3wflLd1BwkuRINaVjucyYie10qUM,1742
|
201
|
-
aws_lambda_powertools/utilities/kafka/deserializer/protobuf.py,sha256=
|
201
|
+
aws_lambda_powertools/utilities/kafka/deserializer/protobuf.py,sha256=WEaJysV__sZy32HNpqZZ6KrZyxyvsEnxf24On36zeXY,4183
|
202
202
|
aws_lambda_powertools/utilities/kafka/exceptions.py,sha256=kwNfAcYmiTgk19QEdN6oHtMc2dDIZh64uWr_d5X3FFc,495
|
203
203
|
aws_lambda_powertools/utilities/kafka/kafka_consumer.py,sha256=x1RcOWJcG74JvzrahO4cSSrAuSZFUlMtg14QjAjtJjY,2069
|
204
204
|
aws_lambda_powertools/utilities/kafka/schema_config.py,sha256=GaSiwKWiUEQqrdBZWMaGl_DQcqpyplohoCMgMrCOyGI,3268
|
@@ -290,7 +290,7 @@ aws_lambda_powertools/utilities/validation/envelopes.py,sha256=YD5HOFx6IClQgii0n
|
|
290
290
|
aws_lambda_powertools/utilities/validation/exceptions.py,sha256=PKy_19zQMBJGCMMFl-sMkcm-cc0v3zZBn_bhGE4wKNo,2084
|
291
291
|
aws_lambda_powertools/utilities/validation/validator.py,sha256=khCqFhACSdn0nKyYRRPiC5Exht956hTfSfhlV3IRmpg,10099
|
292
292
|
aws_lambda_powertools/warnings/__init__.py,sha256=vqDVeZz8wGtD8WGYNSkQE7AHwqtIrPGRxuoJR_BBnSs,1193
|
293
|
-
aws_lambda_powertools-3.
|
294
|
-
aws_lambda_powertools-3.
|
295
|
-
aws_lambda_powertools-3.
|
296
|
-
aws_lambda_powertools-3.
|
293
|
+
aws_lambda_powertools-3.15.0.dist-info/LICENSE,sha256=vMHS2eBgmwPUIMPb7LQ4p7ib_FPVQXarVjAasflrTwo,951
|
294
|
+
aws_lambda_powertools-3.15.0.dist-info/METADATA,sha256=10eOohXPQlEeOM8QpLP-2ZyvAuukPgXLD5JJgtY-PI0,11528
|
295
|
+
aws_lambda_powertools-3.15.0.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
|
296
|
+
aws_lambda_powertools-3.15.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|