aws-lambda-powertools 3.6.1a3__py3-none-any.whl → 3.6.1a5__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.
@@ -552,11 +552,7 @@ class Route:
552
552
  operation_responses: dict[int, OpenAPIResponse] = {
553
553
  422: {
554
554
  "description": "Validation Error",
555
- "content": {
556
- "application/json": {
557
- "schema": {"$ref": COMPONENT_REF_PREFIX + "HTTPValidationError"},
558
- },
559
- },
555
+ "content": {"application/json": {"schema": {"$ref": f"{COMPONENT_REF_PREFIX}HTTPValidationError"}}},
560
556
  },
561
557
  }
562
558
 
@@ -761,6 +757,9 @@ class Route:
761
757
  if field_info.description:
762
758
  parameter["description"] = field_info.description
763
759
 
760
+ if field_info.openapi_examples:
761
+ parameter["examples"] = field_info.openapi_examples
762
+
764
763
  if field_info.deprecated:
765
764
  parameter["deprecated"] = field_info.deprecated
766
765
 
@@ -20,6 +20,7 @@ from aws_lambda_powertools.event_handler.openapi.compat import (
20
20
  )
21
21
 
22
22
  if TYPE_CHECKING:
23
+ from aws_lambda_powertools.event_handler.openapi.models import Example
23
24
  from aws_lambda_powertools.event_handler.openapi.types import CacheKey
24
25
 
25
26
  """
@@ -117,6 +118,7 @@ class Param(FieldInfo):
117
118
  max_digits: int | None = _Unset,
118
119
  decimal_places: int | None = _Unset,
119
120
  examples: list[Any] | None = None,
121
+ openapi_examples: dict[str, Example] | None = None,
120
122
  deprecated: bool | None = None,
121
123
  include_in_schema: bool = True,
122
124
  json_schema_extra: dict[str, Any] | None = None,
@@ -205,8 +207,13 @@ class Param(FieldInfo):
205
207
  if examples is not None:
206
208
  kwargs["examples"] = examples
207
209
 
210
+ if openapi_examples is not None:
211
+ kwargs["openapi_examples"] = openapi_examples
212
+
208
213
  current_json_schema_extra = json_schema_extra or extra
209
214
 
215
+ self.openapi_examples = openapi_examples
216
+
210
217
  kwargs.update(
211
218
  {
212
219
  "annotation": annotation,
@@ -262,6 +269,7 @@ class Path(Param):
262
269
  max_digits: int | None = _Unset,
263
270
  decimal_places: int | None = _Unset,
264
271
  examples: list[Any] | None = None,
272
+ openapi_examples: dict[str, Example] | None = None,
265
273
  deprecated: bool | None = None,
266
274
  include_in_schema: bool = True,
267
275
  json_schema_extra: dict[str, Any] | None = None,
@@ -353,6 +361,7 @@ class Path(Param):
353
361
  decimal_places=decimal_places,
354
362
  deprecated=deprecated,
355
363
  examples=examples,
364
+ openapi_examples=openapi_examples,
356
365
  include_in_schema=include_in_schema,
357
366
  json_schema_extra=json_schema_extra,
358
367
  **extra,
@@ -392,6 +401,7 @@ class Query(Param):
392
401
  max_digits: int | None = _Unset,
393
402
  decimal_places: int | None = _Unset,
394
403
  examples: list[Any] | None = None,
404
+ openapi_examples: dict[str, Example] | None = None,
395
405
  deprecated: bool | None = None,
396
406
  include_in_schema: bool = True,
397
407
  json_schema_extra: dict[str, Any] | None = None,
@@ -480,6 +490,7 @@ class Query(Param):
480
490
  decimal_places=decimal_places,
481
491
  deprecated=deprecated,
482
492
  examples=examples,
493
+ openapi_examples=openapi_examples,
483
494
  include_in_schema=include_in_schema,
484
495
  json_schema_extra=json_schema_extra,
485
496
  **extra,
@@ -522,6 +533,7 @@ class Header(Param):
522
533
  max_digits: int | None = _Unset,
523
534
  decimal_places: int | None = _Unset,
524
535
  examples: list[Any] | None = None,
536
+ openapi_examples: dict[str, Example] | None = None,
525
537
  deprecated: bool | None = None,
526
538
  include_in_schema: bool = True,
527
539
  json_schema_extra: dict[str, Any] | None = None,
@@ -616,6 +628,7 @@ class Header(Param):
616
628
  decimal_places=decimal_places,
617
629
  deprecated=deprecated,
618
630
  examples=examples,
631
+ openapi_examples=openapi_examples,
619
632
  include_in_schema=include_in_schema,
620
633
  json_schema_extra=json_schema_extra,
621
634
  **extra,
@@ -669,6 +682,7 @@ class Body(FieldInfo):
669
682
  max_digits: int | None = _Unset,
670
683
  decimal_places: int | None = _Unset,
671
684
  examples: list[Any] | None = None,
685
+ openapi_examples: dict[str, Example] | None = None,
672
686
  deprecated: bool | None = None,
673
687
  include_in_schema: bool = True,
674
688
  json_schema_extra: dict[str, Any] | None = None,
@@ -4,3 +4,11 @@ class InvalidLoggerSamplingRateError(Exception):
4
4
  """
