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.3.0.tar.gz
(233.5 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.3.0-py3-none-any.whl
(81.0 kB
view details)
File details
Details for the file pyrx_nlt-1.3.0.tar.gz.
File metadata
- Download URL: pyrx_nlt-1.3.0.tar.gz
- Upload date:
- Size: 233.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fd1b061291eda1f2de6e8a43a068b9c878fc318a37233c791ef89977f218b9f4
|
|
| MD5 |
d22eb670062c5b64626e103d14c3a729
|
|
| BLAKE2b-256 |
16fe1692f6c0b2c6bbb9d72824da5b9f6bf020300d58c92229d7b62687a580f8
|
File details
Details for the file pyrx_nlt-1.3.0-py3-none-any.whl.
File metadata
- Download URL: pyrx_nlt-1.3.0-py3-none-any.whl
- Upload date:
- Size: 81.0 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 |
9881df8cef0bef5cc493cd461e2e10ab8700a1ba97cac52e6f0e20a1962adcfc
|
|
| MD5 |
6b558aa130c9a9136751aa5833f8f084
|
|
| BLAKE2b-256 |
286333e640082dfb39db4880eae16b47b86c5a17e467086d75fc5d79ea960c1a
|