Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: jinxiao/powertools-lambda-python
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: develop
Choose a base ref
...
head repository: aws-powertools/powertools-lambda-python
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: develop
Choose a head ref
Checking mergeability… Don’t worry, you can still create the pull request.
  • 8 commits
  • 76 files changed
  • 4 contributors

Commits on Aug 28, 2026

  1. chore(deps): bump valkey-glide from 2.5.0 to 2.5.1 (aws-powertools#8396)

    Bumps [valkey-glide](https://github.com/valkey-io/valkey-glide) from 2.5.0 to 2.5.1.
    - [Release notes](https://github.com/valkey-io/valkey-glide/releases)
    - [Changelog](https://github.com/valkey-io/valkey-glide/blob/main/CHANGELOG.md)
    - [Commits](valkey-io/valkey-glide@v2.5.0...v2.5.1)
    
    ---
    updated-dependencies:
    - dependency-name: valkey-glide
      dependency-version: 2.5.1
      dependency-type: direct:production
      update-type: version-update:semver-patch
    ...
    
    Signed-off-by: dependabot[bot] <support@github.com>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Co-authored-by: Leandro Damascena <lcdama@amazon.pt>
    dependabot[bot] and leandrodamascena authored Aug 28, 2026
    Configuration menu
    Copy the full SHA
    bb51178 View commit details
    Browse the repository at this point in the history
  2. chore(deps-dev): bump aws-cdk from 2.1135.1 to 2.1136.0 in the aws-cd…

    …k group (aws-powertools#8392)
    
    chore(deps-dev): bump aws-cdk in the aws-cdk group
    
    Bumps the aws-cdk group with 1 update: [aws-cdk](https://github.com/aws/aws-cdk-cli/tree/HEAD/packages/aws-cdk).
    
    
    Updates `aws-cdk` from 2.1135.1 to 2.1136.0
    - [Release notes](https://github.com/aws/aws-cdk-cli/releases)
    - [Commits](https://github.com/aws/aws-cdk-cli/commits/aws-cdk@v2.1136.0/packages/aws-cdk)
    
    ---
    updated-dependencies:
    - dependency-name: aws-cdk
      dependency-version: 2.1136.0
      dependency-type: direct:development
      update-type: version-update:semver-minor
      dependency-group: aws-cdk
    ...
    
    Signed-off-by: dependabot[bot] <support@github.com>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Co-authored-by: Leandro Damascena <lcdama@amazon.pt>
    dependabot[bot] and leandrodamascena authored Aug 28, 2026
    Configuration menu
    Copy the full SHA
    cdab6db View commit details
    Browse the repository at this point in the history
  3. chore(deps): bump the github-actions group across 1 directory with 3 …

    …updates (aws-powertools#8401)
    
    Bumps the github-actions group with 3 updates in the / directory: [github/codeql-action/upload-sarif](https://github.com/github/codeql-action), [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) and [zgosalvez/github-actions-ensure-sha-pinned-actions](https://github.com/zgosalvez/github-actions-ensure-sha-pinned-actions).
    
    
    Updates `github/codeql-action/upload-sarif` from 4.37.6 to 4.37.8
    - [Release notes](https://github.com/github/codeql-action/releases)
    - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
    - [Commits](github/codeql-action@5595cca...db488dd)
    
    Updates `docker/setup-buildx-action` from 4.2.0 to 4.3.0
    - [Release notes](https://github.com/docker/setup-buildx-action/releases)
    - [Commits](docker/setup-buildx-action@bb05f3f...37fe631)
    
    Updates `zgosalvez/github-actions-ensure-sha-pinned-actions` from 5.0.6 to 5.0.7
    - [Release notes](https://github.com/zgosalvez/github-actions-ensure-sha-pinned-actions/releases)
    - [Commits](zgosalvez/github-actions-ensure-sha-pinned-actions@46cfe80...c5fc58b)
    
    ---
    updated-dependencies:
    - dependency-name: github/codeql-action/upload-sarif
      dependency-version: 4.37.8
      dependency-type: direct:production
      update-type: version-update:semver-patch
      dependency-group: github-actions
    - dependency-name: docker/setup-buildx-action
      dependency-version: 4.3.0
      dependency-type: direct:production
      update-type: version-update:semver-minor
      dependency-group: github-actions
    - dependency-name: zgosalvez/github-actions-ensure-sha-pinned-actions
      dependency-version: 5.0.7
      dependency-type: direct:production
      update-type: version-update:semver-patch
      dependency-group: github-actions
    ...
    
    Signed-off-by: dependabot[bot] <support@github.com>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Co-authored-by: Leandro Damascena <lcdama@amazon.pt>
    dependabot[bot] and leandrodamascena authored Aug 28, 2026
    Configuration menu
    Copy the full SHA
    f8867f0 View commit details
    Browse the repository at this point in the history
  4. chore(deps-dev): bump aws-cdk-aws-lambda-python-alpha from 2.259.0a0 …

    …to 2.266.0a0 (aws-powertools#8395)
    
    chore(deps-dev): bump aws-cdk-aws-lambda-python-alpha
    
    Bumps [aws-cdk-aws-lambda-python-alpha](https://github.com/aws/aws-cdk) from 2.259.0a0 to 2.266.0a0.
    - [Release notes](https://github.com/aws/aws-cdk/releases)
    - [Changelog](https://github.com/aws/aws-cdk/blob/main/CHANGELOG.v2.alpha.md)
    - [Commits](https://github.com/aws/aws-cdk/commits)
    
    ---
    updated-dependencies:
    - dependency-name: aws-cdk-aws-lambda-python-alpha
      dependency-version: 2.265.0a0
      dependency-type: direct:development
      update-type: version-update:semver-minor
    ...
    
    Signed-off-by: dependabot[bot] <support@github.com>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Co-authored-by: Leandro Damascena <lcdama@amazon.pt>
    dependabot[bot] and leandrodamascena authored Aug 28, 2026
    Configuration menu
    Copy the full SHA
    937f0fe View commit details
    Browse the repository at this point in the history
  5. chore(deps-dev): bump the dev-dependencies group across 1 directory w…

    …ith 5 updates (aws-powertools#8407)
    
    * chore(deps-dev): bump the dev-dependencies group across 1 directory with 5 updates
    
    Bumps the dev-dependencies group with 5 updates in the / directory:
    
    | Package | From | To |
    | --- | --- | --- |
    | [coverage](https://github.com/coveragepy/coveragepy) | `7.14.3` | `7.15.4` |
    | [pytest-benchmark](https://github.com/ionelmc/pytest-benchmark) | `5.2.3` | `5.3.0` |
    | [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.1` |
    | [ruff](https://github.com/astral-sh/ruff) | `0.15.19` | `0.16.4` |
    | [pytest-socket](https://github.com/miketheman/pytest-socket) | `0.8.0` | `0.8.1` |
    
    
    
    Updates `coverage` from 7.14.3 to 7.15.4
    - [Release notes](https://github.com/coveragepy/coveragepy/releases)
    - [Changelog](https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst)
    - [Commits](coveragepy/coveragepy@7.14.3...7.15.4)
    
    Updates `pytest-benchmark` from 5.2.3 to 5.3.0
    - [Release notes](https://github.com/ionelmc/pytest-benchmark/releases)
    - [Changelog](https://github.com/ionelmc/pytest-benchmark/blob/master/CHANGELOG.rst)
    - [Commits](ionelmc/pytest-benchmark@v5.2.3...v5.3.0)
    
    Updates `mypy` from 2.1.0 to 2.3.1
    - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
    - [Commits](python/mypy@v2.1.0...v2.3.1)
    
    Updates `ruff` from 0.15.19 to 0.16.4
    - [Release notes](https://github.com/astral-sh/ruff/releases)
    - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
    - [Commits](astral-sh/ruff@0.15.19...0.16.4)
    
    Updates `pytest-socket` from 0.8.0 to 0.8.1
    - [Release notes](https://github.com/miketheman/pytest-socket/releases)
    - [Changelog](https://github.com/miketheman/pytest-socket/blob/main/CHANGELOG.md)
    - [Commits](miketheman/pytest-socket@0.8.0...0.8.1)
    
    ---
    updated-dependencies:
    - dependency-name: coverage
      dependency-version: 7.15.4
      dependency-type: direct:development
      update-type: version-update:semver-minor
      dependency-group: dev-dependencies
    - dependency-name: mypy
      dependency-version: 2.3.1
      dependency-type: direct:development
      update-type: version-update:semver-minor
      dependency-group: dev-dependencies
    - dependency-name: pytest-benchmark
      dependency-version: 5.3.0
      dependency-type: direct:development
      update-type: version-update:semver-minor
      dependency-group: dev-dependencies
    - dependency-name: pytest-socket
      dependency-version: 0.8.1
      dependency-type: direct:development
      update-type: version-update:semver-patch
      dependency-group: dev-dependencies
    - dependency-name: ruff
      dependency-version: 0.16.4
      dependency-type: direct:development
      update-type: version-update:semver-minor
      dependency-group: dev-dependencies
    ...
    
    Signed-off-by: dependabot[bot] <support@github.com>
    
    * chore: ignore new Ruff positional argument rule
    
    ---------
    
    Signed-off-by: dependabot[bot] <support@github.com>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Co-authored-by: Leandro <lcdama@amazon.pt>
    dependabot[bot] and leandrodamascena authored Aug 28, 2026
    Configuration menu
    Copy the full SHA
    f704837 View commit details
    Browse the repository at this point in the history
  6. fix(idempotency): is_missing_idempotency_key iterates dict keys inste…

    …ad of values (aws-powertools#8391)
    
    * fix(idempotency): is_missing_idempotency_key iterates dict keys instead of values
    
    is_missing_idempotency_key iterated `data` directly for dict input, which
    walks its keys, not its values. For a dict whose values are all None but
    whose keys are ordinary non-None strings -- exactly what a JMESPath
    multi-select expression like '{user: headers.user_id, order: body.order_id}'
    produces when the referenced event fields are absent -- this returns False
    ("not missing") when it should return True.
    
    With raise_on_no_idempotency_key=True, the safety check that's supposed to
    raise IdempotencyKeyError in this situation silently doesn't fire. With the
    default False, no warning is emitted and the persistence layer hashes the
    all-None dict into a real idempotency key, so unrelated invocations that
    both fail to populate those fields collapse onto the same idempotency key
    and get incorrectly deduplicated against each other.
    
    The existing test only covered a dict of {None: None} (None as the key),
    which happens to still pass under the old key-iterating behavior and so
    never caught this. Iterate data.values() for dict input instead, and add
    a test covering the realistic non-None-keys/all-None-values case.
    
    * test(idempotency): cover missing dictionary keys
    
    ---------
    
    Co-authored-by: Leandro <lcdama@amazon.pt>
    Adityaj0 and leandrodamascena authored Aug 28, 2026
    Configuration menu
    Copy the full SHA
    a8df37d View commit details
    Browse the repository at this point in the history
  7. refactor(typing): use PEP 604 syntax for Optional annotations (UP045) (

    …aws-powertools#8399)
    
    * refactor(typing): use PEP 604 syntax for Optional annotations (UP045)
    
    Convert Optional[X] to X | None across the codebase and remove the
    temporary UP045 ignore from ruff.toml, so the fix and the removal of the
    ignore land together.
    
    283 of the 285 violations were handled by the ruff autofix. The two
    remaining cases in utilities/batch/types.py are runtime assignments
    rather than annotations, so they were converted by hand and verified to
    compare equal to their previous definitions.
    
    Union is left in place, since it belongs to UP007.
    
    * fix(typing): use Any instead of the builtin any in e2e data fetcher annotations
    
    Optional[any] was tolerated because typing never validated its argument, so
    the lowercase any went unnoticed. Once converted to any | None the expression
    is evaluated at import time, and neither module has the future annotations
    import, so importing them raised TypeError.
    
    Also updates the matching docstring line in logs.py.
    
    These modules are never imported by the test suite, since make test runs with
    --ignore tests/e2e, which is why this was not caught locally.
    
    ---------
    
    Co-authored-by: Leandro Damascena <lcdama@amazon.pt>
    manshahH and leandrodamascena authored Aug 28, 2026
    Configuration menu
    Copy the full SHA
    78fdd32 View commit details
    Browse the repository at this point in the history
  8. fix(idempotency): Redis persistence layer reclaims live in-progress r…

    …ecords as orphans, allowing concurrent double-execution (aws-powertools#8387)
    
    * fix(idempotency): Redis persistence layer reclaims live in-progress records as orphans, allowing concurrent double-execution
    
    RedisCachePersistenceLayer._put_in_progress_record() only guarded against a
    competing invocation when the existing record's in_progress_expiry_timestamp
    was set AND still in the future. When that field is None -- which is the
    normal case for idempotent_function, since it never calls
    config.register_lambda_context(), unlike the idempotent() handler decorator --
    the guard was skipped entirely and a genuinely still-running invocation's
    record fell through to the "orphan record" branch, which unconditionally
    overwrites the record with no NX guard. A second concurrent invocation with
    the same idempotency key would then proceed to execute the underlying
    function too, defeating idempotency (e.g. double-charging a customer).
    
    This is exactly what persistence/base.py's own warning at that call site
    flags ("Couldn't determine the remaining time left. Did you call
    register_lambda_context on IdempotencyConfig?") -- it warns, but nothing
    downstream actually failed closed on it.
    
    The DynamoDB persistence layer does not have this gap: its conditional
    expression requires attribute_exists(#in_progress_expiry) before allowing an
    expired-in-progress reclaim, so a missing attribute correctly blocks the
    competing writer instead of granting a reclaim.
    
    Fix: when status is INPROGRESS and in_progress_expiry_timestamp is None,
    treat the record as still in progress (fail closed) instead of falling
    through to the orphan-reclaim path, mirroring the DynamoDB layer's behavior.
    
    * test(idempotency): cover concurrent cache execution
    
    ---------
    
    Co-authored-by: Leandro <lcdama@amazon.pt>
    Adityaj0 and leandrodamascena authored Aug 28, 2026
    Configuration menu
    Copy the full SHA
    a39e101 View commit details
    Browse the repository at this point in the history
Loading