5
5
 
6
6
  pass
7
+
8
+
9
+ class OrphanedChildLoggerError(Exception):
10
+ """
11
+ Orphaned Child logger exception
12
+ """
13
+
14
+ pass
@@ -14,12 +14,14 @@ import random
14
14
  import sys
15
15
  import warnings
16
16
  from contextlib import contextmanager
17
- from typing import IO, TYPE_CHECKING, Any, Callable, Generator, Iterable, Mapping, TypeVar, overload
17
+ from typing import IO, TYPE_CHECKING, Any, Callable, Generator, Iterable, Mapping, TypeVar, cast, overload
18
18
 
19
19
  from aws_lambda_powertools.logging.constants import (
20
+ LOGGER_ATTRIBUTE_HANDLER,
21
+ LOGGER_ATTRIBUTE_POWERTOOLS_HANDLER,
20
22
  LOGGER_ATTRIBUTE_PRECONFIGURED,
21
23
  )
22
- from aws_lambda_powertools.logging.exceptions import InvalidLoggerSamplingRateError
24
+ from aws_lambda_powertools.logging.exceptions import InvalidLoggerSamplingRateError, OrphanedChildLoggerError
23
25
  from aws_lambda_powertools.logging.filters import SuppressFilter
24
26
  from aws_lambda_powertools.logging.formatter import (
25
27
  RESERVED_FORMATTER_CUSTOM_KEYS,
@@ -230,13 +232,14 @@ class Logger:
230
232
  self.child = child
231
233
  self.logger_formatter = logger_formatter
232
234
  self._stream = stream or sys.stdout
233
- self.logger_handler = logger_handler or logging.StreamHandler(self._stream)
235
+
234
236
  self.log_uncaught_exceptions = log_uncaught_exceptions
235
237
 
236
238
  self._is_deduplication_disabled = resolve_truthy_env_var_choice(
237
239
  env=os.getenv(constants.LOGGER_LOG_DEDUPLICATION_ENV, "false"),
238
240
  )
239
241
  self._logger = self._get_logger()
242
+ self.logger_handler = logger_handler or self._get_handler()
240
243
 
241
244
  # NOTE: This is primarily to improve UX, so IDEs can autocomplete LambdaPowertoolsFormatter options
242
245
  # previously, we masked all of them as kwargs thus limiting feature discovery
@@ -275,6 +278,23 @@ class Logger:
275
278
 
276
279
  return logging.getLogger(logger_name)
277
280
 
281
+ def _get_handler(self) -> logging.Handler:
282
+ # is a logger handler already configured?
283
+ if getattr(self, LOGGER_ATTRIBUTE_HANDLER, None):
284
+ return self.logger_handler
285
+
286
+ # Detect Powertools logger by checking for unique handler
287
+ # Retrieve the first handler if it's a Powertools instance
288
+ if getattr(self._logger, "powertools_handler", None):
289
+ return self._logger.handlers[0]
290
+
291
+ # for children, use parent's handler
292
+ if self.child:
293
+ return getattr(self._logger.parent, LOGGER_ATTRIBUTE_POWERTOOLS_HANDLER, None) # type: ignore[return-value] # always checked in formatting
294
+
295
+ # otherwise, create a new stream handler (first time init)
296
+ return logging.StreamHandler(self._stream)
297
+
278
298
  def _init_logger(
279
299
  self,
280
300
  formatter_options: dict | None = None,
@@ -317,6 +337,7 @@ class Logger:
317
337
  # std logging will return the same Logger with our attribute if name is reused
318
338
  logger.debug(f"Marking logger {self.service} as preconfigured")
319
339
  self._logger.init = True # type: ignore[attr-defined]
340
+ self._logger.powertools_handler = self.logger_handler # type: ignore[attr-defined]
320
341
 
321
342
  def _configure_sampling(self) -> None:
322
343
  """Dynamically set log level based on sampling rate
@@ -723,13 +744,20 @@ class Logger:
723
744
  """Convenience property to access the first logger handler"""
724
745
  # We ignore mypy here because self.child encodes whether or not self._logger.parent is
725
746
  # None, mypy can't see this from context but we can
726
- handlers = self._logger.parent.handlers if self.child else self._logger.handlers # type: ignore[union-attr]
727
- return handlers[0]
747
+ return self._get_handler()
728
748
 
729
749
  @property
730
750
  def registered_formatter(self) -> BasePowertoolsFormatter:
731
751
  """Convenience property to access the first logger formatter"""
732
- return self.registered_handler.formatter # type: ignore[return-value]
752
+ handler = self.registered_handler
753
+ if handler is None:
754
+ raise OrphanedChildLoggerError(
755
+ "Orphan child loggers cannot append nor remove keys until a parent is initialized first. "
756
+ "To solve this issue, you can A) make sure a parent logger is initialized first, or B) move append/remove keys operations to a later stage." # noqa: E501
757
+ "Reference: https://docs.powertools.aws.dev/lambda/python/latest/core/logger/#reusing-logger-across-your-code",
758
+ )
759
+
760
+ return cast(BasePowertoolsFormatter, handler.formatter)
733
761
 
734
762
  @property
735
763
  def log_level(self) -> int:
@@ -1,3 +1,3 @@
1
1
  """Exposes version constant to avoid circular dependencies."""
2
2
 
3
- VERSION = "3.6.1a3"
3
+ VERSION = "3.6.1a5"
@@ -12,6 +12,7 @@ from aws_lambda_powertools.utilities.batch import (
12
12
  BatchProcessor,
13
13
  EventType,
14
14
  )
15
+ from aws_lambda_powertools.utilities.batch.exceptions import UnexpectedBatchTypeError
15
16
  from aws_lambda_powertools.warnings import PowertoolsDeprecationWarning
16
17
 
17
18
  if TYPE_CHECKING:
@@ -204,6 +205,11 @@ def process_partial_response(
204
205
  """
205
206
  try:
206
207
  records: list[dict] = event.get("Records", [])
208
+ if not records or not isinstance(records, list):
209
+ raise UnexpectedBatchTypeError(
210
+ "Unexpected batch event type. Possible values are: SQS, KinesisDataStreams, DynamoDBStreams",
211
+ )
212
+
207
213
  except AttributeError:
208
214
  event_types = ", ".join(list(EventType.__members__))
209
215
  docs = "https://docs.powertools.aws.dev/lambda/python/latest/utilities/batch/#processing-messages-from-sqs" # noqa: E501 # long-line
@@ -268,6 +274,11 @@ def async_process_partial_response(
268
274
  """
269
275
  try:
270
276
  records: list[dict] = event.get("Records", [])
277
+ if not records or not isinstance(records, list):
278
+ raise UnexpectedBatchTypeError(
279
+ "Unexpected batch event type. Possible values are: SQS, KinesisDataStreams, DynamoDBStreams",
280
+ )
281
+
271
282
  except AttributeError:
272
283
  event_types = ", ".join(list(EventType.__members__))
273
284
  docs = "https://docs.powertools.aws.dev/lambda/python/latest/utilities/batch/#processing-messages-from-sqs" # noqa: E501 # long-line
@@ -38,6 +38,12 @@ class BatchProcessingError(BaseBatchProcessingError):
38
38
  return self.format_exceptions(parent_exception_str)
39
39
 
40
40
 
41
+ class UnexpectedBatchTypeError(BatchProcessingError):
42
+ """Error thrown by the Batch Processing utility when a partial processor receives an unexpected batch type"""
43
+
44
+ pass
45
+
46
+
41
47
  class SQSFifoCircuitBreakerError(Exception):
42
48
  """
43
49
  Signals a record not processed due to the SQS FIFO processing being interrupted
@@ -0,0 +1,129 @@
1
+ from datetime import datetime
2
+ from typing import Any, Dict, List, Literal, Optional
3
+
4
+ from pydantic import BaseModel, Field
5
+
6
+ EVENT_CRUD_OPERATION = Literal["CREATED", "UPDATED", "DELETED"]
7
+ EVENT_ADD_REMOVE_OPERATION = Literal["ADDED", "REMOVED"]
8
+
9
+
10
+ class IoTCoreRegistryEventsBase(BaseModel):
11
+ event_id: str = Field(..., alias="eventId")
12
+ timestamp: datetime
13
+
14
+
15
+ class IoTCoreThingEvent(IoTCoreRegistryEventsBase):
16
+ """
17
+ Thing Created/Updated/Deleted
18
+
19
+ The registry publishes event messages when things are created, updated, or deleted.
20
+ """
21
+
22
+ event_type: Literal["THING_EVENT"] = Field(..., alias="eventType")
23
+ operation: EVENT_CRUD_OPERATION
24
+ thing_id: str = Field(..., alias="thingId")
25
+ account_id: str = Field(..., alias="accountId")
26
+ thing_name: str = Field(..., alias="thingName")
27
+ version_number: int = Field(..., alias="versionNumber")
28
+ thing_type_name: Optional[str] = Field(None, alias="thingTypeName")
29
+ attributes: Dict[str, Any]
30
+
31
+
32
+ class IoTCoreThingTypeEvent(IoTCoreRegistryEventsBase):
33
+ """
34
+ Thing Type Created/Updated/Deprecated/Undeprecated/Deleted
35
+ The registry publishes event messages when thing types are created, updated, deprecated, undeprecated, or deleted.
36
+
37
+ Format:
38
+ $aws/events/thingType/thingTypeName/created
39
+ $aws/events/thingType/thingTypeName/updated
40
+ $aws/events/thingType/thingTypeName/deleted
41
+ """
42
+
43
+ event_type: Literal["THING_TYPE_EVENT"] = Field(..., alias="eventType")
44
+ operation: EVENT_CRUD_OPERATION
45
+ account_id: str = Field(..., alias="accountId")
46
+ thing_type_id: str = Field(..., alias="thingTypeId")
47
+ thing_type_name: str = Field(..., alias="thingTypeName")
48
+ is_deprecated: bool = Field(..., alias="isDeprecated")
49
+ deprecation_date: Optional[datetime] = Field(None, alias="deprecationDate")
50
+ searchable_attributes: List[str] = Field(..., alias="searchableAttributes")
51
+ propagating_attributes: List[Dict[str, str]] = Field(..., alias="propagatingAttributes")
52
+ description: str
53
+
54
+
55
+ class IoTCoreThingTypeAssociationEvent(IoTCoreRegistryEventsBase):
56
+ """
57
+ The registry publishes event messages when a thing type is associated or disassociated with a thing.
58
+
59
+ Format:
60
+ $aws/events/thingTypeAssociation/thing/thingName/thingType/typeName/added
61
+ $aws/events/thingTypeAssociation/thing/thingName/thingType/typeName/removed
62
+ """
63
+
64
+ event_type: Literal["THING_TYPE_ASSOCIATION_EVENT"] = Field(..., alias="eventType")
65
+ operation: EVENT_ADD_REMOVE_OPERATION
66
+ thing_id: str = Field(..., alias="thingId")
67
+ thing_name: str = Field(..., alias="thingName")
68
+ thing_type_name: str = Field(..., alias="thingTypeName")
69
+
70
+
71
+ class IoTCoreThingGroupEvent(IoTCoreRegistryEventsBase):
72
+ """
73
+ The registry publishes the following event messages when a thing group is created, updated, or deleted.
74
+
75
+ Format:
76
+ $aws/events/thingGroup/groupName/created
77
+ $aws/events/thingGroup/groupName/updated
78
+ $aws/events/thingGroup/groupName/deleted
79
+ """
80
+
81
+ event_type: Literal["THING_GROUP_EVENT"] = Field(..., alias="eventType")
82
+ operation: EVENT_CRUD_OPERATION
83
+ account_id: str = Field(..., alias="accountId")
84
+ thing_group_id: str = Field(..., alias="thingGroupId")
85
+ thing_group_name: str = Field(..., alias="thingGroupName")
86
+ version_number: int = Field(..., alias="versionNumber")
87
+ parent_group_name: Optional[str] = Field(None, alias="parentGroupName")
88
+ parent_group_id: Optional[str] = Field(None, alias="parentGroupId")
89
+ description: str
90
+ root_to_parent_thing_groups: List[Dict[str, str]] = Field(..., alias="rootToParentThingGroups")
91
+ attributes: Dict[str, Any]
92
+ dynamic_group_mapping_id: Optional[str] = Field(None, alias="dynamicGroupMappingId")
93
+
94
+
95
+ class IoTCoreAddOrRemoveFromThingGroupEvent(IoTCoreRegistryEventsBase):
96
+ """
97
+ The registry publishes event messages when a thing is added to or removed from a thing group.
98
+
99
+ Format:
100
+ $aws/events/thingGroupMembership/thingGroup/thingGroupName/thing/thingName/added
101
+ $aws/events/thingGroupMembership/thingGroup/thingGroupName/thing/thingName/removed
102
+ """
103
+
104
+ event_type: Literal["THING_GROUP_MEMBERSHIP_EVENT"] = Field(..., alias="eventType")
105
+ operation: EVENT_ADD_REMOVE_OPERATION
106
+ account_id: str = Field(..., alias="accountId")
107
+ group_arn: str = Field(..., alias="groupArn")
108
+ group_id: str = Field(..., alias="groupId")
109
+ thing_arn: str = Field(..., alias="thingArn")
110
+ thing_id: str = Field(..., alias="thingId")
111
+ membership_id: str = Field(..., alias="membershipId")
112
+
113
+
114
+ class IoTCoreAddOrDeleteFromThingGroupEvent(IoTCoreRegistryEventsBase):
115
+ """
116
+ The registry publishes event messages when a thing group is added to or removed from another thing group.
117
+
118
+ Format:
119
+ $aws/events/thingGroupHierarchy/thingGroup/parentThingGroupName/childThingGroup/childThingGroupName/added
120
+ $aws/events/thingGroupHierarchy/thingGroup/parentThingGroupName/childThingGroup/childThingGroupName/removed
121
+ """
122
+
123
+ event_type: Literal["THING_GROUP_HIERARCHY_EVENT"] = Field(..., alias="eventType")
124
+ operation: EVENT_ADD_REMOVE_OPERATION
125
+ account_id: str = Field(..., alias="accountId")
126
+ thing_group_id: str = Field(..., alias="thingGroupId")
127
+ thing_group_name: str = Field(..., alias="thingGroupName")
128
+ child_group_id: str = Field(..., alias="childGroupId")
129
+ child_group_name: str = Field(..., alias="childGroupName")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: aws_lambda_powertools
3
- Version: 3.6.1a3
3
+ Version: 3.6.1a5
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
@@ -1,6 +1,6 @@
1
1
  aws_lambda_powertools/__init__.py,sha256=o4iEHU0MfWC0_TfVmisxi0VOAUw5uQfqLQWr0t29ZaE,676
2
2
  aws_lambda_powertools/event_handler/__init__.py,sha256=RM4TF62aonr60nVlq4V8ogfjef8RtpUUGuDUfZY34_w,901
3
- aws_lambda_powertools/event_handler/api_gateway.py,sha256=8Q4sICtUABlxE6HKSDTgkaXs1pBni3Z6Ese3SBald8U,106740
3
+ aws_lambda_powertools/event_handler/api_gateway.py,sha256=-WRBR2GfHcZbe1_aU8jN0HLT07hJp8Ba-BS3MLqZrjI,106767
4
4
  aws_lambda_powertools/event_handler/appsync.py,sha256=mnuSkA9NhszX9naIvCveI5ivnJO5vbY7FPBIVWvg3S8,19209
5
5
  aws_lambda_powertools/event_handler/bedrock_agent.py,sha256=dCaPxim_RLsO-IVnRoe2hqAq8FPvIyfCiCHk5NKIQBo,13773
6
6
  aws_lambda_powertools/event_handler/content_types.py,sha256=0MKsKNu-SSrxbULVKnUjwgK-lVXhVD7BBjZ4Js0kEsI,163
@@ -22,7 +22,7 @@ aws_lambda_powertools/event_handler/openapi/dependant.py,sha256=KaLyOpDpZUhQPfAX
22
22
  aws_lambda_powertools/event_handler/openapi/encoders.py,sha256=ItcAMMdNKDmOPXFvFQGiwxMOD1o-XX815d864mVGrMY,11695
23
23
  aws_lambda_powertools/event_handler/openapi/exceptions.py,sha256=4iubuXydACTddytd3NMfqlwlS9aOXMSaROU7ev2Ojes,777
24
24
  aws_lambda_powertools/event_handler/openapi/models.py,sha256=pDkWqvbzF3dw1VQkCPbqylp5MFWJKdXj0pOyxI8f4WA,17101
25
- aws_lambda_powertools/event_handler/openapi/params.py,sha256=SgBTdElrLKtJs8gz7Hz5-BOsKtL3XM16f93SzZdgySU,41852
25
+ aws_lambda_powertools/event_handler/openapi/params.py,sha256=Eq4msH-BOUT8BHpjNyZBnU5llG1shTNS1IBCntbbsS8,42518
26
26
  aws_lambda_powertools/event_handler/openapi/pydantic_loader.py,sha256=Bud_yzI_Cao7UN_9zx6NeP0H2rQOZJbdbDAjgtthB-g,217
27
27
  aws_lambda_powertools/event_handler/openapi/swagger_ui/__init__.py,sha256=52wY3inOe1EPunrNl5cUqVQWHM6FsJHU5wpObSAX7-M,335
28
28
  aws_lambda_powertools/event_handler/openapi/swagger_ui/html.py,sha256=83f5h3j1E-4Q5OcRpq9ulgR_w0hL5CIanYFMEaOU59E,2769
@@ -38,13 +38,13 @@ aws_lambda_powertools/exceptions/__init__.py,sha256=bv7fiO8Cj5xbHOTlDpWpM3pIkbdS
38
38
  aws_lambda_powertools/logging/__init__.py,sha256=G5MTkVqaQvpfa7k3fGkj4QN0KU6nFfP0_SLF_47G_VE,72
39
39
  aws_lambda_powertools/logging/constants.py,sha256=P0XgbCmG4NiP96kx0qxe6QUC3ShN12doSIXTkobX7C4,309
40
40
  aws_lambda_powertools/logging/correlation_paths.py,sha256=uHHrl03aWzpOsrGHZ-9E6PNoMFyKjv3APNMMkI1EN_c,411
41
- aws_lambda_powertools/logging/exceptions.py,sha256=7q2tV22mH55o_aaOpWaSdTTJOrlnASbrBtjfJUV1fjc,125
41
+ aws_lambda_powertools/logging/exceptions.py,sha256=Fe_jk8O9vgUSUHxxOkz6Ev521aXsgPkMgA9Hb1nBn6g,232
42
42
  aws_lambda_powertools/logging/filters.py,sha256=icet1o3-QSSvrmj2udL4ZYT0msf5b3rXj5l7p6dAxAs,523
43
43
  aws_lambda_powertools/logging/formatter.py,sha256=dmE6XXmkWVkYbWdy1Kg69TYJJ0yDXfbK7LY6lLex_Mc,18618
44
44
  aws_lambda_powertools/logging/formatters/__init__.py,sha256=OqddpJcWMqRYhx5SFy-SPqtt72tkRZbfpEi_oCC47eI,301
45
45
  aws_lambda_powertools/logging/formatters/datadog.py,sha256=NwaaBOp7jIlOAH158NzyvW-EwmWqqnYX9f7Uu_nIUYQ,3169
46
46
  aws_lambda_powertools/logging/lambda_context.py,sha256=VHst_6hxMpXgScoxNwaC61UXPTIdd3AEBHTPzb4esPc,1736
47
- aws_lambda_powertools/logging/logger.py,sha256=xk-5tWGRTFEQXSf0pfEFTUjMWTpK67gNOydDnJHJEtc,33558
47
+ aws_lambda_powertools/logging/logger.py,sha256=Mj_XRyetPLbFd_OqlP_GkvkI93cPIIW4F0MRgxi1wQs,34924
48
48
  aws_lambda_powertools/logging/types.py,sha256=Zc95nGdZ2sJUEPdwR0uoArT_F-JSKfpS_LokdCVO0nQ,1263
49
49
  aws_lambda_powertools/logging/utils.py,sha256=NirAObjkkarN5fX2diHs0Ln_8KHLueviL-jCKhckIBM,4069
50
50
  aws_lambda_powertools/metrics/__init__.py,sha256=B5FpJS_VR7zivm2ylvUF8RHBthKz4aDk0VA5GpDn3Tk,592
@@ -83,7 +83,7 @@ aws_lambda_powertools/shared/json_encoder.py,sha256=JQeWNu-4M7_xI_hqYExrxsb3OcEH
83
83
  aws_lambda_powertools/shared/lazy_import.py,sha256=TbXQm2bcwXdZrYdBaJJXIswyLlumM85RJ_A_0w-h-GU,2019
84
84
  aws_lambda_powertools/shared/types.py,sha256=APkI38HbiTpSF19NSNii8Ydx73vmVUVotgEQ9jHruEI,124
85
85
  aws_lambda_powertools/shared/user_agent.py,sha256=DrCMFQuT4a4iIrpcWpAIjY37EFqR9-QxlxDGD-Nn9Gg,7081
86
- aws_lambda_powertools/shared/version.py,sha256=xKCejgTcTsU00m5aWIpjLx981Eo0OplTXjk-IpGQyfg,84
86
+ aws_lambda_powertools/shared/version.py,sha256=qVxl5QlmjbeeWQu-aenma036n5op-4afHiXDp3mkr9Q,84
87
87
  aws_lambda_powertools/tracing/__init__.py,sha256=f4bMThOPBPWTPVcYqcAIErAJPerMsf3H_Z4gCXCsK9I,141
88
88
  aws_lambda_powertools/tracing/base.py,sha256=DbLD8OSK05KLdSV36oNA5wDSGv8KbcOD19qMUqoXh58,4513
89
89
  aws_lambda_powertools/tracing/extensions.py,sha256=APOfXOq-hRBKaK5WyfIyrd_6M1_9SWJZ3zxLA9jDZzU,492
@@ -91,8 +91,8 @@ aws_lambda_powertools/tracing/tracer.py,sha256=Nnf6-u6_x1Ty-CTgWp3NIGyL70QC7HQvB
91
91
  aws_lambda_powertools/utilities/__init__.py,sha256=BhnoYxIaDboi8oCsEMAizR2Bp-EaJJ-OcdMa9q07thc,39
92
92
  aws_lambda_powertools/utilities/batch/__init__.py,sha256=mjFmfhJwot_3miZrstDcMKH7LzM_0aD35z-581HgZfY,1073
93
93
  aws_lambda_powertools/utilities/batch/base.py,sha256=FAYRjITKFHtRLmADX1xF92WQUPLyqzYXgvLvFtQE4vU,25292
94
- aws_lambda_powertools/utilities/batch/decorators.py,sha256=wLqO9m44NZpLnt7fNHhR7a7jsxypKtSt9ifhoCvg_tk,8827
95
- aws_lambda_powertools/utilities/batch/exceptions.py,sha256=RTuhAlHF6ULgGirfTwijVZp2J8njAkCST0E56Zgj-sc,1585
94
+ aws_lambda_powertools/utilities/batch/decorators.py,sha256=gYNV0Dcacz5bH9yWL7mTMoBm_Gc0-YoPstjy_fH2fwo,9365
95
+ aws_lambda_powertools/utilities/batch/exceptions.py,sha256=ZbWgItDimiSXmrDlejIpGc-4mez8XKgl3MB5bAPlrCo,1765
96
96
  aws_lambda_powertools/utilities/batch/sqs_fifo_partial_processor.py,sha256=MPE87ZithqQOcwzoZdYReOajc4mrbiKOsIXcXicznZE,4236
97
97
  aws_lambda_powertools/utilities/batch/types.py,sha256=XgUSbOIfzY4d2z3cFntQHAe6hcmxt6fbvSpa2KaMLeU,1112
98
98
  aws_lambda_powertools/utilities/data_classes/__init__.py,sha256=vWlVwQ6DDlnl3BtSFaZpxM-QOZQ9B_FOmZ4c12zt40w,3247
@@ -209,6 +209,7 @@ aws_lambda_powertools/utilities/parser/models/cloudformation_custom_resource.py,
209
209
  aws_lambda_powertools/utilities/parser/models/cloudwatch.py,sha256=1y2WmgBbIo6GkEtw75YzNaz9qREHl_-ThT0Iz7Ntd_k,1291
210
210
  aws_lambda_powertools/utilities/parser/models/dynamodb.py,sha256=ktjvd5L7LLvitgi1yPFbtc_TK8J_3yzqIHmaZ4UfTt8,2197
211
211
  aws_lambda_powertools/utilities/parser/models/event_bridge.py,sha256=KKv1z_NpLgcx86hvo--KwffqHiBuqxtzgPzduqCsAOA,570
212
+ aws_lambda_powertools/utilities/parser/models/iot_registry_events.py,sha256=hnuCxt9jYri_MRI9Z-n7aknA2CcBIHkPD__G9jSQEZ4,5448
212
213
  aws_lambda_powertools/utilities/parser/models/kafka.py,sha256=XukgaGbhY0-yOGJ-36dwjJM2xvWk9z-XQd_rZGAheZs,1849
213
214
  aws_lambda_powertools/utilities/parser/models/kinesis.py,sha256=-8zJh1GJd69QCo0tGQkg7SEqbcWJCbwmeSb1Rx8Jt40,1790
214
215
  aws_lambda_powertools/utilities/parser/models/kinesis_firehose.py,sha256=K1MbkoX9yZjMcZOJ7H7nek3OgVoBAjtqorKlcoWRlQ8,939
@@ -249,7 +250,7 @@ aws_lambda_powertools/utilities/validation/envelopes.py,sha256=YD5HOFx6IClQgii0n
249
250
  aws_lambda_powertools/utilities/validation/exceptions.py,sha256=PKy_19zQMBJGCMMFl-sMkcm-cc0v3zZBn_bhGE4wKNo,2084
250
251
  aws_lambda_powertools/utilities/validation/validator.py,sha256=x_1qpuKJBuWpgNU-zCD3Di-vXrZfyUu7oA5RmjZjr84,10034
251
252
  aws_lambda_powertools/warnings/__init__.py,sha256=vqDVeZz8wGtD8WGYNSkQE7AHwqtIrPGRxuoJR_BBnSs,1193
252
- aws_lambda_powertools-3.6.1a3.dist-info/LICENSE,sha256=vMHS2eBgmwPUIMPb7LQ4p7ib_FPVQXarVjAasflrTwo,951
253
- aws_lambda_powertools-3.6.1a3.dist-info/METADATA,sha256=Hd68_xy6AntCDi8lRvZvRJ3R3wBYHeK0xWADZPgIBFE,11150
254
- aws_lambda_powertools-3.6.1a3.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
255
- aws_lambda_powertools-3.6.1a3.dist-info/RECORD,,
253
+ aws_lambda_powertools-3.6.1a5.dist-info/LICENSE,sha256=vMHS2eBgmwPUIMPb7LQ4p7ib_FPVQXarVjAasflrTwo,951
254
+ aws_lambda_powertools-3.6.1a5.dist-info/METADATA,sha256=ohnWonlUydk6o0XUM12hnfh0CfWvpfWkEGFUNv8A7i4,11150
255
+ aws_lambda_powertools-3.6.1a5.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
256
+ aws_lambda_powertools-3.6.1a5.dist-info/RECORD,,