aws-lambda-powertools 3.14.1a5__tar.gz → 3.14.1a6__tar.gz

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.
Files changed (298) hide show
  1. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/PKG-INFO +5 -1
  2. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/api_gateway.py +1 -1
  3. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/shared/version.py +1 -1
  4. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/kafka_event.py +45 -13
  5. aws_lambda_powertools-3.14.1a6/aws_lambda_powertools/utilities/kafka/__init__.py +9 -0
  6. aws_lambda_powertools-3.14.1a6/aws_lambda_powertools/utilities/kafka/consumer_records.py +144 -0
  7. aws_lambda_powertools-3.14.1a6/aws_lambda_powertools/utilities/kafka/deserializer/__init__.py +0 -0
  8. aws_lambda_powertools-3.14.1a6/aws_lambda_powertools/utilities/kafka/deserializer/avro.py +71 -0
  9. aws_lambda_powertools-3.14.1a6/aws_lambda_powertools/utilities/kafka/deserializer/base.py +52 -0
  10. aws_lambda_powertools-3.14.1a6/aws_lambda_powertools/utilities/kafka/deserializer/default.py +46 -0
  11. aws_lambda_powertools-3.14.1a6/aws_lambda_powertools/utilities/kafka/deserializer/deserializer.py +107 -0
  12. aws_lambda_powertools-3.14.1a6/aws_lambda_powertools/utilities/kafka/deserializer/json.py +53 -0
  13. aws_lambda_powertools-3.14.1a6/aws_lambda_powertools/utilities/kafka/deserializer/protobuf.py +65 -0
  14. aws_lambda_powertools-3.14.1a6/aws_lambda_powertools/utilities/kafka/exceptions.py +22 -0
  15. aws_lambda_powertools-3.14.1a6/aws_lambda_powertools/utilities/kafka/kafka_consumer.py +60 -0
  16. aws_lambda_powertools-3.14.1a6/aws_lambda_powertools/utilities/kafka/schema_config.py +83 -0
  17. aws_lambda_powertools-3.14.1a6/aws_lambda_powertools/utilities/kafka/serialization/__init__.py +0 -0
  18. aws_lambda_powertools-3.14.1a6/aws_lambda_powertools/utilities/kafka/serialization/base.py +56 -0
  19. aws_lambda_powertools-3.14.1a6/aws_lambda_powertools/utilities/kafka/serialization/custom_dict.py +22 -0
  20. aws_lambda_powertools-3.14.1a6/aws_lambda_powertools/utilities/kafka/serialization/dataclass.py +25 -0
  21. aws_lambda_powertools-3.14.1a6/aws_lambda_powertools/utilities/kafka/serialization/pydantic.py +26 -0
  22. aws_lambda_powertools-3.14.1a6/aws_lambda_powertools/utilities/kafka/serialization/serialization.py +65 -0
  23. aws_lambda_powertools-3.14.1a6/aws_lambda_powertools/utilities/kafka/serialization/types.py +3 -0
  24. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/kafka.py +7 -0
  25. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/pyproject.toml +8 -2
  26. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/setup.py +6 -1
  27. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/LICENSE +0 -0
  28. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/README.md +0 -0
  29. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/THIRD-PARTY-LICENSES +0 -0
  30. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/__init__.py +0 -0
  31. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/__init__.py +0 -0
  32. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/appsync.py +0 -0
  33. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/bedrock_agent.py +0 -0
  34. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/bedrock_agent_function.py +0 -0
  35. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/content_types.py +0 -0
  36. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/events_appsync/__init__.py +0 -0
  37. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/events_appsync/_registry.py +0 -0
  38. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/events_appsync/appsync_events.py +0 -0
  39. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/events_appsync/base.py +0 -0
  40. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/events_appsync/exceptions.py +0 -0
  41. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/events_appsync/functions.py +0 -0
  42. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/events_appsync/router.py +0 -0
  43. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/events_appsync/types.py +0 -0
  44. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/exception_handling.py +0 -0
  45. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/exceptions.py +0 -0
  46. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/graphql_appsync/__init__.py +0 -0
  47. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/graphql_appsync/_registry.py +0 -0
  48. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/graphql_appsync/base.py +0 -0
  49. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/graphql_appsync/exceptions.py +0 -0
  50. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/graphql_appsync/router.py +0 -0
  51. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/lambda_function_url.py +0 -0
  52. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/middlewares/__init__.py +0 -0
  53. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/middlewares/base.py +0 -0
  54. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/middlewares/openapi_validation.py +0 -0
  55. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/middlewares/schema_validation.py +0 -0
  56. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/openapi/__init__.py +0 -0
  57. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/openapi/compat.py +0 -0
  58. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/openapi/config.py +0 -0
  59. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/openapi/constants.py +0 -0
  60. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/openapi/dependant.py +0 -0
  61. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/openapi/encoders.py +0 -0
  62. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/openapi/exceptions.py +0 -0
  63. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/openapi/models.py +0 -0
  64. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/openapi/params.py +0 -0
  65. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/openapi/pydantic_loader.py +0 -0
  66. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/openapi/swagger_ui/__init__.py +0 -0
  67. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/openapi/swagger_ui/html.py +0 -0
  68. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/openapi/swagger_ui/oauth2.py +0 -0
  69. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui-bundle.min.js +0 -0
  70. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui.min.css +0 -0
  71. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/openapi/types.py +0 -0
  72. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/router.py +0 -0
  73. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/types.py +0 -0
  74. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/util.py +0 -0
  75. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/event_handler/vpc_lattice.py +0 -0
  76. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/exceptions/__init__.py +0 -0
  77. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/logging/__init__.py +0 -0
  78. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/logging/buffer/__init__.py +0 -0
  79. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/logging/buffer/cache.py +0 -0
  80. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/logging/buffer/config.py +0 -0
  81. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/logging/buffer/functions.py +0 -0
  82. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/logging/constants.py +0 -0
  83. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/logging/correlation_paths.py +0 -0
  84. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/logging/exceptions.py +0 -0
  85. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/logging/filters.py +0 -0
  86. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/logging/formatter.py +0 -0
  87. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/logging/formatters/__init__.py +0 -0
  88. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/logging/formatters/datadog.py +0 -0
  89. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/logging/lambda_context.py +0 -0
  90. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/logging/logger.py +0 -0
  91. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/logging/types.py +0 -0
  92. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/logging/utils.py +0 -0
  93. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/metrics/__init__.py +0 -0
  94. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/metrics/base.py +0 -0
  95. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/metrics/exceptions.py +0 -0
  96. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/metrics/functions.py +0 -0
  97. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/metrics/metric.py +0 -0
  98. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/metrics/metrics.py +0 -0
  99. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/metrics/provider/__init__.py +0 -0
  100. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/metrics/provider/base.py +0 -0
  101. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/__init__.py +0 -0
  102. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/cloudwatch.py +0 -0
  103. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/constants.py +0 -0
  104. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/exceptions.py +0 -0
  105. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/metric_properties.py +0 -0
  106. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/types.py +0 -0
  107. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/metrics/provider/cold_start.py +0 -0
  108. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/metrics/provider/datadog/__init__.py +0 -0
  109. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/metrics/provider/datadog/datadog.py +0 -0
  110. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/metrics/provider/datadog/metrics.py +0 -0
  111. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/metrics/provider/datadog/warnings.py +0 -0
  112. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/metrics/types.py +0 -0
  113. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/middleware_factory/__init__.py +0 -0
  114. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/middleware_factory/exceptions.py +0 -0
  115. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/middleware_factory/factory.py +0 -0
  116. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/package_logger.py +0 -0
  117. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/py.typed +0 -0
  118. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/shared/__init__.py +0 -0
  119. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/shared/cache_dict.py +0 -0
  120. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/shared/constants.py +0 -0
  121. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/shared/cookies.py +0 -0
  122. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/shared/dynamodb_deserializer.py +0 -0
  123. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/shared/functions.py +0 -0
  124. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/shared/headers_serializer.py +0 -0
  125. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/shared/json_encoder.py +0 -0
  126. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/shared/lazy_import.py +0 -0
  127. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/shared/types.py +0 -0
  128. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/shared/user_agent.py +0 -0
  129. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/tracing/__init__.py +0 -0
  130. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/tracing/base.py +0 -0
  131. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/tracing/extensions.py +0 -0
  132. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/tracing/tracer.py +0 -0
  133. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/__init__.py +0 -0
  134. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/batch/__init__.py +0 -0
  135. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/batch/base.py +0 -0
  136. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/batch/decorators.py +0 -0
  137. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/batch/exceptions.py +0 -0
  138. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/batch/sqs_fifo_partial_processor.py +0 -0
  139. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/batch/types.py +0 -0
  140. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/__init__.py +0 -0
  141. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/active_mq_event.py +0 -0
  142. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/alb_event.py +0 -0
  143. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/api_gateway_authorizer_event.py +0 -0
  144. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py +0 -0
  145. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/api_gateway_websocket_event.py +0 -0
  146. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/appsync/__init__.py +0 -0
  147. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/appsync/scalar_types_utils.py +0 -0
  148. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/appsync_authorizer_event.py +0 -0
  149. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/appsync_resolver_event.py +0 -0
  150. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/appsync_resolver_events_event.py +0 -0
  151. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/aws_config_rule_event.py +0 -0
  152. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/bedrock_agent_event.py +0 -0
  153. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/bedrock_agent_function_event.py +0 -0
  154. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/cloud_watch_alarm_event.py +0 -0
  155. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/cloud_watch_custom_widget_event.py +0 -0
  156. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/cloud_watch_logs_event.py +0 -0
  157. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/cloudformation_custom_resource_event.py +0 -0
  158. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/code_deploy_lifecycle_hook_event.py +0 -0
  159. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/code_pipeline_job_event.py +0 -0
  160. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/cognito_user_pool_event.py +0 -0
  161. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/common.py +0 -0
  162. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/connect_contact_flow_event.py +0 -0
  163. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/dynamo_db_stream_event.py +0 -0
  164. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/event_bridge_event.py +0 -0
  165. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/event_source.py +0 -0
  166. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/iot_registry_event.py +0 -0
  167. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/kinesis_firehose_event.py +0 -0
  168. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/kinesis_stream_event.py +0 -0
  169. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/lambda_function_url_event.py +0 -0
  170. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/rabbit_mq_event.py +0 -0
  171. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/s3_batch_operation_event.py +0 -0
  172. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/s3_event.py +0 -0
  173. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/s3_object_event.py +0 -0
  174. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/secrets_manager_event.py +0 -0
  175. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/ses_event.py +0 -0
  176. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/shared_functions.py +0 -0
  177. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/sns_event.py +0 -0
  178. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/sqs_event.py +0 -0
  179. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/transfer_family_event.py +0 -0
  180. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_classes/vpc_lattice.py +0 -0
  181. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_masking/__init__.py +0 -0
  182. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_masking/base.py +0 -0
  183. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_masking/constants.py +0 -0
  184. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_masking/exceptions.py +0 -0
  185. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_masking/provider/__init__.py +0 -0
  186. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_masking/provider/base.py +0 -0
  187. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_masking/provider/kms/__init__.py +0 -0
  188. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/data_masking/provider/kms/aws_encryption_sdk.py +0 -0
  189. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/feature_flags/__init__.py +0 -0
  190. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/feature_flags/appconfig.py +0 -0
  191. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/feature_flags/base.py +0 -0
  192. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/feature_flags/comparators.py +0 -0
  193. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/feature_flags/constants.py +0 -0
  194. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/feature_flags/exceptions.py +0 -0
  195. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/feature_flags/feature_flags.py +0 -0
  196. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/feature_flags/schema.py +0 -0
  197. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/feature_flags/types.py +0 -0
  198. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/idempotency/__init__.py +0 -0
  199. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/idempotency/base.py +0 -0
  200. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/idempotency/config.py +0 -0
  201. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/idempotency/exceptions.py +0 -0
  202. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/idempotency/hook.py +0 -0
  203. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/idempotency/idempotency.py +0 -0
  204. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/idempotency/persistence/__init__.py +0 -0
  205. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/idempotency/persistence/base.py +0 -0
  206. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/idempotency/persistence/cache.py +0 -0
  207. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/idempotency/persistence/datarecord.py +0 -0
  208. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/idempotency/persistence/dynamodb.py +0 -0
  209. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/idempotency/persistence/redis.py +0 -0
  210. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/idempotency/serialization/__init__.py +0 -0
  211. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/idempotency/serialization/base.py +0 -0
  212. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/idempotency/serialization/custom_dict.py +0 -0
  213. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/idempotency/serialization/dataclass.py +0 -0
  214. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/idempotency/serialization/functions.py +0 -0
  215. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/idempotency/serialization/no_op.py +0 -0
  216. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/idempotency/serialization/pydantic.py +0 -0
  217. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/jmespath_utils/__init__.py +0 -0
  218. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/jmespath_utils/envelopes.py +0 -0
  219. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parameters/__init__.py +0 -0
  220. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parameters/appconfig.py +0 -0
  221. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parameters/base.py +0 -0
  222. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parameters/constants.py +0 -0
  223. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parameters/dynamodb.py +0 -0
  224. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parameters/exceptions.py +0 -0
  225. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parameters/secrets.py +0 -0
  226. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parameters/ssm.py +0 -0
  227. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parameters/types.py +0 -0
  228. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/__init__.py +0 -0
  229. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/envelopes/__init__.py +0 -0
  230. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/envelopes/apigw.py +0 -0
  231. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/envelopes/apigw_websocket.py +0 -0
  232. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/envelopes/apigwv2.py +0 -0
  233. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/envelopes/base.py +0 -0
  234. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/envelopes/bedrock_agent.py +0 -0
  235. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/envelopes/cloudwatch.py +0 -0
  236. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/envelopes/dynamodb.py +0 -0
  237. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/envelopes/event_bridge.py +0 -0
  238. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/envelopes/kafka.py +0 -0
  239. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/envelopes/kinesis.py +0 -0
  240. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/envelopes/kinesis_firehose.py +0 -0
  241. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/envelopes/lambda_function_url.py +0 -0
  242. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/envelopes/sns.py +0 -0
  243. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/envelopes/sqs.py +0 -0
  244. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/envelopes/vpc_lattice.py +0 -0
  245. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/envelopes/vpc_latticev2.py +0 -0
  246. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/exceptions.py +0 -0
  247. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/functions.py +0 -0
  248. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/__init__.py +0 -0
  249. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/alb.py +0 -0
  250. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/apigw.py +0 -0
  251. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/apigw_websocket.py +0 -0
  252. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/apigwv2.py +0 -0
  253. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/appsync.py +0 -0
  254. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/bedrock_agent.py +0 -0
  255. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/cloudformation_custom_resource.py +0 -0
  256. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/cloudwatch.py +0 -0
  257. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/dynamodb.py +0 -0
  258. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/event_bridge.py +0 -0
  259. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/iot_registry_events.py +0 -0
  260. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/kinesis.py +0 -0
  261. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose.py +0 -0
  262. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose_sqs.py +0 -0
  263. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/lambda_function_url.py +0 -0
  264. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/s3.py +0 -0
  265. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/s3_batch_operation.py +0 -0
  266. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/s3_event_notification.py +0 -0
  267. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/s3_object_event.py +0 -0
  268. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/ses.py +0 -0
  269. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/sns.py +0 -0
  270. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/sqs.py +0 -0
  271. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/transfer_family.py +0 -0
  272. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/vpc_lattice.py +0 -0
  273. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/models/vpc_latticev2.py +0 -0
  274. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/parser.py +0 -0
  275. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/parser/types.py +0 -0
  276. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/serialization.py +0 -0
  277. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/streaming/__init__.py +0 -0
  278. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/streaming/_s3_seekable_io.py +0 -0
  279. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/streaming/compat.py +0 -0
  280. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/streaming/constants.py +0 -0
  281. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/streaming/s3_object.py +0 -0
  282. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/streaming/transformations/__init__.py +0 -0
  283. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/streaming/transformations/base.py +0 -0
  284. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/streaming/transformations/csv.py +0 -0
  285. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/streaming/transformations/gzip.py +0 -0
  286. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/streaming/transformations/zip.py +0 -0
  287. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/streaming/types.py +0 -0
  288. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/typing/__init__.py +0 -0
  289. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/typing/lambda_client_context.py +0 -0
  290. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/typing/lambda_client_context_mobile_client.py +0 -0
  291. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/typing/lambda_cognito_identity.py +0 -0
  292. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/typing/lambda_context.py +0 -0
  293. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/validation/__init__.py +0 -0
  294. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/validation/base.py +0 -0
  295. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/validation/envelopes.py +0 -0
  296. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/validation/exceptions.py +0 -0
  297. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/utilities/validation/validator.py +0 -0
  298. {aws_lambda_powertools-3.14.1a5 → aws_lambda_powertools-3.14.1a6}/aws_lambda_powertools/warnings/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: aws_lambda_powertools
