[tool.poetry] name = "aws_lambda_powertools" version = "3.29.0" description = "Powertools for AWS Lambda (Python) is a developer toolkit to implement Serverless best practices and increase developer velocity." authors = ["Amazon Web Services"] include = ["aws_lambda_powertools/py.typed", "THIRD-PARTY-LICENSES"] classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT No Attribution License (MIT-0)", "Natural Language :: English", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", ] repository = "https://github.com/aws-powertools/powertools-lambda-python" documentation = "https://docs.powertools.aws.dev/lambda/python/" readme = "README.md" keywords = [ "aws_lambda_powertools", "aws", "tracing", "logging", "lambda", "powertools", "feature_flags", "idempotency", "middleware", ] # MIT-0 is not recognized as an existing license from poetry. # By using `MIT` as a license value, a `License :: OSI Approved :: MIT License` classifier is added to the classifiers list. license = "MIT" [tool.poetry.urls] "Issue tracker" = "https://github.com/aws-powertools/powertools-lambda-python/issues" "Releases" = "https://github.com/aws-powertools/powertools-lambda-python/releases" [tool.poetry.dependencies] python = ">=3.10,<4.0.0" # Required libraries installed by default jmespath = "^1.0.1" typing-extensions = "^4.11.0" # Optional libraries installed with extras aws-xray-sdk = { version = "^2.8.0", optional = true } fastjsonschema = { version = "^2.14.5", optional = true } pydantic = { version = "^2.4.0", optional = true } pydantic-settings = {version = "^2.6.1", optional = true} boto3 = { version = "^1.34.32", optional = true } redis = { version = ">=4.4,<8.0", optional = true } valkey-glide = { version = ">=1.3.5,<3.0", optional = true } aws-encryption-sdk = { version = ">=3.3.1,!=4.0.0,!=4.0.1,!=4.0.2,!=4.0.3,!=4.0.4,<5.0.0", optional = true } jsonpath-ng = { version = "^1.6.0", optional = true } datadog-lambda = { version = ">=8.114.0,<9.0.0", optional = true } avro = { version = "^1.12.0", optional = true } protobuf = {version = ">=6.30.2,<8.0.0", optional = true } [tool.poetry.extras] parser = ["pydantic"] validation = ["fastjsonschema"] tracer = ["aws-xray-sdk"] redis = ["redis"] valkey = ["valkey-glide"] all = [ "pydantic", "pydantic-settings", "aws-xray-sdk", "fastjsonschema", "aws-encryption-sdk", "jsonpath-ng" ] # allow customers to run code locally without emulators (SAM CLI, etc.) aws-sdk = ["boto3"] datadog = ["datadog-lambda"] datamasking = ["aws-encryption-sdk", "jsonpath-ng"] kafka-consumer-avro = ["avro"] kafka-consumer-protobuf = ["protobuf"] [tool.poetry.group.dev.dependencies] coverage = { extras = ["toml"], version = "^7.6" } pytest = ">=8.3.4,<10.0.0" boto3 = "^1.26.164" isort = ">=5.13.2,<9.0.0" pytest-cov = ">=5,<8" pytest-mock = "^3.14.0" pytest-asyncio = ">=0.24,<1.4" bandit = "^1.7.10" radon = "^6.0.1" xenon = "^0.9.3" mkdocs-git-revision-date-plugin = "^0.3.2" pytest-xdist = "^3.6.1" aws-cdk-lib = "^2.176.0" "aws-cdk.aws-apigatewayv2-alpha" = "^2.38.1-alpha.0" "aws-cdk.aws-apigatewayv2-integrations-alpha" = "^2.38.1-alpha.0" "aws-cdk.aws-apigatewayv2-authorizers-alpha" = "^2.38.1-alpha.0" "aws-cdk.aws-lambda-python-alpha" = "^2.176.0a0" "cdklabs.generative-ai-cdk-constructs" = "^0.1.289" pytest-benchmark = ">=4,<6" types-requests = "^2.31.0" typing-extensions = "^4.12.2" mkdocs-material = "^9.5.50" filelock = "^3.16.0" dirhash = "^0.5.0" mypy-boto3-appconfigdata = "^1.36.0" ijson = "^3.3.0" hvac = "^2.3.0" aws-requests-auth = "^0.4.3" urllib3 = ">=1.25.4,!=2.2.0,<3" requests = ">=2.32.0" cfn-lint = "1.48.1" mypy = ">=1.1.1,<3.0.0" types-python-dateutil = "^2.8.19.6" aws-cdk-aws-appsync-alpha = "^2.59.0a0" httpx = ">=0.23.3,<0.29.0" sentry-sdk = ">=1.22.2,<3.0.0" ruff = ">=0.5.1,<0.15.15" retry2 = "^0.9.5" pytest-socket = ">=0.6,<0.9" types-redis = "^4.6.0.7" testcontainers = { extras = ["redis"], version = ">=3.7.1,<5.0.0" } multiprocess = "^0.70.16" boto3-stubs = {extras = ["appconfig", "appconfigdata", "cloudformation", "cloudwatch", "dynamodb", "lambda", "logs", "s3", "secretsmanager", "ssm", "xray"], version = "^1.34.139"} nox = ">=2024.4.15,<2027.0.0" mkdocstrings-python = "^1.13.0" mkdocs-llmstxt = ">=0.2,<0.5" avro = "^1.12.0" protobuf = ">=6.30.2,<8.0.0" types-protobuf = ">=6.30.2.20250516,<8.0.0.0" ty = ">=0.0.23,<0.0.36" [tool.coverage.run] source = ["aws_lambda_powertools"] omit = [ "tests/*", "aws_lambda_powertools/exceptions/*", "aws_lambda_powertools/utilities/parser/types.py", "aws_lambda_powertools/utilities/jmespath_utils/envelopes.py", "aws_lambda_powertools/metrics/metric.py" # barrel import (export-only) ] branch = true [tool.coverage.html] directory = "test_report" title = "Powertools for AWS Lambda (Python) Test Coverage" [tool.coverage.report] fail_under = 90 exclude_lines = [ # Have to re-enable the standard pragma "pragma: no cover", # Don't complain about missing debug-only code: "def __repr__", "if self.debug", # Don't complain if tests don't hit defensive assertion code: "raise AssertionError", "raise NotImplementedError", # Don't complain if non-runnable code isn't run: "if 0:", "if __name__ == .__main__.:", # Ignore runtime type checking "if TYPE_CHECKING:", # Ignore type function overload "@overload", ] [tool.isort] profile = "black" # resolves conflict with black skip = "example" [tool.black] line-length = 120 exclude = ''' ( /( \.eggs # exclude a few common directories in the | \.git # root of the project | \.hg | \.mypy_cache | \.tox | \.venv | _build | buck-out | build | dist | aws_lambda_powertools/event_handler/openapi/compat.py )/ | example ) ''' [tool.pytest.ini_options] minversion = "6.0" addopts = "-ra -vv" testpaths = "./tests" markers = [ "perf: marks perf tests to be deselected (deselect with '-m \"not perf\"')", ] [build-system] requires = ["poetry-core>=1.3.2"] build-backend = "poetry.core.masonry.api" # poetry-core (PR #318) stopped generating setup.py by default, this enables it again. [tool.poetry.build] generate-setup-file = true [tool.poetry_bumpversion.file."aws_lambda_powertools/shared/version.py"] search = 'VERSION = "{current_version}"' replace = 'VERSION = "{new_version}"' [tool.ty] # ty type checker configuration # Ignore unused type: ignore comments since we also run mypy which may need them [tool.ty.rules] unused-type-ignore-comment = "ignore" [tool.ty.src] include = ["aws_lambda_powertools/**"] exclude = [ "tests/**", "examples/**", "docs/**", # Baseline exclusions - modules with existing diagnostics (issue #7927) # These will be addressed incrementally in follow-up PRs "aws_lambda_powertools/logging/**", "aws_lambda_powertools/utilities/validation/**", "aws_lambda_powertools/shared/**", "aws_lambda_powertools/metrics/**", "aws_lambda_powertools/middleware_factory/**", "aws_lambda_powertools/utilities/streaming/**", "aws_lambda_powertools/utilities/data_masking/**", "aws_lambda_powertools/tracing/**", "aws_lambda_powertools/utilities/batch/**", "aws_lambda_powertools/utilities/idempotency/**", "aws_lambda_powertools/utilities/parameters/**", "aws_lambda_powertools/event_handler/**", ]