You seem to have stepped on the same landmine that Ansible did, by defaulting to the jinja2 [aka text/template silliness in golang] of using double mustaches in YAML. I hope you enjoy quoting things because you're going to be quoting everything for all time because "{" is a meaningful character in YAML. Contrast parameters:
status: "{{ var('order_status') }}"
with parameters:
# made famous by GitHub Actions
status: ${{ var('order_status') }}
# or the ASP.Net flavor:
status2: <%= var('order_status2') %>
# or the PHP flavor:
status3: <?= var('order_status3') ?>
and, just like Ansible, it's going to get insaneo when your inner expression has a quote character, too, since you'll need to escape it from the YAML parser leading to leaning toothpick syndrome e.g. parameters:
status: "{{ eval('echo \"hello\"') }}"
---If you find my "but what about the DX?" compelling, also gravely consider why in the world `data_expression:` seems to get a pass, in that it is implicitly wrapped in the mustaches --- edit: ah, that's why https://github.com/paloaltodatabases/sequor/blob/v1.2.0/src/... but https://github.com/paloaltodatabases/sequor/blob/v1.2.0/src/... is what I would suggest changing before you get a bunch of tech debt and have to introduce a breaking change. From str_rendered = Template(template_str, undefined=StrictUndefined).render(jinja_context)
to str_rendered = Template(template_str, undefined=StrictUndefined,
variable_start_string="${{",
variable_end_string="}}"
).render(jinja_context)
# et al, if you want to fix the {# and {%, too
per https://jinja.palletsprojects.com/en/stable/api/#jinja2.Temp... |
Quick clarification on _expression: we intentionally use two templating systems - Jinja {{ }} for simple variable injection, and Python *_expression for complex logic that Jinja can't handle.
Actually, since we only use Jinja for variable substitution, should I just drop it entirely? We have another version implemented in Java/JavaScript that uses simple ${var-name} syntax, and we already have Python expressions for advanced scenarios. Might be cleaner to unify on ${var-name} + Python expressions.
Given how deeply you've looked into our system, would you consider using Sequor? I can promise full support including fundamental changes like these - your technical insight would be invaluable for getting the design right early on.