Skip to main content

Lua-powered templating engine with 100% Jinja2 compatibility

Project description

Luma Python Bindings

Python bindings for Luma templating engine, providing a drop-in replacement for Jinja2.

Installation

pip install luma-py

Quick Start

from luma import Template

# Simple rendering
template = Template("Hello, {{ name }}!")
output = template.render(name="World")
print(output)  # Hello, World!

# From file
template = Template.from_file("template.luma")
output = template.render(context={"user": "Alice"})

Jinja2 Compatibility

Luma is 100% compatible with Jinja2 templates:

# Works with Jinja2 syntax
template = Template("""
{% for item in items %}
  - {{ item | upper }}
{% endfor %}
""")

# Also works with Luma native syntax
template = Template("""
@for item in items
  - $item | upper
@end
""")

Features

  • ✅ 100% Jinja2 feature parity
  • ✅ Drop-in Jinja2 replacement
  • ✅ Faster compilation (Lua-powered)
  • ✅ Better whitespace handling
  • ✅ Template inheritance
  • ✅ Macros and filters
  • ✅ Autoescape for security
  • ✅ Custom filters and tests

API

Template Class

class Template:
    def __init__(self, source: str, syntax: str = "auto")
    def render(self, **context) -> str
    def render_dict(self, context: dict) -> str
    
    @classmethod
    def from_file(cls, path: str, syntax: str = "auto") -> Template

Environment Class

class Environment:
    def __init__(self, loader=None, **options)
    def get_template(self, name: str) -> Template
    def from_string(self, source: str) -> Template
    def add_filter(self, name: str, func: callable)
    def add_test(self, name: str, func: callable)

Examples

Flask Integration

from flask import Flask, render_template_string
from luma import Environment, FileSystemLoader

app = Flask(__name__)

# Use Luma as template engine
luma_env = Environment(loader=FileSystemLoader("templates"))

@app.route("/")
def index():
    template = luma_env.get_template("index.html")
    return template.render(title="My App")

Django Integration

# settings.py
TEMPLATES = [{
    'BACKEND': 'luma.django.LumaTemplates',
    'DIRS': [BASE_DIR / 'templates'],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [...],
    },
}]

Migration from Jinja2

Replace imports:

# Before (Jinja2)
from jinja2 import Template, Environment

# After (Luma)
from luma import Template, Environment

That's it! Your Jinja2 templates work unchanged.

Performance

Luma offers better performance than Jinja2 for most workloads:

Benchmark: 10,000 renders
Jinja2:  1.245s
Luma:    0.892s (1.4x faster)

Testing

Run the test suite:

# Install development dependencies
pip install -e ".[dev]"

# Run tests
pytest tests/ -v

# Run with coverage
pytest tests/ --cov=luma --cov-report=html

# Run specific test file
pytest tests/test_template.py -v

Running Examples

See the examples/ directory for complete examples:

  • basic.py - Simple template rendering examples
  • flask_app.py - Flask web application integration
  • kubernetes.py - Kubernetes manifest generation

Run examples:

# Basic examples
python examples/basic.py

# Flask app (requires: pip install flask)
python examples/flask_app.py

# Kubernetes manifests
python examples/kubernetes.py

Development

# Clone repository
git clone https://github.com/santosr2/luma.git
cd luma/bindings/python

# Install in development mode
pip install -e ".[dev]"

# Run tests
pytest

# Format code
black luma tests

# Type check
mypy luma

# Lint
flake8 luma

Version

Current version: 0.1.0

License

MIT License - See LICENSE file for details.

Links

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

luma_py-0.1.0rc7.tar.gz (11.1 kB view details)

Uploaded Source

Built Distribution

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

luma_py-0.1.0rc7-py3-none-any.whl (8.6 kB view details)

Uploaded Python 3

File details

Details for the file luma_py-0.1.0rc7.tar.gz.

File metadata

  • Download URL: luma_py-0.1.0rc7.tar.gz
  • Upload date:
  • Size: 11.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for luma_py-0.1.0rc7.tar.gz
Algorithm Hash digest
SHA256 c6a8e66027d354b9103c8f3733315c13c8452f517906d1c50b0d171af38de3ba
MD5 c3653772c2db5bd5ad2b91002216d804
BLAKE2b-256 7a8107b109af20c6a95d93a5409bf910cd8cb7b7de59212a5a9e103490dc8635

See more details on using hashes here.

Provenance

The following attestation bundles were made for luma_py-0.1.0rc7.tar.gz:

Publisher: release.yml on santosr2/luma

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file luma_py-0.1.0rc7-py3-none-any.whl.

File metadata

  • Download URL: luma_py-0.1.0rc7-py3-none-any.whl
  • Upload date:
  • Size: 8.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for luma_py-0.1.0rc7-py3-none-any.whl
Algorithm Hash digest
SHA256 029d171bf39cf87ce6bf0db05d067f8f855634a8a6ec2e60a310534e2bd35650
MD5 c1f0af5a1630c5020a5ac29973602ae0
BLAKE2b-256 2ab6cdf7288457b3497d02c12e72a859015c60f71324d9719b6053f0e5a7d56e

See more details on using hashes here.

Provenance

The following attestation bundles were made for luma_py-0.1.0rc7-py3-none-any.whl:

Publisher: release.yml on santosr2/luma

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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