Skip to content

[rejected AI] preserve default=None in map filter (#2165) - #2262

Closed
eminsk wants to merge 1 commit into
pallets:mainfrom
eminsk:fix/map-default-none
Closed

[rejected AI] preserve default=None in map filter (#2165)#2262
eminsk wants to merge 1 commit into
pallets:mainfrom
eminsk:fix/map-default-none

Conversation

@eminsk

@eminsk eminsk commented Sep 4, 2026

Copy link
Copy Markdown

When using map(attribute="...", default=None), make_attrgetter previously checked if default is not None:, treating default=None the same as no default provided. Missing attributes therefore remained Undefined instead of defaulting to None, causing UndefinedError in strict environments (such as Ansible or when using StrictUndefined).

This PR:

  • Uses the missing singleton from jinja2.utils as the default sentinel in make_attrgetter and prepare_map.
  • Ensures explicitly passed default=None evaluates to None.
  • Preserves backward compatibility in groupby (avoiding the PyPy sorting regression in stale PR map and groupby filters accept explicit none as default value #2175).
  • Adds unit test coverage in tests/test_filters.py verifying default=None under standard and StrictUndefined environments.

Fixes #2165 (Supersedes #2175)

When mapping over an attribute with default=None, make_attrgetter previously treated None as no default provided (if default is not None:), causing missing attributes to remain Undefined instead of defaulting to None. This resulted in UndefinedError under strict environments like Ansible.

Use the missing sentinel so explicit default=None is respected.

Fixes #2165
@davidism

davidism commented Sep 4, 2026

Copy link
Copy Markdown
Member

@davidism davidism closed this Sep 4, 2026
@davidism davidism changed the title fix: preserve default=None in map filter (#2165) [rejected AI] preserve default=None in map filter (#2165) Sep 4, 2026
@davidism davidism changed the title preserve default=None in map filter (#2165) [rejected AI] preserve default=None in map filter (#2165) Sep 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[{}] | map(attribute = "foo", default = None) still fails

2 participants