From 79fab489b5b2e060071ea443e9ceae3761d6409b Mon Sep 17 00:00:00 2001 From: Armin Ronacher Date: Wed, 31 Jul 2024 18:00:41 +0200 Subject: [PATCH 1/2] Enable more minijinja-contrib features in the CLI --- minijinja-cli/Cargo.toml | 5 +++-- minijinja-cli/README.md | 1 + minijinja-cli/src/cli.rs | 1 + minijinja-cli/src/main.rs | 9 ++++++--- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/minijinja-cli/Cargo.toml b/minijinja-cli/Cargo.toml index 91389ce9..3e84260d 100644 --- a/minijinja-cli/Cargo.toml +++ b/minijinja-cli/Cargo.toml @@ -12,7 +12,7 @@ readme = "README.md" rust-version = "1.65" [features] -default = ["toml", "yaml", "querystring", "cbor", "datetime", "json5", "repl", "unicode"] +default = ["toml", "yaml", "querystring", "cbor", "datetime", "json5", "repl", "unicode", "contrib"] yaml = ["serde_yml"] querystring = ["serde_qs"] cbor = ["ciborium"] @@ -22,6 +22,7 @@ repl = ["rustyline"] completions = ["clap_complete", "clap_complete_nushell", "clap_complete_fig"] unicode = ["minijinja/unicode"] ini = ["configparser"] +contrib = ["minijinja-contrib"] [dependencies] anyhow = "1.0.74" @@ -42,7 +43,7 @@ minijinja = { version = "=2.1.0", path = "../minijinja", features = [ "unstable_machinery", "custom_syntax", ] } -minijinja-contrib = { version = "=2.1.0", path = "../minijinja-contrib", features = ["pycompat"] } +minijinja-contrib = { version = "=2.1.0", optional = true, path = "../minijinja-contrib", features = ["pycompat", "datetime", "rand"] } rustyline = { version = "12.0.0", optional = true } serde = "1.0.183" serde_json = "1.0.105" diff --git a/minijinja-cli/README.md b/minijinja-cli/README.md index e247a773..81a2e856 100644 --- a/minijinja-cli/README.md +++ b/minijinja-cli/README.md @@ -214,6 +214,7 @@ selected when the defaults are turned off: * `datetime`: enables the date and time filters and `now()` function * `completions`: enables the generation of completions * `unicode`: enables the unicode identifier support +* `contrib`: enables the `minijinja_contrib` based functionality including the `--py-compat` flag Additionally if the `ASSET_OUT_DIR` environment variable is set during compilation manpage (and optionally completions) are generated into that diff --git a/minijinja-cli/src/cli.rs b/minijinja-cli/src/cli.rs index d413db5e..9f560dda 100644 --- a/minijinja-cli/src/cli.rs +++ b/minijinja-cli/src/cli.rs @@ -29,6 +29,7 @@ pub(super) fn make_command() -> Command { arg!(--"no-newline" "Do not output a trailing newline"), arg!(--"trim-blocks" "Enable the trim_blocks flag"), arg!(--"lstrip-blocks" "Enable the lstrip_blocks flag"), + #[cfg(feature = "contrib")] arg!(--"py-compat" "Enables improved Python compatibility. Enabling \ this adds methods such as dict.keys and some others."), arg!(-s --syntax ... "Changes a syntax feature (feature=value) \ diff --git a/minijinja-cli/src/main.rs b/minijinja-cli/src/main.rs index 7ff96973..bba6c706 100644 --- a/minijinja-cli/src/main.rs +++ b/minijinja-cli/src/main.rs @@ -241,9 +241,12 @@ fn create_env( } } - minijinja_contrib::add_to_environment(&mut env); - if matches.get_flag("py-compat") { - env.set_unknown_method_callback(minijinja_contrib::pycompat::unknown_method_callback); + #[cfg(feature = "contrib")] + { + minijinja_contrib::add_to_environment(&mut env); + if matches.get_flag("py-compat") { + env.set_unknown_method_callback(minijinja_contrib::pycompat::unknown_method_callback); + } } if matches.get_flag("env") { From 6f15af2e614678a4b45a6c76e896d8a1aebbe326 Mon Sep 17 00:00:00 2001 From: Armin Ronacher Date: Wed, 31 Jul 2024 18:03:31 +0200 Subject: [PATCH 2/2] Fix incorrect filter registrations --- CHANGELOG.md | 1 + minijinja-cli/Cargo.toml | 2 +- minijinja-contrib/src/lib.rs | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b28261c..0a10603b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ All notable changes to MiniJinja are documented here. `minijinja-contrib`. #547 - Added the ability to use `&T` and `Arc` as parameters to filters and functions if `T` is an `Object`. #548 +- `minijinja-cli` now also enables the datetime, timezone and rand features. #549 ## 2.1.0 diff --git a/minijinja-cli/Cargo.toml b/minijinja-cli/Cargo.toml index 3e84260d..c6e670c2 100644 --- a/minijinja-cli/Cargo.toml +++ b/minijinja-cli/Cargo.toml @@ -43,7 +43,7 @@ minijinja = { version = "=2.1.0", path = "../minijinja", features = [ "unstable_machinery", "custom_syntax", ] } -minijinja-contrib = { version = "=2.1.0", optional = true, path = "../minijinja-contrib", features = ["pycompat", "datetime", "rand"] } +minijinja-contrib = { version = "=2.1.0", optional = true, path = "../minijinja-contrib", features = ["pycompat", "datetime", "timezone", "rand"] } rustyline = { version = "12.0.0", optional = true } serde = "1.0.183" serde_json = "1.0.105" diff --git a/minijinja-contrib/src/lib.rs b/minijinja-contrib/src/lib.rs index 71137e12..694cad46 100644 --- a/minijinja-contrib/src/lib.rs +++ b/minijinja-contrib/src/lib.rs @@ -43,8 +43,8 @@ pub fn add_to_environment(env: &mut Environment) { #[cfg(feature = "rand")] { env.add_filter("random", filters::random); - env.add_filter("randrange", globals::randrange); - env.add_filter("lipsum", globals::lipsum); + env.add_function("lipsum", globals::lipsum); + env.add_function("randrange", globals::randrange); } env.add_function("cycler", globals::cycler); env.add_function("joiner", globals::joiner);