pyrx-nlt
Natural Language Template (NLT) Engine — Plain-English templates that non-technical teams can read, write, and maintain for email, notifications, and dynamic content.
Installation
pip install pyrx-nlt
Requires Python 3.10+. Zero third-party dependencies.
Quick Start
from pyrx_nlt import NLTRenderer
renderer = NLTRenderer(
contact={"first_name": "Alice", "properties": {"Plan": "premium", "Points": 1250}},
trigger_event={"event_name": "purchase", "attributes": {"Item": "Widget", "Amount": "49.99"}},
)
result = renderer.render(
subject_template='Order confirmation for {the user\'s First Name, or "Customer"}',
body_template="""
<h1>Thank you, {the user's First Name}!</h1>
<p>You purchased: {the Item from the trigger event}</p>
<p>Amount: {the Amount from the trigger event, as "currency"}</p>
{if the user's Plan is premium}
<p>You earned {the user's Points, as "currency"} in rewards!</p>
{else}
<p>Upgrade to Premium for rewards on every purchase.</p>
{end if}
""",
)
print(result.html) # Rendered HTML
print(result.subject) # "Order confirmation for Alice"
print(result.suppressed) # False
Features
- 3 data sources:
{the user's X},{the X from the trigger event},{the X from the Y event} - Modifiers:
or "fallback",required,as "format",uppercase/lowercase/titlecase - Math:
plus,minus,times,divided by,modulo - Conditionals:
{if}...{else if}...{else}...{end if}with 20 comparison operators, AND/OR/NOT - Loops:
{for item in source}...{end for}withloop.index,loop.first,loop.last - Lists:
{list source, as comma/ordered/unordered list} - Tables:
{table source with columns: A, B, C} - Aggregates:
{sum of},{average of},{count of} - 19 chainable filters:
truncate,replace,url_encode,round,default,strip_html,trim,newline_to_br,split,join,first,last,length,sort,reverse,unique,where,map,slice - Formatting: 17 currency codes, date presets, custom date tokens, percentages
- Variable assignment:
{set x to expression} - Ternary:
{condition ? "true" : "false"} - Comments:
{# ignored #} - Raw blocks:
{raw}...{end raw} - Macros:
{define name(params)}...{end define}/{use name(args)} - Template inheritance:
{extends "base.html"}/{block name}...{end block}/{parent} - Built-in variables:
{today},{now} - XSS-safe: All output HTML-escaped by default
- Graceful degradation: Unparseable expressions preserved as literal text
Extension Points
from pyrx_nlt import NLTRenderer, EventStore, TemplateLoader
class MyEventStore:
"""Implement to look up historical events for named event resolution."""
async def get_latest(self, contact_id: str, event_name: str) -> dict | None:
...
class MyTemplateLoader:
"""Implement for template inheritance ({extends "base.html"})."""
def load(self, template_name: str) -> str | None:
...
renderer = NLTRenderer(
contact=contact_data,
event_store=MyEventStore(),
template_loader=MyTemplateLoader(),
)
Jinja2 Migration
Built-in bidirectional converter for migrating from Jinja2/MoEngage templates:
from pyrx_nlt.converter import convert_jinja2_to_nlt, convert_nlt_to_jinja2, detect_template_language
nlt_template, result = convert_jinja2_to_nlt(jinja2_template)
print(f"Converted {result.count} expressions")
language = detect_template_language(template) # "nlt", "jinja2", "mixed", or "none"
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
pyrx_nlt-1.2.0.tar.gz
(222.4 kB
view details)
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
pyrx_nlt-1.2.0-py3-none-any.whl
(75.2 kB
view details)
File details
Details for the file pyrx_nlt-1.2.0.tar.gz.
File metadata
- Download URL: pyrx_nlt-1.2.0.tar.gz
- Upload date:
- Size: 222.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6ecfd6027192bb2cdf2a40be4f6fc030e5a9140aa2af2a8319f71c5de4af1a35
|
|
| MD5 |
cc2f151f9dff2246ec12a69100a85985
|
|
| BLAKE2b-256 |
1fab6b646719a067daf4c62e5b59574767f1d9ce0c5f8c163b12c9a3d44d7c67
|
File details
Details for the file pyrx_nlt-1.2.0-py3-none-any.whl.
File metadata
- Download URL: pyrx_nlt-1.2.0-py3-none-any.whl
- Upload date:
- Size: 75.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4d3bb4d352d6e4595df311bc3de0300ba522b3412ec0a84d127b765b42c75acd
|
|
| MD5 |
2bfaa2542f1c03786e81cb6e74573aca
|
|
| BLAKE2b-256 |
0efda3a74c38dbd27b8684a2752ddb0c83e6f338d893dca0e84586cbd7082ad4
|