aws-lambda-powertools 3.7.1a7__tar.gz → 3.8.1a0__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.
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/PKG-INFO +1 -1
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/middlewares/openapi_validation.py +2 -3
- aws_lambda_powertools-3.8.1a0/aws_lambda_powertools/logging/buffer/__init__.py +3 -0
- aws_lambda_powertools-3.8.1a0/aws_lambda_powertools/logging/buffer/cache.py +215 -0
- aws_lambda_powertools-3.8.1a0/aws_lambda_powertools/logging/buffer/config.py +78 -0
- aws_lambda_powertools-3.8.1a0/aws_lambda_powertools/logging/buffer/functions.py +127 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/logging/logger.py +343 -26
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/shared/functions.py +5 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/shared/version.py +1 -1
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/pyproject.toml +2 -2
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/setup.py +2 -1
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/LICENSE +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/README.md +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/THIRD-PARTY-LICENSES +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/api_gateway.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/appsync.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/bedrock_agent.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/content_types.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/exceptions.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/graphql_appsync/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/graphql_appsync/_registry.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/graphql_appsync/base.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/graphql_appsync/exceptions.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/graphql_appsync/router.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/lambda_function_url.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/middlewares/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/middlewares/base.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/middlewares/schema_validation.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/openapi/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/openapi/compat.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/openapi/constants.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/openapi/dependant.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/openapi/encoders.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/openapi/exceptions.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/openapi/models.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/openapi/params.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/openapi/pydantic_loader.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/html.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/oauth2.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui-bundle.min.js +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/openapi/swagger_ui/swagger-ui.min.css +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/openapi/types.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/router.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/types.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/util.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/event_handler/vpc_lattice.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/exceptions/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/logging/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/logging/constants.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/logging/correlation_paths.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/logging/exceptions.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/logging/filters.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/logging/formatter.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/logging/formatters/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/logging/formatters/datadog.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/logging/lambda_context.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/logging/types.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/logging/utils.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/metrics/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/metrics/base.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/metrics/exceptions.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/metrics/functions.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/metrics/metric.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/metrics/metrics.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/metrics/provider/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/metrics/provider/base.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/cloudwatch.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/constants.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/exceptions.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/metric_properties.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/metrics/provider/cloudwatch_emf/types.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/metrics/provider/cold_start.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/metrics/provider/datadog/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/metrics/provider/datadog/datadog.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/metrics/provider/datadog/metrics.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/metrics/provider/datadog/warnings.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/metrics/types.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/middleware_factory/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/middleware_factory/exceptions.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/middleware_factory/factory.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/package_logger.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/py.typed +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/shared/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/shared/cache_dict.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/shared/constants.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/shared/cookies.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/shared/dynamodb_deserializer.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/shared/headers_serializer.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/shared/json_encoder.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/shared/lazy_import.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/shared/types.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/shared/user_agent.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/tracing/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/tracing/base.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/tracing/extensions.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/tracing/tracer.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/batch/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/batch/base.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/batch/decorators.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/batch/exceptions.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/batch/sqs_fifo_partial_processor.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/batch/types.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/active_mq_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/alb_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/api_gateway_authorizer_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/appsync/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/appsync/scalar_types_utils.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/appsync_authorizer_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/appsync_resolver_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/aws_config_rule_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/bedrock_agent_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_alarm_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_custom_widget_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/cloud_watch_logs_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/cloudformation_custom_resource_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/code_deploy_lifecycle_hook_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/code_pipeline_job_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/cognito_user_pool_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/common.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/connect_contact_flow_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/dynamo_db_stream_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/event_bridge_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/event_source.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/iot_registry_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/kafka_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/kinesis_firehose_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/kinesis_stream_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/lambda_function_url_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/rabbit_mq_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/s3_batch_operation_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/s3_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/s3_object_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/secrets_manager_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/ses_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/shared_functions.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/sns_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/sqs_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/transfer_family_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_classes/vpc_lattice.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_masking/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_masking/base.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_masking/constants.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_masking/exceptions.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_masking/provider/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_masking/provider/base.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_masking/provider/kms/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/data_masking/provider/kms/aws_encryption_sdk.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/feature_flags/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/feature_flags/appconfig.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/feature_flags/base.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/feature_flags/comparators.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/feature_flags/constants.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/feature_flags/exceptions.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/feature_flags/feature_flags.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/feature_flags/schema.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/feature_flags/types.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/idempotency/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/idempotency/base.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/idempotency/config.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/idempotency/exceptions.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/idempotency/hook.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/idempotency/idempotency.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/idempotency/persistence/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/idempotency/persistence/base.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/idempotency/persistence/datarecord.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/idempotency/persistence/dynamodb.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/idempotency/persistence/redis.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/idempotency/serialization/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/idempotency/serialization/base.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/idempotency/serialization/custom_dict.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/idempotency/serialization/dataclass.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/idempotency/serialization/functions.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/idempotency/serialization/no_op.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/idempotency/serialization/pydantic.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/jmespath_utils/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/jmespath_utils/envelopes.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parameters/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parameters/appconfig.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parameters/base.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parameters/constants.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parameters/dynamodb.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parameters/exceptions.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parameters/secrets.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parameters/ssm.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parameters/types.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/envelopes/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/envelopes/apigw.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/envelopes/apigw_websocket.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/envelopes/apigwv2.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/envelopes/base.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/envelopes/bedrock_agent.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/envelopes/cloudwatch.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/envelopes/dynamodb.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/envelopes/event_bridge.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/envelopes/kafka.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/envelopes/kinesis.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/envelopes/kinesis_firehose.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/envelopes/lambda_function_url.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/envelopes/sns.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/envelopes/sqs.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/envelopes/vpc_lattice.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/envelopes/vpc_latticev2.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/exceptions.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/functions.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/alb.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/apigw.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/apigw_websocket.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/apigwv2.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/bedrock_agent.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/cloudformation_custom_resource.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/cloudwatch.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/dynamodb.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/event_bridge.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/iot_registry_events.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/kafka.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/kinesis.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/kinesis_firehose_sqs.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/lambda_function_url.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/s3.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/s3_batch_operation.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/s3_event_notification.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/s3_object_event.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/ses.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/sns.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/sqs.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/transfer_family.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/vpc_lattice.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/models/vpc_latticev2.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/parser.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/parser/types.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/serialization.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/streaming/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/streaming/_s3_seekable_io.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/streaming/compat.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/streaming/constants.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/streaming/s3_object.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/streaming/transformations/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/streaming/transformations/base.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/streaming/transformations/csv.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/streaming/transformations/gzip.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/streaming/transformations/zip.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/streaming/types.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/typing/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/typing/lambda_client_context.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/typing/lambda_client_context_mobile_client.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/typing/lambda_cognito_identity.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/typing/lambda_context.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/validation/__init__.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/validation/base.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/validation/envelopes.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/validation/exceptions.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/aws_lambda_powertools/utilities/validation/validator.py +0 -0
- {aws_lambda_powertools-3.7.1a7 → aws_lambda_powertools-3.8.1a0}/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.
|
3
|
+
Version: 3.8.1a0
|
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
|
@@ -136,9 +136,8 @@ class OpenAPIValidationMiddleware(BaseMiddlewareHandler):
|
|
136
136
|
return self._handle_response(route=route, response=response)
|
137
137
|
|
138
138
|
def _handle_response(self, *, route: Route, response: Response):
|
139
|
-
#
|
140
|
-
if
|
141
|
-
# Validate and serialize the response, including None
|
139
|
+
# Process the response body if it exists
|
140
|
+
if response.body and response.is_json():
|
142
141
|
response.body = self._serialize_response(
|
143
142
|
field=route.dependant.return_param,
|
144
143
|
response_content=response.body,
|
@@ -0,0 +1,215 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from collections import deque
|
4
|
+
from typing import Any
|
5
|
+
|
6
|
+
|
7
|
+
class KeyBufferCache:
|
8
|
+
"""
|
9
|
+
A cache implementation for a single key with size tracking and eviction support.
|
10
|
+
|
11
|
+
This class manages a buffer for a specific key, keeping track of the current size
|
12
|
+
and providing methods to add, remove, and manage cached items. It supports automatic
|
13
|
+
eviction tracking and size management.
|
14
|
+
|
15
|
+
Attributes
|
16
|
+
----------
|
17
|
+
cache : deque
|
18
|
+
A double-ended queue storing the cached items.
|
19
|
+
current_size : int
|
20
|
+
The total size of all items currently in the cache.
|
21
|
+
has_evicted : bool
|
22
|
+
A flag indicating whether any items have been evicted from the cache.
|
23
|
+
"""
|
24
|
+
|
25
|
+
def __init__(self):
|
26
|
+
"""
|
27
|
+
Initialize a buffer cache for a specific key.
|
28
|
+
"""
|
29
|
+
self.cache: deque = deque()
|
30
|
+
self.current_size: int = 0
|
31
|
+
self.has_evicted: bool = False
|
32
|
+
|
33
|
+
def add(self, item: Any) -> None:
|
34
|
+
"""
|
35
|
+
Add an item to the cache.
|
36
|
+
|
37
|
+
Parameters
|
38
|
+
----------
|
39
|
+
item : Any
|
40
|
+
The item to be stored in the cache.
|
41
|
+
"""
|
42
|
+
item_size = len(str(item))
|
43
|
+
self.cache.append(item)
|
44
|
+
self.current_size += item_size
|
45
|
+
|
46
|
+
def remove_oldest(self) -> Any:
|
47
|
+
"""
|
48
|
+
Remove and return the oldest item from the cache.
|
49
|
+
|
50
|
+
Returns
|
51
|
+
-------
|
52
|
+
Any
|
53
|
+
The removed item.
|
54
|
+
"""
|
55
|
+
removed_item = self.cache.popleft()
|
56
|
+
self.current_size -= len(str(removed_item))
|
57
|
+
self.has_evicted = True
|
58
|
+
return removed_item
|
59
|
+
|
60
|
+
def get(self) -> list:
|
61
|
+
"""
|
62
|
+
Retrieve items for this key.
|
63
|
+
|
64
|
+
Returns
|
65
|
+
-------
|
66
|
+
list
|
67
|
+
List of items in the cache.
|
68
|
+
"""
|
69
|
+
return list(self.cache)
|
70
|
+
|
71
|
+
def clear(self) -> None:
|
72
|
+
"""
|
73
|
+
Clear the cache for this key.
|
74
|
+
"""
|
75
|
+
self.cache.clear()
|
76
|
+
self.current_size = 0
|
77
|
+
self.has_evicted = False
|
78
|
+
|
79
|
+
|
80
|
+
class LoggerBufferCache:
|
81
|
+
"""
|
82
|
+
A multi-key buffer cache with size-based eviction and management.
|
83
|
+
|
84
|
+
This class provides a flexible caching mechanism that manages multiple keys,
|
85
|
+
with each key having its own buffer cache. The total size of each key's cache
|
86
|
+
is limited, and older items are automatically evicted when the size limit is reached.
|
87
|
+
|
88
|
+
Key Features:
|
89
|
+
- Multiple key support
|
90
|
+
- Size-based eviction
|
91
|
+
- Tracking of evicted items
|
92
|
+
- Configurable maximum buffer size
|
93
|
+
|
94
|
+
Example
|
95
|
+
--------
|
96
|
+
>>> buffer_cache = LoggerBufferCache(max_size_bytes=1000)
|
97
|
+
>>> buffer_cache.add("logs", "First log message")
|
98
|
+
>>> buffer_cache.add("debug", "Debug information")
|
99
|
+
>>> buffer_cache.get("logs")
|
100
|
+
['First log message']
|
101
|
+
>>> buffer_cache.get_current_size("logs")
|
102
|
+
16
|
103
|
+
"""
|
104
|
+
|
105
|
+
def __init__(self, max_size_bytes: int):
|
106
|
+
"""
|
107
|
+
Initialize the LoggerBufferCache.
|
108
|
+
|
109
|
+
Parameters
|
110
|
+
----------
|
111
|
+
max_size_bytes : int
|
112
|
+
Maximum size of the cache in bytes for each key.
|
113
|
+
"""
|
114
|
+
self.max_size_bytes: int = max_size_bytes
|
115
|
+
self.cache: dict[str, KeyBufferCache] = {}
|
116
|
+
|
117
|
+
def add(self, key: str, item: Any) -> None:
|
118
|
+
"""
|
119
|
+
Add an item to the cache for a specific key.
|
120
|
+
|
121
|
+
Parameters
|
122
|
+
----------
|
123
|
+
key : str
|
124
|
+
The key to store the item under.
|
125
|
+
item : Any
|
126
|
+
The item to be stored in the cache.
|
127
|
+
|
128
|
+
Returns
|
129
|
+
-------
|
130
|
+
bool
|
131
|
+
True if item was added, False otherwise.
|
132
|
+
"""
|
133
|
+
# Check if item is larger than entire buffer
|
134
|
+
item_size = len(str(item))
|
135
|
+
if item_size > self.max_size_bytes:
|
136
|
+
raise BufferError("Cannot add item to the buffer")
|
137
|
+
|
138
|
+
# Create the key's cache if it doesn't exist
|
139
|
+
if key not in self.cache:
|
140
|
+
self.cache[key] = KeyBufferCache()
|
141
|
+
|
142
|
+
# Calculate the size after adding the new item
|
143
|
+
new_total_size = self.cache[key].current_size + item_size
|
144
|
+
|
145
|
+
# If adding the item would exceed max size, remove oldest items
|
146
|
+
while new_total_size > self.max_size_bytes and self.cache[key].cache:
|
147
|
+
self.cache[key].remove_oldest()
|
148
|
+
new_total_size = self.cache[key].current_size + item_size
|
149
|
+
|
150
|
+
self.cache[key].add(item)
|
151
|
+
|
152
|
+
def get(self, key: str) -> list:
|
153
|
+
"""
|
154
|
+
Retrieve items for a specific key.
|
155
|
+
|
156
|
+
Parameters
|
157
|
+
----------
|
158
|
+
key : str
|
159
|
+
The key to retrieve items for.
|
160
|
+
|
161
|
+
Returns
|
162
|
+
-------
|
163
|
+
list
|
164
|
+
List of items for the given key, or an empty list if the key doesn't exist.
|
165
|
+
"""
|
166
|
+
return [] if key not in self.cache else self.cache[key].get()
|
167
|
+
|
168
|
+
def clear(self, key: str | None = None) -> None:
|
169
|
+
"""
|
170
|
+
Clear the cache, either for a specific key or entirely.
|
171
|
+
|
172
|
+
Parameters
|
173
|
+
----------
|
174
|
+
key : Optional[str], optional
|
175
|
+
The key to clear. If None, clears the entire cache.
|
176
|
+
"""
|
177
|
+
if key:
|
178
|
+
if key in self.cache:
|
179
|
+
self.cache[key].clear()
|
180
|
+
del self.cache[key]
|
181
|
+
else:
|
182
|
+
self.cache.clear()
|
183
|
+
|
184
|
+
def has_items_evicted(self, key: str) -> bool:
|
185
|
+
"""
|
186
|
+
Check if a specific key's cache has evicted items.
|
187
|
+
|
188
|
+
Parameters
|
189
|
+
----------
|
190
|
+
key : str
|
191
|
+
The key to check for evicted items.
|
192
|
+
|
193
|
+
Returns
|
194
|
+
-------
|
195
|
+
bool
|
196
|
+
True if items have been evicted, False otherwise.
|
197
|
+
"""
|
198
|
+
return False if key not in self.cache else self.cache[key].has_evicted
|
199
|
+
|
200
|
+
def get_current_size(self, key: str) -> int | None:
|
201
|
+
"""
|
202
|
+
Get the current size of the buffer for a specific key.
|
203
|
+
|
204
|
+
Parameters
|
205
|
+
----------
|
206
|
+
key : str
|
207
|
+
The key to get the current size for.
|
208
|
+
|
209
|
+
Returns
|
210
|
+
-------
|
211
|
+
int
|
212
|
+
The current size of the buffer for the key.
|
213
|
+
Returns 0 if the key does not exist.
|
214
|
+
"""
|
215
|
+
return None if key not in self.cache else self.cache[key].current_size
|
@@ -0,0 +1,78 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from typing import Literal
|
4
|
+
|
5
|
+
|
6
|
+
class LoggerBufferConfig:
|
7
|
+
"""
|
8
|
+
Configuration for log buffering behavior.
|
9
|
+
"""
|
10
|
+
|
11
|
+
# Define class-level constant for valid log levels
|
12
|
+
VALID_LOG_LEVELS: list[str] = ["DEBUG", "INFO", "WARNING"]
|
13
|
+
LOG_LEVEL_BUFFER_VALUES = Literal["DEBUG", "INFO", "WARNING"]
|
14
|
+
|
15
|
+
def __init__(
|
16
|
+
self,
|
17
|
+
max_bytes: int = 20480,
|
18
|
+
buffer_at_verbosity: LOG_LEVEL_BUFFER_VALUES = "DEBUG",
|
19
|
+
flush_on_error_log: bool = True,
|
20
|
+
):
|
21
|
+
"""
|
22
|
+
Initialize logger buffer configuration.
|
23
|
+
|
24
|
+
Parameters
|
25
|
+
----------
|
26
|
+
max_bytes : int, optional
|
27
|
+
Maximum size of the buffer in bytes
|
28
|
+
buffer_at_verbosity : str, optional
|
29
|
+
Minimum log level to buffer
|
30
|
+
flush_on_error_log : bool, optional
|
31
|
+
Whether to flush the buffer when an error occurs
|
32
|
+
"""
|
33
|
+
self._validate_inputs(max_bytes, buffer_at_verbosity, flush_on_error_log)
|
34
|
+
|
35
|
+
self._max_bytes = max_bytes
|
36
|
+
self._buffer_at_verbosity = buffer_at_verbosity.upper()
|
37
|
+
self._flush_on_error_log = flush_on_error_log
|
38
|
+
|
39
|
+
def _validate_inputs(
|
40
|
+
self,
|
41
|
+
max_bytes: int,
|
42
|
+
buffer_at_verbosity: str,
|
43
|
+
flush_on_error_log: bool,
|
44
|
+
) -> None:
|
45
|
+
"""
|
46
|
+
Validate configuration inputs.
|
47
|
+
|
48
|
+
Parameters
|
49
|
+
----------
|
50
|
+
Same as __init__ method parameters
|
51
|
+
"""
|
52
|
+
if not isinstance(max_bytes, int) or max_bytes <= 0:
|
53
|
+
raise ValueError("Max size must be a positive integer")
|
54
|
+
|
55
|
+
if not isinstance(buffer_at_verbosity, str):
|
56
|
+
raise ValueError("Log level must be a string")
|
57
|
+
|
58
|
+
# Validate log level
|
59
|
+
if buffer_at_verbosity.upper() not in self.VALID_LOG_LEVELS:
|
60
|
+
raise ValueError(f"Invalid log level. Must be one of {self.VALID_LOG_LEVELS}")
|
61
|
+
|
62
|
+
if not isinstance(flush_on_error_log, bool):
|
63
|
+
raise ValueError("flush_on_error must be a boolean")
|
64
|
+
|
65
|
+
@property
|
66
|
+
def max_bytes(self) -> int:
|
67
|
+
"""Maximum buffer size in bytes."""
|
68
|
+
return self._max_bytes
|
69
|
+
|
70
|
+
@property
|
71
|
+
def buffer_at_verbosity(self) -> str:
|
72
|
+
"""Minimum log level to buffer."""
|
73
|
+
return self._buffer_at_verbosity
|
74
|
+
|
75
|
+
@property
|
76
|
+
def flush_on_error_log(self) -> bool:
|
77
|
+
"""Flag to flush buffer on error."""
|
78
|
+
return self._flush_on_error_log
|
@@ -0,0 +1,127 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
import sys
|
4
|
+
import time
|
5
|
+
from typing import TYPE_CHECKING, Any, Mapping
|
6
|
+
|
7
|
+
if TYPE_CHECKING:
|
8
|
+
import logging
|
9
|
+
|
10
|
+
|
11
|
+
def _create_buffer_record(
|
12
|
+
level: int,
|
13
|
+
msg: object,
|
14
|
+
args: object,
|
15
|
+
exc_info: logging._ExcInfoType = None,
|
16
|
+
stack_info: bool = False,
|
17
|
+
extra: Mapping[str, object] | None = None,
|
18
|
+
) -> dict[str, Any]:
|
19
|
+
"""
|
20
|
+
Create a structured log record for buffering to save in buffer.
|
21
|
+
|
22
|
+
Parameters
|
23
|
+
----------
|
24
|
+
level : int
|
25
|
+
Logging level (e.g., logging.DEBUG, logging.INFO) indicating log severity.
|
26
|
+
msg : object
|
27
|
+
The log message to be recorded.
|
28
|
+
args : object
|
29
|
+
Additional arguments associated with the log message.
|
30
|
+
exc_info : logging._ExcInfoType, optional
|
31
|
+
Exception information to be included in the log record.
|
32
|
+
If None, no exception details will be captured.
|
33
|
+
stack_info : bool, default False
|
34
|
+
Flag to include stack trace information in the log record.
|
35
|
+
extra : Mapping[str, object], optional
|
36
|
+
Additional context or metadata to be attached to the log record.
|
37
|
+
|
38
|
+
Returns
|
39
|
+
-------
|
40
|
+
dict[str, Any]
|
41
|
+
|
42
|
+
Notes
|
43
|
+
-----
|
44
|
+
- Captures caller frame information for precise log source tracking
|
45
|
+
- Automatically handles exception context
|
46
|
+
"""
|
47
|
+
# Retrieve the caller's frame information to capture precise log context
|
48
|
+
# Uses inspect.stack() with index 3 to get the original caller's details
|
49
|
+
caller_frame = sys._getframe(3)
|
50
|
+
|
51
|
+
# Get the current timestamp
|
52
|
+
timestamp = time.time()
|
53
|
+
|
54
|
+
# Dynamically replace exc_info with current system exception information
|
55
|
+
# This ensures the most recent exception is captured if available
|
56
|
+
if exc_info:
|
57
|
+
exc_info = sys.exc_info()
|
58
|
+
|
59
|
+
# Construct and return the og record dictionary
|
60
|
+
return {
|
61
|
+
"level": level,
|
62
|
+
"msg": msg,
|
63
|
+
"args": args,
|
64
|
+
"filename": caller_frame.f_code.co_filename,
|
65
|
+
"line": caller_frame.f_lineno,
|
66
|
+
"function": caller_frame.f_code.co_name,
|
67
|
+
"extra": extra,
|
68
|
+
"timestamp": timestamp,
|
69
|
+
"exc_info": exc_info,
|
70
|
+
"stack_info": stack_info,
|
71
|
+
}
|
72
|
+
|
73
|
+
|
74
|
+
def _check_minimum_buffer_log_level(buffer_log_level, current_log_level):
|
75
|
+
"""
|
76
|
+
Determine if the current log level meets or exceeds the buffer's minimum log level.
|
77
|
+
|
78
|
+
Compares log levels to decide whether a log message should be included in the buffer.
|
79
|
+
|
80
|
+
Parameters
|
81
|
+
----------
|
82
|
+
buffer_log_level : str
|
83
|
+
Minimum log level configured for the buffer.
|
84
|
+
Must be one of: 'DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'.
|
85
|
+
current_log_level : str
|
86
|
+
Log level of the current log message.
|
87
|
+
Must be one of: 'DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'.
|
88
|
+
|
89
|
+
Returns
|
90
|
+
-------
|
91
|
+
bool
|
92
|
+
True if the current log level is lower (more verbose) than the buffer's
|
93
|
+
minimum log level, indicating the message should be buffered.
|
94
|
+
False if the current log level is higher (less verbose) and should not be buffered.
|
95
|
+
|
96
|
+
Notes
|
97
|
+
-----
|
98
|
+
- Log levels are compared based on their numeric severity
|
99
|
+
- Conversion to uppercase ensures case-insensitive comparisons
|
100
|
+
|
101
|
+
Examples
|
102
|
+
--------
|
103
|
+
>>> _check_minimum_buffer_log_level('INFO', 'DEBUG')
|
104
|
+
True
|
105
|
+
>>> _check_minimum_buffer_log_level('ERROR', 'WARNING')
|
106
|
+
False
|
107
|
+
"""
|
108
|
+
# Predefined log level mapping with numeric severity values
|
109
|
+
# Lower values indicate more verbose logging levels
|
110
|
+
log_levels = {
|
111
|
+
"DEBUG": 10,
|
112
|
+
"INFO": 20,
|
113
|
+
"WARNING": 30,
|
114
|
+
"ERROR": 40,
|
115
|
+
"CRITICAL": 50,
|
116
|
+
}
|
117
|
+
|
118
|
+
# Normalize input log levels to uppercase for consistent comparison
|
119
|
+
# Retrieve corresponding numeric log level values
|
120
|
+
buffer_level_num = log_levels.get(buffer_log_level.upper())
|
121
|
+
current_level_num = log_levels.get(current_log_level.upper())
|
122
|
+
|
123
|
+
# Compare numeric levels
|
124
|
+
if buffer_level_num < current_level_num:
|
125
|
+
return True
|
126
|
+
|
127
|
+
return False
|