aws-lambda-powertools 3.10.1a7__py3-none-any.whl → 3.10.1a9__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.
@@ -1,3 +1,3 @@
1
1
  """Exposes version constant to avoid circular dependencies."""
2
2
 
3
- VERSION = "3.10.1a7"
3
+ VERSION = "3.10.1a9"
@@ -37,14 +37,25 @@ class KafkaEventRecord(DictWrapper):
37
37
  return self["timestampType"]
38
38
 
39
39
  @property
40
- def key(self) -> str:
41
- """The raw (base64 encoded) Kafka record key."""
42
- return self["key"]
40
+ def key(self) -> str | None:
41
+ """
42
+ The raw (base64 encoded) Kafka record key.
43
+
44
+ This key is optional; if not provided,
45
+ a round-robin algorithm will be used to determine
46
+ the partition for the message.
47
+ """
48
+
49
+ return self.get("key")
43
50
 
44
51
  @property
45
- def decoded_key(self) -> bytes:
46
- """Decode the base64 encoded key as bytes."""
47
- return base64.b64decode(self.key)
52
+ def decoded_key(self) -> bytes | None:
53
+ """
54
+ Decode the base64 encoded key as bytes.
55
+
56
+ If the key is not provided, this will return None.
57
+ """
58
+ return None if self.key is None else base64.b64decode(self.key)
48
59
 
49
60
  @property
50
61
  def value(self) -> str:
@@ -1,5 +1,5 @@
1
1
  from datetime import datetime
2
- from typing import Dict, List, Literal, Type, Union
2
+ from typing import Dict, List, Literal, Optional, Type, Union
3
3
 
4
4
  from pydantic import BaseModel, field_validator
5
5
 
@@ -14,12 +14,16 @@ class KafkaRecordModel(BaseModel):
14
14
  offset: int
15
15
  timestamp: datetime
16
16
  timestampType: str
17
- key: bytes
17
+ key: Optional[bytes] = None
18
18
  value: Union[str, Type[BaseModel]]
19
19
  headers: List[Dict[str, bytes]]
20
20
 
21
- # Added type ignore to keep compatibility between Pydantic v1 and v2
22
- _decode_key = field_validator("key")(base64_decode) # type: ignore[type-var, unused-ignore]
21
+ # key is optional; only decode if not None
22
+ @field_validator("key", mode="before")
23
+ def decode_key(cls, value):
24
+ if value is not None:
25
+ return base64_decode(value)
26
+ return value
23
27
 
24
28
  @field_validator("value", mode="before")
25
29
  def data_base64_decode(cls, value):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: aws_lambda_powertools
3
- Version: 3.10.1a7
3
+ Version: 3.10.1a9
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
@@ -88,7 +88,7 @@ aws_lambda_powertools/shared/json_encoder.py,sha256=JQeWNu-4M7_xI_hqYExrxsb3OcEH
88
88
  aws_lambda_powertools/shared/lazy_import.py,sha256=TbXQm2bcwXdZrYdBaJJXIswyLlumM85RJ_A_0w-h-GU,2019
89
89
  aws_lambda_powertools/shared/types.py,sha256=EZ_tbX3F98LA4Zcra1hTEjzRacpZAtggK957Zcv1oKg,135
90
90
  aws_lambda_powertools/shared/user_agent.py,sha256=DrCMFQuT4a4iIrpcWpAIjY37EFqR9-QxlxDGD-Nn9Gg,7081
91
- aws_lambda_powertools/shared/version.py,sha256=O_w5cO_he61m0xs9f4BxK7ziAwbaQ064UPZpHHO4aUw,85
91
+ aws_lambda_powertools/shared/version.py,sha256=a_aW3KsPDj3Dlwr33G534QXbj2CZ_-eBzPRSLgfrEHI,85
92
92
  aws_lambda_powertools/tracing/__init__.py,sha256=f4bMThOPBPWTPVcYqcAIErAJPerMsf3H_Z4gCXCsK9I,141
93
93
  aws_lambda_powertools/tracing/base.py,sha256=WSO986XGBOe9K0F2SnG6ustJokIrtO0m0mcL8N7mfno,4544
94
94
  aws_lambda_powertools/tracing/extensions.py,sha256=APOfXOq-hRBKaK5WyfIyrd_6M1_9SWJZ3zxLA9jDZzU,492
@@ -125,7 +125,7 @@ aws_lambda_powertools/utilities/data_classes/dynamo_db_stream_event.py,sha256=j8
125
125
  aws_lambda_powertools/utilities/data_classes/event_bridge_event.py,sha256=TeTtx2jOKyZSVdSPFrtxZUgv0Yt6HW_H7J5NNxy_mHo,2434
126
126
  aws_lambda_powertools/utilities/data_classes/event_source.py,sha256=CKo1_TY0UcUVsh3PUk39z2WFVC2Bf4QgXWj93eEHbcY,1211
