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.

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("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.0.tar.gz (5.2 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.0-py3-none-any.whl (5.4 kB view details)

Uploaded Python 3

File details

Details for the file tempest_fmt-1.0.0.tar.gz.

File metadata

  • Download URL: tempest_fmt-1.0.0.tar.gz
  • Upload date:
  • Size: 5.2 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.0.tar.gz
Algorithm Hash digest
SHA256 b56a3edd2b7fc848f0cc2a1215894574bd778acd95c3086702a6873257f9ba9a
MD5 b14f03364d0d8baa54f0996d8ca1f1b9
BLAKE2b-256 434af28f5c1cf33fade870772ea2704d1c5850eee234534f3e5a056d438be153

See more details on using hashes here.

File details

Details for the file tempest_fmt-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: tempest_fmt-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 5.4 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 25bc8df79591229e4b4f3a03fcb6013795132396be1af3c43992a8b66ac1de44
MD5 ff39d8d392a57123f723e8b64402c0bf
BLAKE2b-256 87fa7766ffadd895acdc93ba40e8ead513f34aec692a648680b2f9c41fcef457

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