aws-lambda-powertools 2.12.0__tar.gz → 2.14.0__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 (160) hide show
  1. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/PKG-INFO +1 -1
  2. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/shared/constants.py +3 -0
  3. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/shared/functions.py +5 -0
  4. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/code_pipeline_job_event.py +22 -6
  5. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parameters/appconfig.py +10 -4
  6. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parameters/base.py +13 -3
  7. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parameters/secrets.py +9 -6
  8. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parameters/ssm.py +71 -24
  9. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/streaming/_s3_seekable_io.py +21 -3
  10. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/streaming/s3_object.py +12 -3
  11. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/pyproject.toml +10 -10
  12. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/setup.py +1 -1
  13. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/LICENSE +0 -0
  14. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/README.md +0 -0
  15. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/THIRD-PARTY-LICENSES +0 -0
  16. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/__init__.py +0 -0
  17. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/event_handler/__init__.py +0 -0
  18. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/event_handler/api_gateway.py +0 -0
  19. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/event_handler/appsync.py +0 -0
  20. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/event_handler/content_types.py +0 -0
  21. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/event_handler/exceptions.py +0 -0
  22. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/event_handler/lambda_function_url.py +0 -0
  23. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/event_handler/router.py +0 -0
  24. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/exceptions/__init__.py +0 -0
  25. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/logging/__init__.py +0 -0
  26. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/logging/correlation_paths.py +0 -0
  27. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/logging/exceptions.py +0 -0
  28. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/logging/filters.py +0 -0
  29. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/logging/formatter.py +0 -0
  30. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/logging/lambda_context.py +0 -0
  31. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/logging/logger.py +0 -0
  32. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/logging/utils.py +0 -0
  33. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/metrics/__init__.py +0 -0
  34. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/metrics/base.py +0 -0
  35. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/metrics/exceptions.py +0 -0
  36. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/metrics/metric.py +0 -0
  37. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/metrics/metrics.py +0 -0
  38. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/metrics/types.py +0 -0
  39. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/middleware_factory/__init__.py +0 -0
  40. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/middleware_factory/exceptions.py +0 -0
  41. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/middleware_factory/factory.py +0 -0
  42. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/package_logger.py +0 -0
  43. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/py.typed +0 -0
  44. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/shared/__init__.py +0 -0
  45. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/shared/cache_dict.py +0 -0
  46. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/shared/cookies.py +0 -0
  47. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/shared/headers_serializer.py +0 -0
  48. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/shared/json_encoder.py +0 -0
  49. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/shared/lazy_import.py +0 -0
  50. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/shared/types.py +0 -0
  51. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/tracing/__init__.py +0 -0
  52. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/tracing/base.py +0 -0
  53. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/tracing/extensions.py +0 -0
  54. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/tracing/tracer.py +0 -0
  55. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/__init__.py +0 -0
  56. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/batch/__init__.py +0 -0
  57. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/batch/base.py +0 -0
  58. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/batch/decorators.py +0 -0
  59. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/batch/exceptions.py +0 -0
  60. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/batch/sqs_fifo_partial_processor.py +0 -0
  61. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/batch/types.py +0 -0
  62. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/__init__.py +0 -0
  63. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/active_mq_event.py +0 -0
  64. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/alb_event.py +0 -0
  65. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/api_gateway_authorizer_event.py +0 -0
  66. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py +0 -0
  67. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/appsync/__init__.py +0 -0
  68. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/appsync/scalar_types_utils.py +0 -0
  69. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/appsync_authorizer_event.py +0 -0
  70. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/appsync_resolver_event.py +0 -0
  71. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_custom_widget_event.py +0 -0
  72. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_logs_event.py +0 -0
  73. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/cognito_user_pool_event.py +0 -0
  74. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/common.py +0 -0
  75. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/connect_contact_flow_event.py +0 -0
  76. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/dynamo_db_stream_event.py +0 -0
  77. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/event_bridge_event.py +0 -0
  78. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/event_source.py +0 -0
  79. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/kafka_event.py +0 -0
  80. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/kinesis_firehose_event.py +0 -0
  81. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/kinesis_stream_event.py +0 -0
  82. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/lambda_function_url_event.py +0 -0
  83. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/rabbit_mq_event.py +0 -0
  84. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/s3_event.py +0 -0
  85. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/s3_object_event.py +0 -0
  86. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/ses_event.py +0 -0
  87. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/sns_event.py +0 -0
  88. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/data_classes/sqs_event.py +0 -0
  89. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/feature_flags/__init__.py +0 -0
  90. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/feature_flags/appconfig.py +0 -0
  91. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/feature_flags/base.py +0 -0
  92. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/feature_flags/exceptions.py +0 -0
  93. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/feature_flags/feature_flags.py +0 -0
  94. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/feature_flags/schema.py +0 -0
  95. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/feature_flags/time_conditions.py +0 -0
  96. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/idempotency/__init__.py +0 -0
  97. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/idempotency/base.py +0 -0
  98. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/idempotency/config.py +0 -0
  99. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/idempotency/exceptions.py +0 -0
  100. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/idempotency/idempotency.py +0 -0
  101. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/idempotency/persistence/__init__.py +0 -0
  102. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/idempotency/persistence/base.py +0 -0
  103. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/idempotency/persistence/dynamodb.py +0 -0
  104. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/jmespath_utils/__init__.py +0 -0
  105. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/jmespath_utils/envelopes.py +0 -0
  106. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parameters/__init__.py +0 -0
  107. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parameters/dynamodb.py +0 -0
  108. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parameters/exceptions.py +0 -0
  109. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parameters/types.py +0 -0
  110. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/__init__.py +0 -0
  111. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/envelopes/__init__.py +0 -0
  112. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/envelopes/apigw.py +0 -0
  113. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/envelopes/apigwv2.py +0 -0
  114. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/envelopes/base.py +0 -0
  115. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/envelopes/cloudwatch.py +0 -0
  116. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/envelopes/dynamodb.py +0 -0
  117. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/envelopes/event_bridge.py +0 -0
  118. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/envelopes/kafka.py +0 -0
  119. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/envelopes/kinesis.py +0 -0
  120. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/envelopes/kinesis_firehose.py +0 -0
  121. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/envelopes/lambda_function_url.py +0 -0
  122. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/envelopes/sns.py +0 -0
  123. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/envelopes/sqs.py +0 -0
  124. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/exceptions.py +0 -0
  125. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/models/__init__.py +0 -0
  126. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/models/alb.py +0 -0
  127. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/models/apigw.py +0 -0
  128. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/models/apigwv2.py +0 -0
  129. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/models/cloudwatch.py +0 -0
  130. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/models/dynamodb.py +0 -0
  131. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/models/event_bridge.py +0 -0
  132. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/models/kafka.py +0 -0
  133. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/models/kinesis.py +0 -0
  134. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose.py +0 -0
  135. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/models/lambda_function_url.py +0 -0
  136. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/models/s3.py +0 -0
  137. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/models/s3_object_event.py +0 -0
  138. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/models/ses.py +0 -0
  139. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/models/sns.py +0 -0
  140. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/models/sqs.py +0 -0
  141. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/parser.py +0 -0
  142. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/pydantic.py +0 -0
  143. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/parser/types.py +0 -0
  144. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/streaming/__init__.py +0 -0
  145. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/streaming/compat.py +0 -0
  146. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/streaming/transformations/__init__.py +0 -0
  147. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/streaming/transformations/base.py +0 -0
  148. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/streaming/transformations/csv.py +0 -0
  149. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/streaming/transformations/gzip.py +0 -0
  150. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/streaming/transformations/zip.py +0 -0
  151. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/typing/__init__.py +0 -0
  152. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/typing/lambda_client_context.py +0 -0
  153. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/typing/lambda_client_context_mobile_client.py +0 -0
  154. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/typing/lambda_cognito_identity.py +0 -0
  155. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/typing/lambda_context.py +0 -0
  156. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/validation/__init__.py +0 -0
  157. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/validation/base.py +0 -0
  158. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/validation/envelopes.py +0 -0
  159. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/validation/exceptions.py +0 -0
  160. {aws_lambda_powertools-2.12.0 → aws_lambda_powertools-2.14.0}/aws_lambda_powertools/utilities/validation/validator.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: aws-lambda-powertools
