Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tempest_fmt-1.0.2.tar.gz (5.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tempest_fmt-1.0.2-py3-none-any.whl (5.5 kB view details)

Uploaded Python 3

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

Hashes for tempest_fmt-1.0.2.tar.gz
Algorithm Hash digest
SHA256 6b8fca8ad8719e4622c492b242dd08002dc38b2785cff1d52375de6ef0c14411
MD5 0f628f1c322524e1a40dbff18b42cc84
BLAKE2b-256 6187f3fc0044079be5f9e1923dad5aeae5a6574f71d2847725d085e01d212fd8

See more details on using hashes here.

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

Hashes for tempest_fmt-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 86dca56f54dbf2287118a529708b7f15994a63fc61295f3362e2205817178e80
MD5 21b964a5cf00dd1367fe8bbbe26d2a18
BLAKE2b-256 998a659cf2279074c069ed2db11b53ec7076fe9d8c7d7fedf943d0f6324316e8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page