diff --git a/.changes/unreleased/Fixes-20250902-153838.yaml b/.changes/unreleased/Fixes-20250902-153838.yaml new file mode 100644 index 00000000..70d1c2bf --- /dev/null +++ b/.changes/unreleased/Fixes-20250902-153838.yaml @@ -0,0 +1,7 @@ +kind: Fixes +body: Implement support for the second optional argument to dict.pop() in jinja +time: 2025-09-02T15:38:38.362214+02:00 +custom: + author: fornwall + issue: "659" + project: dbt-fusion diff --git a/crates/dbt-jinja/minijinja/src/value/object.rs b/crates/dbt-jinja/minijinja/src/value/object.rs index d89cedeb..895930d6 100644 --- a/crates/dbt-jinja/minijinja/src/value/object.rs +++ b/crates/dbt-jinja/minijinja/src/value/object.rs @@ -1550,16 +1550,17 @@ pub mod mutable_map { fn pop_impl(map: &Arc, args: &[Value]) -> Result { match args { [key] => Ok(map.remove(key).unwrap_or_default()), - _ if args.len() > 1 => Err(Error::new( + [key, default] => Ok(map.remove(key).unwrap_or_else(|| default.clone())), + _ if args.len() > 2 => Err(Error::new( ErrorKind::TooManyArguments, format!( - "remove() takes exactly one argument, but {} were given", + "pop() takes one or two arguments, but {} were given", args.len() ), )), _ => Err(Error::new( ErrorKind::MissingArgument, - "remove() takes exactly one argument, but none were given", + "pop() takes one or two arguments, but none were given", )), } } diff --git a/crates/dbt-jinja/minijinja/tests/inputs/dict.txt b/crates/dbt-jinja/minijinja/tests/inputs/dict.txt index f1089051..af200083 100644 --- a/crates/dbt-jinja/minijinja/tests/inputs/dict.txt +++ b/crates/dbt-jinja/minijinja/tests/inputs/dict.txt @@ -6,4 +6,6 @@ {{ dict(x=1, y=2) }} {{ dict(d, c=3)}} {% for _ in [1] %}{{ dict(loop, extra=2)|dictsort }}{% endfor %} -{{ dict([('a', 1), ('b', 2), ('c', 3)]) }} \ No newline at end of file +{{ dict([('a', 1), ('b', 2), ('c', 3)]) }} +{{ {'a':'b'}.pop('a') }} +{{ {}.pop('a','b') }} \ No newline at end of file diff --git a/crates/dbt-jinja/minijinja/tests/snapshots/test_templates__vm@dict.txt.snap b/crates/dbt-jinja/minijinja/tests/snapshots/test_templates__vm@dict.txt.snap index fd1447c2..40c09460 100644 --- a/crates/dbt-jinja/minijinja/tests/snapshots/test_templates__vm@dict.txt.snap +++ b/crates/dbt-jinja/minijinja/tests/snapshots/test_templates__vm@dict.txt.snap @@ -12,3 +12,5 @@ input_file: fs/sa/crates/dbt-jinja/minijinja/tests/inputs/dict.txt {'a': 1, 'b': 2, 'c': 3} (('depth', 1), ('depth0', 0), ('extra', 2), ('first', true), ('index', 1), ('index0', 0), ('last', true), ('length', 1), ('nextitem', undefined), ('previtem', undefined), ('revindex', 1), ('revindex0', 0)) {'a': 1, 'b': 2, 'c': 3} +b +b