127
127
  aws_lambda_powertools/utilities/data_classes/iot_registry_event.py,sha256=wUa0Gr64maNGkd9qKNxtwFHawIJN-nj9X8uLFdINE7c,10842
128
- aws_lambda_powertools/utilities/data_classes/kafka_event.py,sha256=sOJgwH6NTNeOyBgq3q-7j_qSrk-hewS42Duz-um0d5A,3829
128
+ aws_lambda_powertools/utilities/data_classes/kafka_event.py,sha256=21K9iSH0sv_oj7alGWcommPUNDfto-tovIHspdIdsH4,4119
129
129
  aws_lambda_powertools/utilities/data_classes/kinesis_firehose_event.py,sha256=5H-Rt6LG80_jVkTlWxhutZH0cv4Xrhzm-fqwkpjPfQM,10508
130
130
  aws_lambda_powertools/utilities/data_classes/kinesis_stream_event.py,sha256=O42TpHCJHM5mz_b3Z65cJJ2DB19sb-b3rxced6bQB_Y,3958
131
131
  aws_lambda_powertools/utilities/data_classes/lambda_function_url_event.py,sha256=dFhL3IYebW4WeJc1XJJYmF94gI_qYeay6EpT9b2mDZU,633
@@ -218,7 +218,7 @@ aws_lambda_powertools/utilities/parser/models/cloudwatch.py,sha256=1y2WmgBbIo6Gk
218
218
  aws_lambda_powertools/utilities/parser/models/dynamodb.py,sha256=ktjvd5L7LLvitgi1yPFbtc_TK8J_3yzqIHmaZ4UfTt8,2197
219
219
  aws_lambda_powertools/utilities/parser/models/event_bridge.py,sha256=Fanggwc7Ug_YTzFGl1utSRn7fjxILNR_GnkrNG9IQ88,941
220
220
  aws_lambda_powertools/utilities/parser/models/iot_registry_events.py,sha256=hnuCxt9jYri_MRI9Z-n7aknA2CcBIHkPD__G9jSQEZ4,5448
221
- aws_lambda_powertools/utilities/parser/models/kafka.py,sha256=XukgaGbhY0-yOGJ-36dwjJM2xvWk9z-XQd_rZGAheZs,1849
221
+ aws_lambda_powertools/utilities/parser/models/kafka.py,sha256=JbnuSOX9D_IqUjvxvajsIJT4uw8adD_EOkEJx8mhkws,1919
222
222
  aws_lambda_powertools/utilities/parser/models/kinesis.py,sha256=-8zJh1GJd69QCo0tGQkg7SEqbcWJCbwmeSb1Rx8Jt40,1790
223
223
  aws_lambda_powertools/utilities/parser/models/kinesis_firehose.py,sha256=K1MbkoX9yZjMcZOJ7H7nek3OgVoBAjtqorKlcoWRlQ8,939
224
224
  aws_lambda_powertools/utilities/parser/models/kinesis_firehose_sqs.py,sha256=VTXGKlo0aBpi8njpOOiTaNFncl0_vRRWmiI7Z6ngKPI,875
@@ -258,7 +258,7 @@ aws_lambda_powertools/utilities/validation/envelopes.py,sha256=YD5HOFx6IClQgii0n
258
258
  aws_lambda_powertools/utilities/validation/exceptions.py,sha256=PKy_19zQMBJGCMMFl-sMkcm-cc0v3zZBn_bhGE4wKNo,2084
259
259
  aws_lambda_powertools/utilities/validation/validator.py,sha256=khCqFhACSdn0nKyYRRPiC5Exht956hTfSfhlV3IRmpg,10099
260
260
  aws_lambda_powertools/warnings/__init__.py,sha256=vqDVeZz8wGtD8WGYNSkQE7AHwqtIrPGRxuoJR_BBnSs,1193
261
- aws_lambda_powertools-3.10.1a7.dist-info/LICENSE,sha256=vMHS2eBgmwPUIMPb7LQ4p7ib_FPVQXarVjAasflrTwo,951
262
- aws_lambda_powertools-3.10.1a7.dist-info/METADATA,sha256=Cfx7bBKx3f770PR5ocj_50L0Z4r0U52-W54RLOmc3yM,11187
263
- aws_lambda_powertools-3.10.1a7.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
264
- aws_lambda_powertools-3.10.1a7.dist-info/RECORD,,
261
+ aws_lambda_powertools-3.10.1a9.dist-info/LICENSE,sha256=vMHS2eBgmwPUIMPb7LQ4p7ib_FPVQXarVjAasflrTwo,951
262
+ aws_lambda_powertools-3.10.1a9.dist-info/METADATA,sha256=OE2G3Tl6fQ4ywLau2yDAAkxSJdjjgJ1QW6BtlNqeC9w,11187
263
+ aws_lambda_powertools-3.10.1a9.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
264
+ aws_lambda_powertools-3.10.1a9.dist-info/RECORD,,