Yet Another Expansion Syntax (pronounced 'Yasssss Kweeeeen')
Project description
Yet Another Expansion Syntax (pronounced ‘Yasssss Kweeeeen’) for expanding complex data (YAML / JSON) with Jinja2 templating
If a block has no control keywords, everything is emitted as is:
import yaes block = { "ya": "{{ a }}" } values = { "a": "sure" } list(yaes.each(block, values)) # [ # ({"ya": "{{ a }}"}, {"a": "sure"}) # ]
The behavior is the same if you send a list of blocks:
list(yaes.each([block], values)) # [ # ({"ya": "{{ a }}"}, {"a": "sure"}) # ]
requires
If a requires keyword is present, all the keys listed must be in values for the block to emitted:
blocks = [ { "name": "one", "requires": "a" }, { "name": "twp", "requires": ["a", "b"] } ] values = { "a": "sure" } list(yaes.each(blocks, values)) # [ # ({"name": "one"}, {"a": "sure"}) # ]
This is useful for modules like opengui, where we don’t want to evaluate the conditions on some fields unless other fields in those conditions actually have values.
transpose
If a transpose keyword is present, it’ll use the key pairs to transpose the values:
blocks = [ { "name": "one", "transpose": { "b": "a" } } ] values = { "a": "sure" } list(yaes.each(blocks, values)) # [ # ({"name": "one"}, {"a": "sure", "b": "sure"}) # ]
This is useful if you’re re-using a template that uses veriables and you want to replace them with your usage’s specific variables.
iterate
If a iterate keyword is present, it’ll use the key pairs to iterate new values:
blocks = [ { "name": "{{ fruit }}", "iterate": { "fruit": "fruits" } } ] values = { "fruits": [ "apple", "pear", "orange" ] } list(yaes.each(blocks, values)) # [ # ( # { # "name": "{{ fruit }}" # }, # { # "fruit": "apple", # "fruits": [ # "apple", # "pear", # "orange" # ] # } # ), # ( # { # "name": "{{ fruit }}" # }, # { # "fruit": "pear", # "fruits": [ # "apple", # "pear", # "orange" # ] # } # ), # ( # { # "name": "{{ fruit }}" # }, # { # "fruit": "orange", # "fruits": [ # "apple", # "pear", # "orange" # ] # } # ) # ]
This is useful with opengui as you can take the values of a multi option field and use those values to create a new field for each option selected.
condition
If a condition keyword is present, it’ll only emit the block if the condition evaluates True:
blocks = [ { "name": "one", "condition": "{? a == 1 ?}" }, { "name": "two", "condition": "{? a == 2 ?}" } ] values = { "a": 1 } list(yaes.each(blocks, values)) # [ # ({"name": "one"}, {"a": 1}) # ]
This is useful if you only want to use a block under certain conditions.
blocks
If a blocks keyword is present, it’ll expand those blocks, using the parent block as a base:
blocks = [ { "base": "value", "blocks": [ { "name": "one" }, { "name": "two", "base": "override" } ] } ] values = { "a": 1 } list(yaes.each(blocks, values)) # [ # ( # { # "base": "value", # "name": "one" # }, # { # "a": 1 # } # ), # ( # { # "base": "override", # "name": "two" # }, # { # "a": 1 # } # ) # ]
This is useful if you have a condition or iterate that you want to apply to multiple block without having to use those keywords on each block.
values
If a values keyword is present, it’ll merge those values into teh values emitted:
blocks = [ { "name": "one" }, { "name": "two", "values": { "a": 2, "c": "{{ b }}sah" } } ] values = { "a": 1, "b": "yes" } list(yaes.each(blocks, values)) # [ # ( # { # "name": "one" # }, # { # "a": 1, # "b": "yes" # } # ), # ( # { # "name": "two" # }, # { # "a": 2, # "b": "yes", # "c": "yessah" # } # ) # ]
This is useful if you want to override the existing values but at this point I don’t think even I’ve ever used it.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file yaes-0.2.3.tar.gz
.
File metadata
- Download URL: yaes-0.2.3.tar.gz
- Upload date:
- Size: 7.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.8.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 29378ab95e4e1c0cb6e94d84b5742fb0db674e7e6da85a81bd31617660115071 |
|
MD5 | 4725739e8413c7f4a5447f54510d4151 |
|
BLAKE2b-256 | 974b177596d570eeff9bbabc0ee394fc43eb96cfab0a1df622f81050d3252142 |
File details
Details for the file yaes-0.2.3-py3-none-any.whl
.
File metadata
- Download URL: yaes-0.2.3-py3-none-any.whl
- Upload date:
- Size: 7.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.8.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | cb8e264e954a97d5432ee2312c3d76c7420787300676cab2d27cefb37f88e8d2 |
|
MD5 | b814ea6f238d10dc5f4dc58427f48565 |
|
BLAKE2b-256 | 681ee63bbca769cc5ee29e115911bc33ba67de2195686078e14db063f758d2bc |