3
- Version: 3.14.1a5
3
+ Version: 3.14.1a6
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
@@ -21,11 +21,14 @@ Provides-Extra: all
21
21
  Provides-Extra: aws-sdk
22
22
  Provides-Extra: datadog
23
23
  Provides-Extra: datamasking
24
+ Provides-Extra: kafka-consumer-avro
25
+ Provides-Extra: kafka-consumer-protobuf
24
26
  Provides-Extra: parser
25
27
  Provides-Extra: redis
26
28
  Provides-Extra: tracer
27
29
  Provides-Extra: validation
28
30
  Provides-Extra: valkey
31
+ Requires-Dist: avro (>=1.12.0,<2.0.0) ; extra == "kafka-consumer-avro"
29
32
  Requires-Dist: aws-encryption-sdk (>=3.1.1,<5.0.0) ; extra == "all" or extra == "datamasking"
30
33
  Requires-Dist: aws-xray-sdk (>=2.8.0,<3.0.0) ; extra == "tracer" or extra == "all"
31
34
  Requires-Dist: boto3 (>=1.34.32,<2.0.0) ; extra == "aws-sdk"
@@ -33,6 +36,7 @@ Requires-Dist: datadog-lambda (>=6.106.0,<7.0.0) ; extra == "datadog"
33
36
  Requires-Dist: fastjsonschema (>=2.14.5,<3.0.0) ; extra == "validation" or extra == "all"
