kpfleming / jinjanator

Jinja2 Command-Line Tool, reworked, again
BSD 2-Clause "Simplified" License
74 stars 5 forks source link

Add support for filters (like j2cli) #33

Open ndbroadbent opened 4 months ago

ndbroadbent commented 4 months ago

Hi there, I'm trying to switch to this tool from j2cli so I can run it on Python >= 3.12.3. I just have a few filters that my templates require (for my Home Assistant config):

import re

# value = string, regex = string, replace = string
def regex_replace(value, regex, replace):
    return re.sub(regex, replace, value)

def titleize(value):
    return value.title().\
        replace('1St', '1st').replace('2Nd', '2nd').replace('3Rd', '3rd').\
        replace(' S ', "'s ").\
        replace(' Tv ', " TV ").\
        replace(' And ', ' and ').replace(' Of ', ' of ').\
        replace(' The ', ' the ').replace(' To ', ' to ').\
        replace(' With ', ' with ')

def snakecase(value):
    return re.sub(r'[^a-z0-9]+', '_', value.lower())

I previously called it like this:

j2 --filters "$CURRENT_DIR/ha_compile_jinja_filters.py" -f json "$PREPROCESSED_INPUT_FILE" $JINJA_DATA_ARG >> "${OUTPUT_FILE}" 2> "$ERROR_LOG_FILE"

Is it possible to port this to jinjinator? Thanks a lot for working on this!

ndbroadbent commented 4 months ago

Sorry I found https://github.com/kpfleming/jinjanator-plugins

Is it possible to import a plugin locally instead of releasing it as a public package?

kpfleming commented 4 months ago

Absolutely, all that is required is that you install the plugin package into the same Python environment where you've installed 'jinjanator', and it will be found and available to your templates. There is no need to distribute the plugin package.

There's an example 'minimal' plugin which supports all the various plugin features in https://github.com/kpfleming/jinjanator/tree/main/tests/test_plugin; hopefully you will be able to see how to strip that down to just the 'filter' portion and then put your filter functions into it.