JSON/YAML homoiconic templating language
Project description
JSON/YAML homoiconic templating language
Install
python3 -m pip install jinsi
Usage via CLI
python3 -m jinsi - # read from stdin
python3 -m jinsi -j - # read from stdin, render as json
python3 -m jinsi file1.yaml file2.yaml
Usage via API
from jinsi import render_json, render_yaml, render_file_json, render_file_yaml
print(render_file_yaml("file.yaml"))
# -> prints YAML
print(render_file_json("file.yaml"))
# -> prints minified JSON
print(render_yaml("""
a: 3
b:
::get: $arg1
""", arg1="bar"))
# -> prints YAML
print(render_json("""
a: 3
b:
::get: $arg1
""", arg1="foo"))
# -> prints JSON
Examples
Cloudformation Template
YAML input:
::let:
user:
::object:
- ::titlecase:
::get: $user.username
- Type: AWS::IAM::User
Properties:
UserName:
::get: $user.username
Groups:
- Administrators
LoginProfile:
Password:
::get: $user.password
::else: default
PasswordResetRequired: Yes
users:
::merge:
::each $ as $user:
::call user:
Resources:
::call users:
- username: jim
password: one
- username: jack
password: two
- username: johnny
Rendered output:
Resources:
Jack:
Properties:
Groups:
- Administrators
LoginProfile:
Password: two
PasswordResetRequired: true
UserName: jack
Type: AWS::IAM::User
Jim:
Properties:
Groups:
- Administrators
LoginProfile:
Password: one
PasswordResetRequired: true
UserName: jim
Type: AWS::IAM::User
Johnny:
Properties:
Groups:
- Administrators
LoginProfile:
Password: default
PasswordResetRequired: true
UserName: johnny
Type: AWS::IAM::User
Fibonacci
This is just an example to show how complex a template can be. Also note: The fibonacci function is defined recursively. This would blow up and values upto 50 could not be computed. Since Jinsi is purely functional, functions are mappings and can be cached. This is why the computation returns quickly (at all).
python3 -m jinsi max=50 -
YAML input:
::let:
fib:
::when:
::get: $n == 0 or $n == 1
::then:
::get: $n
::else:
::add:
- ::call fib:
$n:
::get: $n - 1
- ::call fib:
$n:
::get: $n - 2
fibs:
::range_exclusive:
- 0
- ::get: $max
::else: 10
result:
::each fibs as $n:
::call: fib
Rendered output:
result:
- 0
- 1
- 1
- 2
- 3
- 5
- 8
- 13
- 21
- 34
- 55
- 89
- 144
- 233
- 377
- 610
- 987
- 1597
- 2584
- 4181
- 6765
- 10946
- 17711
- 28657
- 46368
- 75025
- 121393
- 196418
- 317811
- 514229
- 832040
- 1346269
- 2178309
- 3524578
- 5702887
- 9227465
- 14930352
- 24157817
- 39088169
- 63245986
- 102334155
- 165580141
- 267914296
- 433494437
- 701408733
- 1134903170
- 1836311903
- 2971215073
- 4807526976
- 7778742049
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
jinsi-0.2.1.tar.gz
(15.0 kB
view details)
Built Distribution
jinsi-0.2.1-py3-none-any.whl
(16.9 kB
view details)
File details
Details for the file jinsi-0.2.1.tar.gz
.
File metadata
- Download URL: jinsi-0.2.1.tar.gz
- Upload date:
- Size: 15.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8e053a429b1851c308f6bcd49c96c12ceba66514702872e456a4d723c3c9ca3e |
|
MD5 | 71f2cd590f2a753724f792dbea58ebf6 |
|
BLAKE2b-256 | ed92c0fb6a167019c9ca45d182ea410f99cc3289c28f83c1ffc9b1dfb8ec5a3a |
File details
Details for the file jinsi-0.2.1-py3-none-any.whl
.
File metadata
- Download URL: jinsi-0.2.1-py3-none-any.whl
- Upload date:
- Size: 16.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bbe6819cf1ac13aee252377526b1c7693d2069981e217885432b23287de178a1 |
|
MD5 | f0ebc229124833d1247617a149961275 |
|
BLAKE2b-256 | 202da52c1a27bbdaf65bdec17fabef78b0281f09bdc73d3ab1e25ac49fa7c18e |