34
37
  Requires-Dist: jmespath (>=1.0.1,<2.0.0)
35
38
  Requires-Dist: jsonpath-ng (>=1.6.0,<2.0.0) ; extra == "all" or extra == "datamasking"
39
+ Requires-Dist: protobuf (>=6.30.2,<7.0.0) ; extra == "kafka-consumer-protobuf"
36
40
  Requires-Dist: pydantic (>=2.4.0,<3.0.0) ; extra == "parser" or extra == "all"
37
41
  Requires-Dist: pydantic-settings (>=2.6.1,<3.0.0) ; extra == "all"
38
42
  Requires-Dist: redis (>=4.4,<7.0) ; extra == "redis"
@@ -407,7 +407,7 @@ class Route:
407
407
 
408
408
  # OpenAPI spec only understands paths with { }. So we'll have to convert Powertools' < >.
409
409
  # https://swagger.io/specification/#path-templating
410
- self.openapi_path = re.sub(r"<(.*?)>", lambda m: f"{{{''.join(m.group(1))}}}", self.path)
410
+ self.openapi_path = re.sub(r"<(.*?)>", lambda m: f"{{{''.join(m.group(1))}}}", self.path) # type: ignore[arg-type]
411
411
 
412
412
  self.rule = rule
413
413
  self.func = func