3
- Version: 2.12.0
3
+ Version: 2.14.0
4
4
  Summary: AWS Lambda Powertools is a developer toolkit to implement Serverless best practices and increase developer velocity.
5
5
  Home-page: https://github.com/awslabs/aws-lambda-powertools-python
6
6
  License: MIT
@@ -22,6 +22,9 @@ XRAY_SDK_CORE_MODULE: str = "aws_xray_sdk.core"
22
22
 
23
23
  IDEMPOTENCY_DISABLED_ENV: str = "POWERTOOLS_IDEMPOTENCY_DISABLED"
24
24
 
25
+ PARAMETERS_SSM_DECRYPT_ENV: str = "POWERTOOLS_PARAMETERS_SSM_DECRYPT"
26
+ PARAMETERS_MAX_AGE_ENV: str = "POWERTOOLS_PARAMETERS_MAX_AGE"
27
+
25
28
  LOGGER_LAMBDA_CONTEXT_KEYS = [
26
29
  "function_arn",
27
30
  "function_memory_size",
@@ -51,6 +51,11 @@ def resolve_truthy_env_var_choice(env: str, choice: Optional[bool] = None) -> bo
51
51
  return choice if choice is not None else strtobool(env)
52
52
 
53
53
 
54
+ def resolve_max_age(env: str, choice: Optional[int]) -> int:
55
+ """Resolve max age value"""
56
+ return choice if choice is not None else int(env)
57
+
58
+
54
59
  @overload
55
60
  def resolve_env_var_choice(env: Optional[str], choice: float) -> float:
56
61
  ...
@@ -16,14 +16,14 @@ class CodePipelineConfiguration(DictWrapper):
16
16
  return self["FunctionName"]
17
17
 
18
18
  @property
19
- def user_parameters(self) -> str:
19
+ def user_parameters(self) -> Optional[str]:
20
20
  """User parameters"""
21
- return self["UserParameters"]
21
+ return self.get("UserParameters", None)
22
22
 
23
23
  @property
24
- def decoded_user_parameters(self) -> Dict[str, Any]:
24
+ def decoded_user_parameters(self) -> Optional[Dict[str, Any]]:
25
25
  """Json Decoded user parameters"""
26
- if self._json_data is None:
26
+ if self._json_data is None and self.user_parameters is not None:
27
27
  self._json_data = json.loads(self.user_parameters)
28
28
  return self._json_data
29
29
 
@@ -97,6 +97,16 @@ class CodePipelineArtifactCredentials(DictWrapper):
97
97
  return self.get("expirationTime")
98
98
 
99
99
 
100
+ class CodePipelineEncryptionKey(DictWrapper):
101
+ @property
102
+ def get_id(self) -> str:
103
+ return self["id"]
104
+
105
+ @property
106
+ def get_type(self) -> str:
107
+ return self["type"]
108
+
109
+
100
110
  class CodePipelineData(DictWrapper):
101
111
  """CodePipeline Job Data"""
102
112
 
@@ -125,6 +135,12 @@ class CodePipelineData(DictWrapper):
125
135
  """A continuation token if continuing job"""
126
136
  return self.get("continuationToken")
127
137
 
138
+ @property
139
+ def encryption_key(self) -> Optional[CodePipelineEncryptionKey]:
140
+ """Represents a CodePipeline encryption key"""
141
+ key_data = self.get("encryptionKey")
142
+ return CodePipelineEncryptionKey(key_data) if key_data is not None else None
143
+
128
144
 
129
145
  class CodePipelineJobEvent(DictWrapper):
130
146
  """AWS CodePipeline Job Event
@@ -155,12 +171,12 @@ class CodePipelineJobEvent(DictWrapper):
155
171
  return CodePipelineData(self._job["data"])
156
172
 
157
173
  @property
158
- def user_parameters(self) -> str:
174
+ def user_parameters(self) -> Optional[str]:
159
175
  """Action configuration user parameters"""
160
176
  return self.data.action_configuration.configuration.user_parameters
161
177
 
162
178
  @property
163
- def decoded_user_parameters(self) -> Dict[str, Any]:
179
+ def decoded_user_parameters(self) -> Optional[Dict[str, Any]]:
164
180
  """Json Decoded action configuration user parameters"""
165
181
  return self.data.action_configuration.configuration.decoded_user_parameters
166
182
 
@@ -14,8 +14,12 @@ from aws_lambda_powertools.utilities.parameters.types import TransformOptions
14
14
  if TYPE_CHECKING:
15
15
  from mypy_boto3_appconfigdata import AppConfigDataClient
16
16
 
17
- from ...shared import constants
18
- from ...shared.functions import resolve_env_var_choice
17
+ from aws_lambda_powertools.shared import constants
18
+ from aws_lambda_powertools.shared.functions import (
19
+ resolve_env_var_choice,
20
+ resolve_max_age,
21
+ )
22
+
19
23
  from .base import DEFAULT_MAX_AGE_SECS, DEFAULT_PROVIDERS, BaseProvider
20
24
 
21
25
 
@@ -136,7 +140,7 @@ def get_app_config(
136
140
  application: Optional[str] = None,
137
141
  transform: TransformOptions = None,
138
142
  force_fetch: bool = False,
139
- max_age: int = DEFAULT_MAX_AGE_SECS,
143
+ max_age: Optional[int] = None,
140
144
  **sdk_options
141
145
  ) -> Union[str, list, dict, bytes]:
142
146
  """
@@ -154,7 +158,7 @@ def get_app_config(
154
158
  Transforms the content from a JSON object ('json') or base64 binary string ('binary')
155
159
  force_fetch: bool, optional
156
160
  Force update even before a cached item has expired, defaults to False
157
- max_age: int
161
+ max_age: int, optional
158
162
  Maximum age of the cached value
159
163
  sdk_options: dict, optional
160
164
  SDK options to propagate to `start_configuration_session` API call
@@ -187,6 +191,8 @@ def get_app_config(
187
191
  >>> print(value)
188
192
  My configuration's JSON value
189
193
  """
194
+ # If max_age is not set, resolve it from the environment variable, defaulting to DEFAULT_MAX_AGE_SECS
195
+ max_age = resolve_max_age(env=os.getenv(constants.PARAMETERS_MAX_AGE_ENV, DEFAULT_MAX_AGE_SECS), choice=max_age)
190
196
 
191
197
  # Only create the provider if this function is called at least once
192
198
  if "appconfig" not in DEFAULT_PROVIDERS:
@@ -5,6 +5,7 @@ from __future__ import annotations
5
5
 
6
6
  import base64
7
7
  import json
8
+ import os
8
9
  from abc import ABC, abstractmethod
9
10
  from datetime import datetime, timedelta
10
11
  from typing import (
@@ -24,6 +25,8 @@ from typing import (
24
25
  import boto3
25
26
  from botocore.config import Config
26
27
 
28
+ from aws_lambda_powertools.shared import constants
29
+ from aws_lambda_powertools.shared.functions import resolve_max_age
27
30
  from aws_lambda_powertools.utilities.parameters.types import TransformOptions
28
31
 
29
32
  from .exceptions import GetParameterError, TransformParameterError
@@ -35,7 +38,8 @@ if TYPE_CHECKING:
35
38
  from mypy_boto3_ssm import SSMClient
36
39
 
37
40
 
38
- DEFAULT_MAX_AGE_SECS = 5
41
+ DEFAULT_MAX_AGE_SECS = "5"
42
+
39
43
  # These providers will be dynamically initialized on first use of the helper functions
40
44
  DEFAULT_PROVIDERS: Dict[str, Any] = {}
41
45
  TRANSFORM_METHOD_JSON = "json"
@@ -77,7 +81,7 @@ class BaseProvider(ABC):
77
81
  def get(
78
82
  self,
79
83
  name: str,
80
- max_age: int = DEFAULT_MAX_AGE_SECS,
84
+ max_age: Optional[int] = None,
81
85
  transform: TransformOptions = None,
82
86
  force_fetch: bool = False,
83
87
  **sdk_options,
@@ -121,6 +125,9 @@ class BaseProvider(ABC):
121
125
  value: Optional[Union[str, bytes, dict]] = None
122
126
  key = (name, transform)
123
127
 
128
+ # If max_age is not set, resolve it from the environment variable, defaulting to DEFAULT_MAX_AGE_SECS
129
+ max_age = resolve_max_age(env=os.getenv(constants.PARAMETERS_MAX_AGE_ENV, DEFAULT_MAX_AGE_SECS), choice=max_age)
130
+
124
131
  if not force_fetch and self.has_not_expired_in_cache(key):
125
132
  return self.store[key].value
126
133
 
@@ -149,7 +156,7 @@ class BaseProvider(ABC):
149
156
  def get_multiple(
150
157
  self,
151
158
  path: str,
152
- max_age: int = DEFAULT_MAX_AGE_SECS,
159
+ max_age: Optional[int] = None,
153
160
  transform: TransformOptions = None,
154
161
  raise_on_transform_error: bool = False,
155
162
  force_fetch: bool = False,
@@ -186,6 +193,9 @@ class BaseProvider(ABC):
186
193
  """
187
194
  key = (path, transform)
188
195
 
196
+ # If max_age is not set, resolve it from the environment variable, defaulting to DEFAULT_MAX_AGE_SECS
197
+ max_age = resolve_max_age(env=os.getenv(constants.PARAMETERS_MAX_AGE_ENV, DEFAULT_MAX_AGE_SECS), choice=max_age)
198
+
189
199
  if not force_fetch and self.has_not_expired_in_cache(key):
190
200
  return self.store[key].value # type: ignore # need to revisit entire typing here
191
201
 
@@ -3,6 +3,7 @@ AWS Secrets Manager parameter retrieval and caching utility
3
3
  """
4
4
 
5
5
 
6
+ import os
6
7
  from typing import TYPE_CHECKING, Any, Dict, Optional, Union
7
8
 
8
9
  import boto3
@@ -11,6 +12,9 @@ from botocore.config import Config
11
12
  if TYPE_CHECKING:
12
13
  from mypy_boto3_secretsmanager import SecretsManagerClient
13
14
 
15
+ from aws_lambda_powertools.shared import constants
16
+ from aws_lambda_powertools.shared.functions import resolve_max_age
17
+
14
18
  from .base import DEFAULT_MAX_AGE_SECS, DEFAULT_PROVIDERS, BaseProvider
15
19
 
16
20
 
@@ -111,11 +115,7 @@ class SecretsProvider(BaseProvider):
111
115
 
112
116
 
113
117
  def get_secret(
114
- name: str,
115
- transform: Optional[str] = None,
116
- force_fetch: bool = False,
117
- max_age: int = DEFAULT_MAX_AGE_SECS,
118
- **sdk_options
118
+ name: str, transform: Optional[str] = None, force_fetch: bool = False, max_age: Optional[int] = None, **sdk_options
119
119
  ) -> Union[str, dict, bytes]:
120
120
  """
121
121
  Retrieve a parameter value from AWS Secrets Manager
@@ -128,7 +128,7 @@ def get_secret(
128
128
  Transforms the content from a JSON object ('json') or base64 binary string ('binary')
129
129
  force_fetch: bool, optional
130
130
  Force update even before a cached item has expired, defaults to False
131
- max_age: int
131
+ max_age: int, optional
132
132
  Maximum age of the cached value
133
133
  sdk_options: dict, optional
134
134
  Dictionary of options that will be passed to the get_secret_value call
@@ -162,6 +162,9 @@ def get_secret(
162
162
  >>> get_secret("my-secret", VersionId="f658cac0-98a5-41d9-b993-8a76a7799194")
163
163
  """
164
164
 
165
+ # If max_age is not set, resolve it from the environment variable, defaulting to DEFAULT_MAX_AGE_SECS
166
+ max_age = resolve_max_age(env=os.getenv(constants.PARAMETERS_MAX_AGE_ENV, DEFAULT_MAX_AGE_SECS), choice=max_age)
167
+
165
168
  # Only create the provider if this function is called at least once
166
169
  if "secrets" not in DEFAULT_PROVIDERS:
167
170
  DEFAULT_PROVIDERS["secrets"] = SecretsProvider()
@@ -3,13 +3,19 @@ AWS SSM Parameter retrieval and caching utility
3
3
  """
4
4
  from __future__ import annotations
5
5
 
6
+ import os
6
7
  from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union, overload
7
8
 
8
9
  import boto3
9
10
  from botocore.config import Config
10
11
  from typing_extensions import Literal
11
12
 
12
- from aws_lambda_powertools.shared.functions import slice_dictionary
13
+ from aws_lambda_powertools.shared import constants
14
+ from aws_lambda_powertools.shared.functions import (
15
+ resolve_max_age,
16
+ resolve_truthy_env_var_choice,
17
+ slice_dictionary,
18
+ )
13
19
 
14
20
  from .base import DEFAULT_MAX_AGE_SECS, DEFAULT_PROVIDERS, BaseProvider, transform_value
15
21
  from .exceptions import GetParameterError
@@ -110,9 +116,9 @@ class SSMProvider(BaseProvider):
110
116
  def get( # type: ignore[override]
111
117
  self,
112
118
  name: str,
113
- max_age: int = DEFAULT_MAX_AGE_SECS,
119
+ max_age: Optional[int] = None,
114
120
  transform: TransformOptions = None,
115
- decrypt: bool = False,
121
+ decrypt: Optional[bool] = None,
116
122
  force_fetch: bool = False,
117
123
  **sdk_options,
118
124
  ) -> Optional[Union[str, dict, bytes]]:
@@ -123,7 +129,7 @@ class SSMProvider(BaseProvider):
123
129
  ----------
124
130
  name: str
125
131
  Parameter name
126
- max_age: int
132
+ max_age: int, optional
127
133
  Maximum age of the cached value
128
134
  transform: str
129
135
  Optional transformation of the parameter value. Supported values
@@ -145,6 +151,14 @@ class SSMProvider(BaseProvider):
145
151
  When the parameter provider fails to transform a parameter value.
146
152
  """
147
153
 
154
+ # If max_age is not set, resolve it from the environment variable, defaulting to DEFAULT_MAX_AGE_SECS
155
+ max_age = resolve_max_age(env=os.getenv(constants.PARAMETERS_MAX_AGE_ENV, DEFAULT_MAX_AGE_SECS), choice=max_age)
156
+
157
+ # If decrypt is not set, resolve it from the environment variable, defaulting to False
158
+ decrypt = resolve_truthy_env_var_choice(
159
+ env=os.getenv(constants.PARAMETERS_SSM_DECRYPT_ENV, "false"), choice=decrypt
160
+ )
161
+
148
162
  # Add to `decrypt` sdk_options to we can have an explicit option for this
149
163
  sdk_options["decrypt"] = decrypt
150
164
 
@@ -212,8 +226,8 @@ class SSMProvider(BaseProvider):
212
226
  self,
213
227
  parameters: Dict[str, Dict],
214
228
  transform: TransformOptions = None,
215
- decrypt: bool = False,
216
- max_age: int = DEFAULT_MAX_AGE_SECS,
229
+ decrypt: Optional[bool] = None,
230
+ max_age: Optional[int] = None,
217
231
  raise_on_error: bool = True,
218
232
  ) -> Dict[str, str] | Dict[str, bytes] | Dict[str, dict]:
219
233
  """
@@ -247,7 +261,7 @@ class SSMProvider(BaseProvider):
247
261
  Transforms the content from a JSON object ('json') or base64 binary string ('binary')
248
262
  decrypt: bool, optional
249
263
  If the parameter values should be decrypted
250
- max_age: int
264
+ max_age: int, optional
251
265
  Maximum age of the cached value
252
266
  raise_on_error: bool
253
267
  Whether to fail-fast or fail gracefully by including "_errors" key in the response, by default True
@@ -259,6 +273,15 @@ class SSMProvider(BaseProvider):
259
273
 
260
274
  When "_errors" reserved key is in parameters to be fetched from SSM.
261
275
  """
276
+
277
+ # If max_age is not set, resolve it from the environment variable, defaulting to DEFAULT_MAX_AGE_SECS
278
+ max_age = resolve_max_age(env=os.getenv(constants.PARAMETERS_MAX_AGE_ENV, DEFAULT_MAX_AGE_SECS), choice=max_age)
279
+
280
+ # If decrypt is not set, resolve it from the environment variable, defaulting to False
281
+ decrypt = resolve_truthy_env_var_choice(
282
+ env=os.getenv(constants.PARAMETERS_SSM_DECRYPT_ENV, "false"), choice=decrypt
283
+ )
284
+
262
285
  # Init potential batch/decrypt batch responses and errors
263
286
  batch_ret: Dict[str, Any] = {}
264
287
  decrypt_ret: Dict[str, Any] = {}
@@ -487,9 +510,9 @@ class SSMProvider(BaseProvider):
487
510
  def get_parameter(
488
511
  name: str,
489
512
  transform: Optional[str] = None,
490
- decrypt: bool = False,
513
+ decrypt: Optional[bool] = None,
491
514
  force_fetch: bool = False,
492
- max_age: int = DEFAULT_MAX_AGE_SECS,
515
+ max_age: Optional[int] = None,
493
516
  **sdk_options,
494
517
  ) -> Union[str, dict, bytes]:
495
518
  """
@@ -505,7 +528,7 @@ def get_parameter(
505
528
  If the parameter values should be decrypted
506
529
  force_fetch: bool, optional
507
530
  Force update even before a cached item has expired, defaults to False
508
- max_age: int
531
+ max_age: int, optional
509
532
  Maximum age of the cached value
510
533
  sdk_options: dict, optional
511
534
  Dictionary of options that will be passed to the Parameter Store get_parameter API call
@@ -543,6 +566,14 @@ def get_parameter(
543
566
  if "ssm" not in DEFAULT_PROVIDERS:
544
567
  DEFAULT_PROVIDERS["ssm"] = SSMProvider()
545
568
 
569
+ # If max_age is not set, resolve it from the environment variable, defaulting to DEFAULT_MAX_AGE_SECS
570
+ max_age = resolve_max_age(env=os.getenv(constants.PARAMETERS_MAX_AGE_ENV, DEFAULT_MAX_AGE_SECS), choice=max_age)
571
+
572
+ # If decrypt is not set, resolve it from the environment variable, defaulting to False
573
+ decrypt = resolve_truthy_env_var_choice(
574
+ env=os.getenv(constants.PARAMETERS_SSM_DECRYPT_ENV, "false"), choice=decrypt
575
+ )
576
+
546
577
  # Add to `decrypt` sdk_options to we can have an explicit option for this
547
578
  sdk_options["decrypt"] = decrypt
548
579
 
@@ -555,9 +586,9 @@ def get_parameters(
555
586
  path: str,
556
587
  transform: Optional[str] = None,
557
588
  recursive: bool = True,
558
- decrypt: bool = False,
589
+ decrypt: Optional[bool] = None,
559
590
  force_fetch: bool = False,
560
- max_age: int = DEFAULT_MAX_AGE_SECS,
591
+ max_age: Optional[int] = None,
561
592
  raise_on_transform_error: bool = False,
562
593
  **sdk_options,
563
594
  ) -> Union[Dict[str, str], Dict[str, dict], Dict[str, bytes]]:
@@ -576,7 +607,7 @@ def get_parameters(
576
607
  If the parameter values should be decrypted
577
608
  force_fetch: bool, optional
578
609
  Force update even before a cached item has expired, defaults to False
579
- max_age: int
610
+ max_age: int, optional
580
611
  Maximum age of the cached value
581
612
  raise_on_transform_error: bool, optional
582
613
  Raises an exception if any transform fails, otherwise this will
@@ -617,6 +648,14 @@ def get_parameters(
617
648
  if "ssm" not in DEFAULT_PROVIDERS:
618
649
  DEFAULT_PROVIDERS["ssm"] = SSMProvider()
619
650
 
651
+ # If max_age is not set, resolve it from the environment variable, defaulting to DEFAULT_MAX_AGE_SECS
652
+ max_age = resolve_max_age(env=os.getenv(constants.PARAMETERS_MAX_AGE_ENV, DEFAULT_MAX_AGE_SECS), choice=max_age)
653
+
654
+ # If decrypt is not set, resolve it from the environment variable, defaulting to False
655
+ decrypt = resolve_truthy_env_var_choice(
656
+ env=os.getenv(constants.PARAMETERS_SSM_DECRYPT_ENV, "false"), choice=decrypt
657
+ )
658
+
620
659
  sdk_options["recursive"] = recursive
621
660
  sdk_options["decrypt"] = decrypt
622
661
 
@@ -634,8 +673,8 @@ def get_parameters(
634
673
  def get_parameters_by_name(
635
674
  parameters: Dict[str, Dict],
636
675
  transform: None = None,
637
- decrypt: bool = False,
638
- max_age: int = DEFAULT_MAX_AGE_SECS,
676
+ decrypt: Optional[bool] = None,
677
+ max_age: Optional[int] = None,
639
678
  raise_on_error: bool = True,
640
679
  ) -> Dict[str, str]:
641
680
  ...
@@ -645,8 +684,8 @@ def get_parameters_by_name(
645
684
  def get_parameters_by_name(
646
685
  parameters: Dict[str, Dict],
647
686
  transform: Literal["binary"],
648
- decrypt: bool = False,
649
- max_age: int = DEFAULT_MAX_AGE_SECS,
687
+ decrypt: Optional[bool] = None,
688
+ max_age: Optional[int] = None,
650
689
  raise_on_error: bool = True,
651
690
  ) -> Dict[str, bytes]:
652
691
  ...
@@ -656,8 +695,8 @@ def get_parameters_by_name(
656
695
  def get_parameters_by_name(
657
696
  parameters: Dict[str, Dict],
658
697
  transform: Literal["json"],
659
- decrypt: bool = False,
660
- max_age: int = DEFAULT_MAX_AGE_SECS,
698
+ decrypt: Optional[bool] = None,
699
+ max_age: Optional[int] = None,
661
700
  raise_on_error: bool = True,
662
701
  ) -> Dict[str, Dict[str, Any]]:
663
702
  ...
@@ -667,8 +706,8 @@ def get_parameters_by_name(
667
706
  def get_parameters_by_name(
668
707
  parameters: Dict[str, Dict],
669
708
  transform: Literal["auto"],
670
- decrypt: bool = False,
671
- max_age: int = DEFAULT_MAX_AGE_SECS,
709
+ decrypt: Optional[bool] = None,
710
+ max_age: Optional[int] = None,
672
711
  raise_on_error: bool = True,
673
712
  ) -> Union[Dict[str, str], Dict[str, dict]]:
674
713
  ...
@@ -677,8 +716,8 @@ def get_parameters_by_name(
677
716
  def get_parameters_by_name(
678
717
  parameters: Dict[str, Any],
679
718
  transform: TransformOptions = None,
680
- decrypt: bool = False,
681
- max_age: int = DEFAULT_MAX_AGE_SECS,
719
+ decrypt: Optional[bool] = None,
720
+ max_age: Optional[int] = None,
682
721
  raise_on_error: bool = True,
683
722
  ) -> Union[Dict[str, str], Dict[str, bytes], Dict[str, dict]]:
684
723
  """
@@ -692,7 +731,7 @@ def get_parameters_by_name(
692
731
  Transforms the content from a JSON object ('json') or base64 binary string ('binary')
693
732
  decrypt: bool, optional
694
733
  If the parameter values should be decrypted
695
- max_age: int
734
+ max_age: int, optional
696
735
  Maximum age of the cached value
697
736
  raise_on_error: bool, optional
698
737
  Whether to fail-fast or fail gracefully by including "_errors" key in the response, by default True
@@ -732,6 +771,14 @@ def get_parameters_by_name(
732
771
  # NOTE: Decided against using multi-thread due to single-thread outperforming in 128M and 1G + timeout risk
733
772
  # see: https://github.com/awslabs/aws-lambda-powertools-python/issues/1040#issuecomment-1299954613
734
773
 
774
+ # If max_age is not set, resolve it from the environment variable, defaulting to DEFAULT_MAX_AGE_SECS
775
+ max_age = resolve_max_age(env=os.getenv(constants.PARAMETERS_MAX_AGE_ENV, DEFAULT_MAX_AGE_SECS), choice=max_age)
776
+
777
+ # If decrypt is not set, resolve it from the environment variable, defaulting to False
778
+ decrypt = resolve_truthy_env_var_choice(
779
+ env=os.getenv(constants.PARAMETERS_SSM_DECRYPT_ENV, "false"), choice=decrypt
780
+ )
781
+
735
782
  # Only create the provider if this function is called at least once
736
783
  if "ssm" not in DEFAULT_PROVIDERS:
737
784
  DEFAULT_PROVIDERS["ssm"] = SSMProvider()
@@ -1,14 +1,29 @@
1
1
  import io
2
2
  import logging
3
- from typing import IO, TYPE_CHECKING, AnyStr, Iterable, List, Optional, cast
3
+ from typing import (
4
+ IO,
5
+ TYPE_CHECKING,
6
+ Any,
7
+ Iterable,
8
+ List,
9
+ Optional,
10
+ Sequence,
11
+ TypeVar,
12
+ Union,
13
+ cast,
14
+ )
4
15
 
5
16
  import boto3
6
17
 
7
18
  from aws_lambda_powertools.utilities.streaming.compat import PowertoolsStreamingBody
8
19
 
9
20
  if TYPE_CHECKING:
21
+ from mmap import mmap
22
+
10
23
  from mypy_boto3_s3 import Client
11
24
 
25
+ _CData = TypeVar("_CData")
26
+
12
27
  logger = logging.getLogger(__name__)
13
28
 
14
29
 
@@ -177,8 +192,11 @@ class _S3SeekableIO(IO[bytes]):
177
192
  def truncate(self, size: Optional[int] = 0) -> int:
178
193
  raise NotImplementedError("this stream is not writable")
179
194
 
180
- def write(self, data: AnyStr) -> int:
195
+ def write(self, data: Union[bytes, Union[bytearray, memoryview, Sequence[Any], "mmap", "_CData"]]) -> int:
181
196
  raise NotImplementedError("this stream is not writable")
182
197
 
183
- def writelines(self, lines: Iterable[AnyStr]) -> None:
198
+ def writelines(
199
+ self,
200
+ data: Iterable[Union[bytes, Union[bytearray, memoryview, Sequence[Any], "mmap", "_CData"]]],
201
+ ) -> None:
184
202
  raise NotImplementedError("this stream is not writable")
@@ -4,11 +4,13 @@ import io
4
4
  from typing import (
5
5
  IO,
6
6
  TYPE_CHECKING,
7
- AnyStr,
7
+ Any,
8
8
  Iterable,
9
9
  List,
10
10
  Optional,
11
11
  Sequence,
12
+ TypeVar,
13
+ Union,
12
14
  cast,
13
15
  overload,
14
16
  )
@@ -26,8 +28,12 @@ from aws_lambda_powertools.utilities.streaming.transformations.base import (
26
28
  )
27
29
 
28
30
  if TYPE_CHECKING:
31
+ from mmap import mmap
32
+
29
33
  from mypy_boto3_s3 import Client
30
34
 
35
+ _CData = TypeVar("_CData")
36
+
31
37
 
32
38
  # Maintenance: almost all this logic should be moved to a base class
33
39
  class S3Object(IO[bytes]):
@@ -252,8 +258,11 @@ class S3Object(IO[bytes]):
252
258
  def truncate(self, size: Optional[int] = 0) -> int:
253
259
  raise NotImplementedError("this stream is not writable")
254
260
 
255
- def write(self, data: AnyStr) -> int:
261
+ def write(self, data: Union[bytes, Union[bytearray, memoryview, Sequence[Any], "mmap", "_CData"]]) -> int:
256
262
  raise NotImplementedError("this stream is not writable")
257
263
 
258
- def writelines(self, lines: Iterable[AnyStr]) -> None:
264
+ def writelines(
265
+ self,
266
+ data: Iterable[Union[bytes, Union[bytearray, memoryview, Sequence[Any], "mmap", "_CData"]]],
267
+ ) -> None:
259
268
  raise NotImplementedError("this stream is not writable")
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "aws_lambda_powertools"
3
- version = "2.12.0"
3
+ version = "2.14.0"
4
4
  description = "AWS Lambda Powertools is a developer toolkit to implement Serverless best practices and increase developer velocity."
5
5
  authors = ["Amazon Web Services"]
6
6
  include = ["aws_lambda_powertools/py.typed", "THIRD-PARTY-LICENSES"]
@@ -35,7 +35,7 @@ typing-extensions = "^4.4.0"
35
35
 
36
36
  [tool.poetry.dev-dependencies]
37
37
  coverage = {extras = ["toml"], version = "^7.2"}
38
- pytest = "^7.2.2"
38
+ pytest = "^7.3.1"
39
39
  black = "^23.3"
40
40
  boto3 = "^1.18"
41
41
  flake8 = [
@@ -44,7 +44,7 @@ flake8 = [
44
44
  { version = ">=5", python= ">=3.8"},
45
45
  ]
46
46
  flake8-builtins = "^2.1.0"
47
- flake8-comprehensions = "^3.11.1"
47
+ flake8-comprehensions = "^3.12.0"
48
48
  flake8-debugger = "^4.0.0"
49
49
  flake8-fixme = "^1.1.1"
50
50
  flake8-variables-names = "^0.0.5"
@@ -63,7 +63,7 @@ mkdocs-git-revision-date-plugin = "^0.3.2"
63
63
  mike = "^1.1.2"
64
64
  retry = "^0.9.2"
65
65
  pytest-xdist = "^3.2.1"
66
- aws-cdk-lib = "^2.73.0"
66
+ aws-cdk-lib = "^2.75.0"
67
67
  "aws-cdk.aws-apigatewayv2-alpha" = "^2.38.1-alpha.0"
68
68
  "aws-cdk.aws-apigatewayv2-integrations-alpha" = "^2.38.1-alpha.0"
69
69
  "aws-cdk.aws-apigatewayv2-authorizers-alpha" = "^2.38.1-alpha.0"
@@ -72,8 +72,8 @@ python-snappy = "^0.6.1"
72
72
  mypy-boto3-appconfig = "^1.26.71"
73
73
  mypy-boto3-cloudformation = "^1.26.108"
74
74
  mypy-boto3-cloudwatch = "^1.26.99"
75
- mypy-boto3-dynamodb = "^1.26.97"
76
- mypy-boto3-lambda = "^1.26.80"
75
+ mypy-boto3-dynamodb = "^1.26.115"
76
+ mypy-boto3-lambda = "^1.26.115"
77
77
  mypy-boto3-logs = "^1.26.53"
78
78
  mypy-boto3-secretsmanager = "^1.26.89"
79
79
  mypy-boto3-ssm = "^1.26.97"
@@ -81,11 +81,11 @@ mypy-boto3-s3 = "^1.26.104"
81
81
  mypy-boto3-xray = "^1.26.11"
82
82
  types-requests = "^2.28.11"
83
83
  typing-extensions = "^4.4.0"
84
- mkdocs-material = "^9.1.5"
84
+ mkdocs-material = "^9.1.6"
85
85
  filelock = "^3.11.0"
86
86
  checksumdir = "^1.2.0"
87
87
  mypy-boto3-appconfigdata = "^1.26.70"
88
- importlib-metadata = "^6.0"
88
+ importlib-metadata = "^6.4"
89
89
  ijson = "^3.2.0"
90
90
  typed-ast = { version = "^1.5.4", python = "< 3.8"}
91
91
  hvac = "^1.1.0"
@@ -100,10 +100,10 @@ all = ["pydantic", "aws-xray-sdk", "fastjsonschema"]
100
100
  aws-sdk = ["boto3"]
101
101
 
102
102
  [tool.poetry.group.dev.dependencies]
103
- cfn-lint = "0.76.2"
103
+ cfn-lint = "0.77.1"
104
104
  mypy = "^1.1.1"
105
105
  types-python-dateutil = "^2.8.19.6"
106
- httpx = "^0.23.3"
106
+ httpx = ">=0.23.3,<0.25.0"
107
107
 
108
108
  [tool.coverage.run]
109
109
  source = ["aws_lambda_powertools"]
@@ -44,7 +44,7 @@ extras_require = \
44
44
 
45
45
  setup_kwargs = {
46
46
  'name': 'aws-lambda-powertools',
47
- 'version': '2.12.0',
47
+ 'version': '2.14.0',
48
48
  'description': 'AWS Lambda Powertools is a developer toolkit to implement Serverless best practices and increase developer velocity.',
49
49
  'long_description': '<!-- markdownlint-disable MD013 MD041 MD043 -->\n# AWS Lambda Powertools for Python\n\n[![Build](https://github.com/awslabs/aws-lambda-powertools-python/actions/workflows/python_build.yml/badge.svg)](https://github.com/awslabs/aws-lambda-powertools-python/actions/workflows/python_build.yml)\n[![codecov.io](https://codecov.io/github/awslabs/aws-lambda-powertools-python/branch/develop/graphs/badge.svg)](https://app.codecov.io/gh/awslabs/aws-lambda-powertools-python)\n![PythonSupport](https://img.shields.io/static/v1?label=python&message=%203.7|%203.8|%203.9&color=blue?style=flat-square&logo=python) ![PyPI version](https://badge.fury.io/py/aws-lambda-powertools.svg) ![PyPi monthly downloads](https://img.shields.io/pypi/dm/aws-lambda-powertools) [![Join our Discord](https://dcbadge.vercel.app/api/server/B8zZKbbyET)](https://discord.gg/B8zZKbbyET)\n\nPowertools is a developer toolkit to implement Serverless [best practices and increase developer velocity](https://awslabs.github.io/aws-lambda-powertools-python/latest/#features).\n\n> Also available in [Java](https://github.com/awslabs/aws-lambda-powertools-java), [Typescript](https://github.com/awslabs/aws-lambda-powertools-typescript), and [.NET](https://awslabs.github.io/aws-lambda-powertools-dotnet/).\n\n**[📜Documentation](https://awslabs.github.io/aws-lambda-powertools-python/)** | **[🐍PyPi](https://pypi.org/project/aws-lambda-powertools/)** | **[Roadmap](https://awslabs.github.io/aws-lambda-powertools-python/latest/roadmap/)** | **[Detailed blog post](https://aws.amazon.com/blogs/opensource/simplifying-serverless-best-practices-with-lambda-powertools/)**\n\n> **An AWS Developer Acceleration (DevAx) initiative by Specialist Solution Architects | aws-devax-open-source@amazon.com**\n\n![hero-image](https://user-images.githubusercontent.com/3340292/198254617-d0fdb672-86a6-4988-8a40-adf437135e0a.png)\n\n## Features\n\n* **[Tracing](https://awslabs.github.io/aws-lambda-powertools-python/latest/core/tracer/)** - Decorators and utilities to trace Lambda function handlers, and both synchronous and asynchronous functions\n* **[Logging](https://awslabs.github.io/aws-lambda-powertools-python/latest/core/logger/)** - Structured logging made easier, and decorator to enrich structured logging with key Lambda context details\n* **[Metrics](https://awslabs.github.io/aws-lambda-powertools-python/latest/core/metrics/)** - Custom Metrics created asynchronously via CloudWatch Embedded Metric Format (EMF)\n* **[Event handler: AppSync](https://awslabs.github.io/aws-lambda-powertools-python/latest/core/event_handler/appsync/)** - AWS AppSync event handler for Lambda Direct Resolver and Amplify GraphQL Transformer function\n* **[Event handler: API Gateway and ALB](https://awslabs.github.io/aws-lambda-powertools-python/latest/core/event_handler/api_gateway/)** - Amazon API Gateway REST/HTTP API and ALB event handler for Lambda functions invoked using Proxy integration\n* **[Bring your own middleware](https://awslabs.github.io/aws-lambda-powertools-python/latest/utilities/middleware_factory/)** - Decorator factory to create your own middleware to run logic before, and after each Lambda invocation\n* **[Parameters utility](https://awslabs.github.io/aws-lambda-powertools-python/latest/utilities/parameters/)** - Retrieve and cache parameter values from Parameter Store, Secrets Manager, or DynamoDB\n* **[Batch processing](https://awslabs.github.io/aws-lambda-powertools-python/latest/utilities/batch/)** - Handle partial failures for AWS SQS batch processing\n* **[Typing](https://awslabs.github.io/aws-lambda-powertools-python/latest/utilities/typing/)** - Static typing classes to speedup development in your IDE\n* **[Validation](https://awslabs.github.io/aws-lambda-powertools-python/latest/utilities/validation/)** - JSON Schema validator for inbound events and responses\n* **[Event source data classes](https://awslabs.github.io/aws-lambda-powertools-python/latest/utilities/data_classes/)** - Data classes describing the schema of common Lambda event triggers\n* **[Parser](https://awslabs.github.io/aws-lambda-powertools-python/latest/utilities/parser/)** - Data parsing and deep validation using Pydantic\n* **[Idempotency](https://awslabs.github.io/aws-lambda-powertools-python/latest/utilities/idempotency/)** - Convert your Lambda functions into idempotent operations which are safe to retry\n* **[Feature Flags](https://awslabs.github.io/aws-lambda-powertools-python/latest/utilities/feature_flags/)** - A simple rule engine to evaluate when one or multiple features should be enabled depending on the input\n* **[Streaming](https://awslabs.github.io/aws-lambda-powertools-python/latest/utilities/streaming/)** - Streams datasets larger than the available memory as streaming data.\n\n### Installation\n\nWith [pip](https://pip.pypa.io/en/latest/index.html) installed, run: ``pip install aws-lambda-powertools``\n\n## Tutorial and Examples\n\n* [Tutorial](https://awslabs.github.io/aws-lambda-powertools-python/latest/tutorial)\n* [Serverless Shopping cart](https://github.com/aws-samples/aws-serverless-shopping-cart)\n* [Serverless Airline](https://github.com/aws-samples/aws-serverless-airline-booking)\n* [Serverless E-commerce platform](https://github.com/aws-samples/aws-serverless-ecommerce-platform)\n* [Serverless GraphQL Nanny Booking Api](https://github.com/trey-rosius/babysitter_api)\n\n## Credits\n\n* Structured logging initial implementation from [aws-lambda-logging](https://gitlab.com/hadrien/aws_lambda_logging)\n* Powertools idea [DAZN Powertools](https://github.com/getndazn/dazn-lambda-powertools/)\n\n## Connect\n\n* **AWS Lambda Powertools on Discord**: `#python` - **[Invite link](https://discord.gg/B8zZKbbyET)**\n* **Email**: aws-lambda-powertools-feedback@amazon.com\n\n## Security disclosures\n\nIf you think you’ve found a potential security issue, please do not post it in the Issues. Instead, please follow the instructions [here](https://aws.amazon.com/security/vulnerability-reporting/) or [email AWS security directly](mailto:aws-security@amazon.com).\n\n## License\n\nThis library is licensed under the MIT-0 License. See the LICENSE file.\n',
50
50
  'author': 'Amazon Web Services',