A tiny language-independent text templater for python
Project description
tempest
Syntax-independent text templating library
Easily embed literal python code into any file.
Features:
- Configurable open/close delimiters
- Works with any language
- It's just more python
Big Scary Security Warning
This library will execute arbitrary code contained in the template. Do not allow untrusted templates to be executed.
Install
pip install tempest-fmt
Example
Template
# This is a markdown file
Hello my name is {name=}
My friends are:
{for f in friends:}
- {f=}
{divisor = 2}
{for i in range(5):}
{if i % divisor == 0:}
Did you know {i=} is divisible by {divisor=}
I can even evaluate stuff: {len(name)=}
Python Implementation
import tempest
t = tempest.parse_template_file("myTemplate.md", "{", "}")
values = {
"name": "Jimmy",
"friends": ["Carl", "Steve", "Greg"],
}
with open("output.md", mode='w') as f:
t.generate(f, value)
Output file
# This is a markdown file
Hello my name is Jimmy
My friends are:
- Carl
- Steve
- Greg
Did you know 0 is divisible by 2
Did you know 2 is divisible by 2
Did you know 4 is divisible by 2
I can even evaluate stuff: 5
Syntax specifics
For simplicity, we will assume the delimiters to be { }
All python statements will be contained within the delimiters,
any text outside will be considered raw text.
Statements of the form {<expr>=} will be evaluated as str(<expr>) and directly inserted into the text.
All other statements will be considered logical statements. Such statements must follow indentation rules for python and should have no raw text on the line. Any statements following will have indentation stripped, this includes raw text (extra whitespace after the expected indentation is left as-is).
Indentation is important
Leading spaces replaced with dots for this example
{for x in range(3):}
....- {x}
My next thing
Will produce
- 0
- 1
- 2
My next thing
Compared to
{for x in range(3):}
....- {x}
....
My next thing
Will produce
- 0
- 1
- 2
My next thing
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tempest_fmt-1.0.2.tar.gz.
File metadata
- Download URL: tempest_fmt-1.0.2.tar.gz
- Upload date:
- Size: 5.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b8fca8ad8719e4622c492b242dd08002dc38b2785cff1d52375de6ef0c14411
|
|
| MD5 |
0f628f1c322524e1a40dbff18b42cc84
|
|
| BLAKE2b-256 |
6187f3fc0044079be5f9e1923dad5aeae5a6574f71d2847725d085e01d212fd8
|
File details
Details for the file tempest_fmt-1.0.2-py3-none-any.whl.
File metadata
- Download URL: tempest_fmt-1.0.2-py3-none-any.whl
- Upload date:
- Size: 5.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
86dca56f54dbf2287118a529708b7f15994a63fc61295f3362e2205817178e80
|
|
| MD5 |
21b964a5cf00dd1367fe8bbbe26d2a18
|
|
| BLAKE2b-256 |
998a659cf2279074c069ed2db11b53ec7076fe9d8c7d7fedf943d0f6324316e8
|