@@ -1,3 +1,3 @@
1
1
  """Exposes version constant to avoid circular dependencies."""
2
2
 
3
- VERSION = "3.14.1a5"
3
+ VERSION = "3.14.1a6"
@@ -10,7 +10,19 @@ if TYPE_CHECKING:
10
10
  from collections.abc import Iterator
11
11
 
12
12
 
13
- class KafkaEventRecord(DictWrapper):
13
+ class KafkaEventRecordSchemaMetadata(DictWrapper):
14
+ @property
15
+ def data_format(self) -> str | None:
16
+ """The data format of the Kafka record."""
17
+ return self.get("dataFormat", None)
18
+
19
+ @property
20
+ def schema_id(self) -> str | None:
21
+ """The schema id of the Kafka record."""
22
+ return self.get("schemaId", None)
23
+
24
+
25
+ class KafkaEventRecordBase(DictWrapper):
14
26
  @property
15
27
  def topic(self) -> str:
16
28
  """The Kafka topic."""
@@ -36,6 +48,24 @@ class KafkaEventRecord(DictWrapper):
36
48
  """The Kafka record timestamp type."""
37
49
  return self["timestampType"]
38
50
 
51
+ @property
52
+ def key_schema_metadata(self) -> KafkaEventRecordSchemaMetadata | None:
53
+ """The metadata of the Key Kafka record."""
54
+ return (
55
+ None if self.get("keySchemaMetadata") is None else KafkaEventRecordSchemaMetadata(self["keySchemaMetadata"])
56
+ )
57
+
58
+ @property
59
+ def value_schema_metadata(self) -> KafkaEventRecordSchemaMetadata | None:
60
+ """The metadata of the Value Kafka record."""
61
+ return (
62
+ None
63
+ if self.get("valueSchemaMetadata") is None
64
+ else KafkaEventRecordSchemaMetadata(self["valueSchemaMetadata"])
65
+ )
66
+
67
+
68
+ class KafkaEventRecord(KafkaEventRecordBase):
39
69
  @property
40
70
  def key(self) -> str | None:
41
71
  """
@@ -83,18 +113,7 @@ class KafkaEventRecord(DictWrapper):
83
113
  return CaseInsensitiveDict((k, bytes(v)) for chunk in self.headers for k, v in chunk.items())
84
114
 
85
115
 
86
- class KafkaEvent(DictWrapper):
87
- """Self-managed or MSK Apache Kafka event trigger
88
- Documentation:
89
- --------------
90
- - https://docs.aws.amazon.com/lambda/latest/dg/with-kafka.html
91
- - https://docs.aws.amazon.com/lambda/latest/dg/with-msk.html
92
- """
93
-
94
- def __init__(self, data: dict[str, Any]):
95
- super().__init__(data)
96
- self._records: Iterator[KafkaEventRecord] | None = None
97
-
116
+ class KafkaEventBase(DictWrapper):
98
117
  @property
99
118
  def event_source(self) -> str:
100
119
  """The AWS service from which the Kafka event record originated."""
@@ -115,6 +134,19 @@ class KafkaEvent(DictWrapper):
115
134
  """The decoded Kafka bootstrap URL."""
116
135
  return self.bootstrap_servers.split(",")
117
136
 
137
+
138
+ class KafkaEvent(KafkaEventBase):
139
+ """Self-managed or MSK Apache Kafka event trigger
140
+ Documentation:
141
+ --------------
142
+ - https://docs.aws.amazon.com/lambda/latest/dg/with-kafka.html
143
+ - https://docs.aws.amazon.com/lambda/latest/dg/with-msk.html
144
+ """
145
+
146
+ def __init__(self, data: dict[str, Any]):
147
+ super().__init__(data)
148
+ self._records: Iterator[KafkaEventRecord] | None = None
149
+
118
150
  @property
119
151
  def records(self) -> Iterator[KafkaEventRecord]:
120
152
  """The Kafka records."""
@@ -0,0 +1,9 @@
1
+ from aws_lambda_powertools.utilities.kafka.consumer_records import ConsumerRecords
2
+ from aws_lambda_powertools.utilities.kafka.kafka_consumer import kafka_consumer
3
+ from aws_lambda_powertools.utilities.kafka.schema_config import SchemaConfig
4
+
5
+ __all__ = [
6
+ "kafka_consumer",
7
+ "ConsumerRecords",
8
+ "SchemaConfig",
9
+ ]
@@ -0,0 +1,144 @@
1
+ from __future__ import annotations
2
+
3
+ from functools import cached_property
4
+ from typing import TYPE_CHECKING, Any
5
+
6
+ from aws_lambda_powertools.utilities.data_classes.common import CaseInsensitiveDict
7
+ from aws_lambda_powertools.utilities.data_classes.kafka_event import KafkaEventBase, KafkaEventRecordBase
8
+ from aws_lambda_powertools.utilities.kafka.deserializer.deserializer import get_deserializer
9
+ from aws_lambda_powertools.utilities.kafka.serialization.serialization import serialize_to_output_type
10
+
11
+ if TYPE_CHECKING:
12
+ from collections.abc import Iterator
13
+
14
+ from aws_lambda_powertools.utilities.kafka.schema_config import SchemaConfig
15
+
16
+
17
+ class ConsumerRecordRecords(KafkaEventRecordBase):
18
+ """
19
+ A Kafka Consumer Record
20
+ """
21
+
22
+ def __init__(self, data: dict[str, Any], schema_config: SchemaConfig | None = None):
23
+ super().__init__(data)
24
+ self.schema_config = schema_config
25
+
26
+ @cached_property
27
+ def key(self) -> Any:
28
+ key = self.get("key")
29
+
30
+ # Return None if key doesn't exist
31
+ if not key:
32
+ return None
33
+
34
+ # Determine schema type and schema string
35
+ schema_type = None
36
+ schema_str = None
37
+ output_serializer = None
38
+
39
+ if self.schema_config and self.schema_config.key_schema_type:
40
+ schema_type = self.schema_config.key_schema_type
41
+ schema_str = self.schema_config.key_schema
42
+ output_serializer = self.schema_config.key_output_serializer
43
+
44
+ # Always use get_deserializer if None it will default to DEFAULT
45
+ deserializer = get_deserializer(schema_type, schema_str)
46
+ deserialized_value = deserializer.deserialize(key)
47
+
48
+ # Apply output serializer if specified
49
+ if output_serializer:
50
+ return serialize_to_output_type(deserialized_value, output_serializer)
51
+
52
+ return deserialized_value
53
+
54
+ @cached_property
55
+ def value(self) -> Any:
56
+ value = self["value"]
57
+
58
+ # Determine schema type and schema string
59
+ schema_type = None
60
+ schema_str = None
61
+ output_serializer = None
62
+
63
+ if self.schema_config and self.schema_config.value_schema_type:
64
+ schema_type = self.schema_config.value_schema_type
65
+ schema_str = self.schema_config.value_schema
66
+ output_serializer = self.schema_config.value_output_serializer
67
+
68
+ # Always use get_deserializer if None it will default to DEFAULT
69
+ deserializer = get_deserializer(schema_type, schema_str)
70
+ deserialized_value = deserializer.deserialize(value)
71
+
72
+ # Apply output serializer if specified
73
+ if output_serializer:
74
+ return serialize_to_output_type(deserialized_value, output_serializer)
75
+
76
+ return deserialized_value
77
+
78
+ @property
79
+ def original_value(self) -> str:
80
+ """The original (base64 encoded) Kafka record value."""
81
+ return self["value"]
82
+
83
+ @property
84
+ def original_key(self) -> str | None:
85
+ """
86
+ The original (base64 encoded) Kafka record key.
87
+
88
+ This key is optional; if not provided,
89
+ a round-robin algorithm will be used to determine
90
+ the partition for the message.
91
+ """
92
+
93
+ return self.get("key")
94
+
95
+ @property
96
+ def original_headers(self) -> list[dict[str, list[int]]]:
97
+ """The raw Kafka record headers."""
98
+ return self["headers"]
99
+
100
+ @cached_property
101
+ def headers(self) -> dict[str, bytes]:
102
+ """Decodes the headers as a single dictionary."""
103
+ return CaseInsensitiveDict((k, bytes(v)) for chunk in self.original_headers for k, v in chunk.items())
104
+
105
+
106
+ class ConsumerRecords(KafkaEventBase):
107
+ """Self-managed or MSK Apache Kafka event trigger
108
+ Documentation:
109
+ --------------
110
+ - https://docs.aws.amazon.com/lambda/latest/dg/with-kafka.html
111
+ - https://docs.aws.amazon.com/lambda/latest/dg/with-msk.html
112
+ """
113
+
114
+ def __init__(self, data: dict[str, Any], schema_config: SchemaConfig | None = None):
115
+ super().__init__(data)
116
+ self._records: Iterator[ConsumerRecordRecords] | None = None
117
+ self.schema_config = schema_config
118
+
119
+ @property
120
+ def records(self) -> Iterator[ConsumerRecordRecords]:
121
+ """The Kafka records."""
122
+ for chunk in self["records"].values():
123
+ for record in chunk:
124
+ yield ConsumerRecordRecords(data=record, schema_config=self.schema_config)
125
+
126
+ @property
127
+ def record(self) -> ConsumerRecordRecords:
128
+ """
129
+ Returns the next Kafka record using an iterator.
130
+
131
+ Returns
132
+ -------
133
+ ConsumerRecordRecords
134
+ The next Kafka record.
135
+
136
+ Raises
137
+ ------
138
+ StopIteration
139
+ If there are no more records available.
140
+
141
+ """
142
+ if self._records is None:
143
+ self._records = self.records
144
+ return next(self._records)
@@ -0,0 +1,71 @@
1
+ from __future__ import annotations
2
+
3
+ import io
4
+
5
+ from avro.io import BinaryDecoder, DatumReader
6
+ from avro.schema import parse as parse_schema
7
+
8
+ from aws_lambda_powertools.utilities.kafka.deserializer.base import DeserializerBase
9
+ from aws_lambda_powertools.utilities.kafka.exceptions import (
10
+ KafkaConsumerAvroSchemaParserError,
11
+ KafkaConsumerDeserializationError,
12
+ )
13
+
14
+
15
+ class AvroDeserializer(DeserializerBase):
16
+ """
17
+ Deserializer for Apache Avro formatted data.
18
+
19
+ This class provides functionality to deserialize Avro binary data using
20
+ a provided Avro schema definition.
21
+ """
22
+
23
+ def __init__(self, schema_str: str):
24
+ try:
25
+ self.parsed_schema = parse_schema(schema_str)
26
+ self.reader = DatumReader(self.parsed_schema)
27
+ except Exception as e:
28
+ raise KafkaConsumerAvroSchemaParserError(
29
+ f"Invalid Avro schema. Please ensure the provided avro schema is valid: {type(e).__name__}: {str(e)}",
30
+ ) from e
31
+
32
+ def deserialize(self, data: bytes | str) -> object:
33
+ """
34
+ Deserialize Avro binary data to a Python dictionary.
35
+
36
+ Parameters
37
+ ----------
38
+ data : bytes or str
39
+ The Avro binary data to deserialize. If provided as a string,
40
+ it will be decoded to bytes first.
41
+
42
+ Returns
43
+ -------
44
+ dict[str, Any]
45
+ Deserialized data as a dictionary.
46
+
47
+ Raises
48
+ ------
49
+ KafkaConsumerDeserializationError
50
+ When the data cannot be deserialized according to the schema,
51
+ typically due to data format incompatibility.
52
+
53
+ Examples
54
+ --------
55
+ >>> deserializer = AvroDeserializer(schema_str)
56
+ >>> avro_data = b'...' # binary Avro data
57
+ >>> try:
58
+ ... result = deserializer.deserialize(avro_data)
59
+ ... # Process the deserialized data
60
+ ... except KafkaConsumerDeserializationError as e:
61
+ ... print(f"Failed to deserialize: {e}")
62
+ """
63
+ try:
64
+ value = self._decode_input(data)
65
+ bytes_reader = io.BytesIO(value)
66
+ decoder = BinaryDecoder(bytes_reader)
67
+ return self.reader.read(decoder)
68
+ except Exception as e:
69
+ raise KafkaConsumerDeserializationError(
70
+ f"Error trying to deserialize avro data - {type(e).__name__}: {str(e)}",
71
+ ) from e
@@ -0,0 +1,52 @@
1
+ from __future__ import annotations
2
+
3
+ import base64
4
+ from abc import ABC, abstractmethod
5
+ from typing import Any
6
+
7
+
8
+ class DeserializerBase(ABC):
9
+ """
10
+ Abstract base class for deserializers.
11
+
12
+ This class defines the interface for all deserializers in the Kafka consumer utility
13
+ and provides a common method for decoding input data.
14
+
15
+ Methods
16
+ -------
17
+ deserialize(data)
18
+ Abstract method that must be implemented by subclasses to deserialize data.
19
+ _decode_input(data)
20
+ Helper method to decode input data to bytes.
21
+
22
+ Examples
23
+ --------
24
+ >>> class MyDeserializer(DeserializerBase):
25
+ ... def deserialize(self, data: bytes | str) -> dict[str, Any]:
26
+ ... value = self._decode_input(data)
27
+ ... # Custom deserialization logic here
28
+ ... return {"key": "value"}
29
+ """
30
+
31
+ @abstractmethod
32
+ def deserialize(self, data: str) -> dict[str, Any] | str | object:
33
+ """
34
+ Deserialize input data to a Python dictionary.
35
+
36
+ This abstract method must be implemented by subclasses to provide
37
+ specific deserialization logic.
38
+
39
+ Parameters
40
+ ----------
41
+ data : str
42
+ The data to deserialize, it's always a base64 encoded string
43
+
44
+ Returns
45
+ -------
46
+ dict[str, Any]
47
+ The deserialized data as a dictionary.
48
+ """
49
+ raise NotImplementedError("Subclasses must implement the deserialize method")
50
+
51
+ def _decode_input(self, data: bytes | str) -> bytes:
52
+ return base64.b64decode(data)
@@ -0,0 +1,46 @@
1
+ from __future__ import annotations
2
+
3
+ import base64
4
+
5
+ from aws_lambda_powertools.utilities.kafka.deserializer.base import DeserializerBase
6
+
7
+
8
+ class DefaultDeserializer(DeserializerBase):
9
+ """
10
+ A default deserializer that performs base64 decode + binary decode on the input data.
11
+
12
+ This deserializer simply returns the input data with base64 decode, which is useful when
13
+ no customized deserialization is needed or when handling raw data formats.
14
+ """
15
+
16
+ def deserialize(self, data: bytes | str) -> str:
17
+ """
18
+ Return the input data base64 decoded.
19
+
20
+ This method implements the deserialize interface and performs base64 decode.
21
+
22
+ Parameters
23
+ ----------
24
+ data : bytes or str
25
+ The input data to "deserialize".
26
+
27
+ Returns
28
+ -------
29
+ dict[str, Any]
30
+ The input data base64 decoded.
31
+
32
+ Example
33
+ --------
34
+ >>> deserializer = NoOpDeserializer()
35
+ >>>
36
+ >>> # With string input
37
+ >>> string_data = "Hello, world!"
38
+ >>> result = deserializer.deserialize(string_data)
39
+ >>> print(result == string_data) # Output: True
40
+ >>>
41
+ >>> # With bytes input
42
+ >>> bytes_data = b"Binary data"
43
+ >>> result = deserializer.deserialize(bytes_data)
44
+ >>> print(result == bytes_data) # Output: True
45
+ """
46
+ return base64.b64decode(data).decode("utf-8")
@@ -0,0 +1,107 @@
1
+ from __future__ import annotations
2
+
3
+ import hashlib
4
+ from typing import TYPE_CHECKING, Any
5
+
6
+ from aws_lambda_powertools.utilities.kafka.deserializer.default import DefaultDeserializer
7
+ from aws_lambda_powertools.utilities.kafka.deserializer.json import JsonDeserializer
8
+
9
+ if TYPE_CHECKING:
10
+ from aws_lambda_powertools.utilities.kafka.deserializer.base import DeserializerBase
11
+
12
+ # Cache for deserializers
13
+ _deserializer_cache: dict[str, DeserializerBase] = {}
14
+
15
+
16
+ def _get_cache_key(schema_type: str | object, schema_value: Any) -> str:
17
+ if schema_value is None:
18
+ return str(schema_type)
19
+
20
+ if isinstance(schema_value, str):
21
+ # For string schemas like Avro, hash the content
22
+ schema_hash = hashlib.md5(schema_value.encode("utf-8"), usedforsecurity=False).hexdigest()
23
+ else:
24
+ # For objects like Protobuf, use the object id
25
+ schema_hash = str(id(schema_value))
26
+
27
+ return f"{schema_type}_{schema_hash}"
28
+
29
+
30
+ def get_deserializer(schema_type: str | object, schema_value: Any) -> DeserializerBase:
31
+ """
32
+ Factory function to get the appropriate deserializer based on schema type.
33
+
34
+ This function creates and returns a deserializer instance that corresponds to the
35
+ specified schema type. It handles lazy imports for optional dependencies.
36
+
37
+ Parameters
38
+ ----------
39
+ schema_type : str
40
+ The type of schema to use for deserialization.
41
+ Supported values are: "AVRO", "PROTOBUF", "JSON", or any other value for no-op.
42
+ schema_value : Any
43
+ The schema definition to use for deserialization. The format depends on the
44
+ schema_type:
45
+ - For "AVRO": A string containing the Avro schema definition
46
+ - For "PROTOBUF": A object containing the Protobuf schema definition
47
+ - For "JSON": Not used (can be None)
48
+ - For other types: Not used (can be None)
49
+
50
+ Returns
51
+ -------
52
+ DeserializerBase
53
+ An instance of a deserializer that implements the DeserializerBase interface.
54
+
55
+ Examples
56
+ --------
57
+ >>> # Get an Avro deserializer
58
+ >>> avro_schema = '''
59
+ ... {
60
+ ... "type": "record",
61
+ ... "name": "User",
62
+ ... "fields": [
63
+ ... {"name": "name", "type": "string"},
64
+ ... {"name": "age", "type": "int"}
65
+ ... ]
66
+ ... }
67
+ ... '''
68
+ >>> deserializer = get_deserializer("AVRO", avro_schema)
69
+ >>>
70
+ >>> # Get a JSON deserializer
71
+ >>> json_deserializer = get_deserializer("JSON", None)
72
+ >>>
73
+ >>> # Get a no-op deserializer for raw data
74
+ >>> no_op_deserializer = get_deserializer("RAW", None)
75
+ """
76
+
77
+ # Generate a cache key based on schema type and value
78
+ cache_key = _get_cache_key(schema_type, schema_value)
79
+
80
+ # Check if we already have this deserializer in cache
81
+ if cache_key in _deserializer_cache:
82
+ return _deserializer_cache[cache_key]
83
+
84
+ deserializer: DeserializerBase
85
+
86
+ if schema_type == "AVRO":
87
+ # Import here to avoid dependency if not used
88
+ from aws_lambda_powertools.utilities.kafka.deserializer.avro import AvroDeserializer
89
+
90
+ deserializer = AvroDeserializer(schema_value)
91
+ elif schema_type == "PROTOBUF":
92
+ # Import here to avoid dependency if not used
93
+ from aws_lambda_powertools.utilities.kafka.deserializer.protobuf import ProtobufDeserializer
94
+
95
+ deserializer = ProtobufDeserializer(schema_value)
96
+ elif schema_type == "JSON":
97
+ deserializer = JsonDeserializer()
98
+
99
+ else:
100
+ # Default to no-op deserializer
101
+ deserializer = DefaultDeserializer()
102
+
103
+ # Store in cache for future use
104
+ _deserializer_cache[cache_key] = deserializer
105
+
106
+ # Default to default deserializer that is base64 decode + bytes decoded
107
+ return deserializer
@@ -0,0 +1,53 @@
1
+ from __future__ import annotations
2
+
3
+ import base64
4
+ import json
5
+
6
+ from aws_lambda_powertools.utilities.kafka.deserializer.base import DeserializerBase
7
+ from aws_lambda_powertools.utilities.kafka.exceptions import KafkaConsumerDeserializationError
8
+
9
+
10
+ class JsonDeserializer(DeserializerBase):
11
+ """
12
+ Deserializer for JSON formatted data.
13
+
14
+ This class provides functionality to deserialize JSON data from bytes or string
15
+ into Python dictionaries.
16
+ """
17
+
18
+ def deserialize(self, data: bytes | str) -> dict:
19
+ """
20
+ Deserialize JSON data to a Python dictionary.
21
+
22
+ Parameters
23
+ ----------
24
+ data : bytes or str
25
+ The JSON data to deserialize. If provided as bytes, it will be decoded as UTF-8.
26
+ If provided as a string, it's assumed to be base64-encoded and will be decoded first.
27
+
28
+ Returns
29
+ -------
30
+ dict
31
+ Deserialized data as a dictionary.
32
+
33
+ Raises
34
+ ------
35
+ KafkaConsumerDeserializationError
36
+ When the data cannot be deserialized as valid JSON.
37
+
38
+ Examples
39
+ --------
40
+ >>> deserializer = JsonDeserializer()
41
+ >>> json_data = '{"key": "value", "number": 123}'
42
+ >>> try:
43
+ ... result = deserializer.deserialize(json_data)
44
+ ... print(result["key"]) # Output: value
45
+ ... except KafkaConsumerDeserializationError as e:
46
+ ... print(f"Failed to deserialize: {e}")
47
+ """
48
+ try:
49
+ return json.loads(base64.b64decode(data).decode("utf-8"))
50
+ except Exception as e:
51
+ raise KafkaConsumerDeserializationError(
52
+ f"Error trying to deserialize json data - {type(e).__name__}: {str(e)}",
53
+ ) from e
@@ -0,0 +1,65 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any
4
+
5
+ from google.protobuf.json_format import MessageToDict
6
+
7
+ from aws_lambda_powertools.utilities.kafka.deserializer.base import DeserializerBase
8
+ from aws_lambda_powertools.utilities.kafka.exceptions import (
9
+ KafkaConsumerDeserializationError,
10
+ )
11
+
12
+
13
+ class ProtobufDeserializer(DeserializerBase):
14
+ """
15
+ Deserializer for Protocol Buffer formatted data.
16
+
17
+ This class provides functionality to deserialize Protocol Buffer binary data
18
+ into Python dictionaries using the provided Protocol Buffer message class.
19
+ """
20
+
21
+ def __init__(self, message_class: Any):
22
+ self.message_class = message_class
23
+
24
+ def deserialize(self, data: bytes | str) -> dict:
25
+ """
26
+ Deserialize Protocol Buffer binary data to a Python dictionary.
27
+
28
+ Parameters
29
+ ----------
30
+ data : bytes or str
31
+ The Protocol Buffer binary data to deserialize. If provided as a string,
32
+ it's assumed to be base64-encoded and will be decoded first.
33
+
34
+ Returns
35
+ -------
36
+ dict
37
+ Deserialized data as a dictionary with field names preserved from the
38
+ Protocol Buffer definition.
39
+
40
+ Raises
41
+ ------
42
+ KafkaConsumerDeserializationError
43
+ When the data cannot be deserialized according to the message class,
44
+ typically due to data format incompatibility or incorrect message class.
45
+
46
+ Example
47
+ --------
48
+ >>> # Assuming proper protobuf setup
49
+ >>> deserializer = ProtobufDeserializer(my_proto_module.MyMessage)
50
+ >>> proto_data = b'...' # binary protobuf data
51
+ >>> try:
52
+ ... result = deserializer.deserialize(proto_data)
53
+ ... # Process the deserialized dictionary
54
+ ... except KafkaConsumerDeserializationError as e:
55
+ ... print(f"Failed to deserialize: {e}")
56
+ """
57
+ try:
58
+ value = self._decode_input(data)
59
+ message = self.message_class()
60
+ message.ParseFromString(value)
61
+ return MessageToDict(message, preserving_proto_field_name=True)
62
+ except Exception as e:
63
+ raise KafkaConsumerDeserializationError(
64
+ f"Error trying to deserialize protobuf data - {type(e).__name__}: {str(e)}",
65
+ ) from e