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.0rc8.tar.gz (11.2 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.0rc8-py3-none-any.whl (8.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: luma_py-0.1.0rc8.tar.gz
  • Upload date:
  • Size: 11.2 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.0rc8.tar.gz
Algorithm Hash digest
SHA256 107e5227fa2439d11bb76cbd3ef2160bfcf5e559300b90c2d30a2cac2e7bc258
MD5 e7dc7fbf397cba17a0b3241a70dcbd5b
BLAKE2b-256 7749d6c49915fc29019401615f15a4e230ae6e6af10d68408f7db31f90dd2d25

See more details on using hashes here.

Provenance

The following attestation bundles were made for luma_py-0.1.0rc8.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.0rc8-py3-none-any.whl.

File metadata

  • Download URL: luma_py-0.1.0rc8-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.0rc8-py3-none-any.whl
Algorithm Hash digest
SHA256 5b99b72363bfcf560dc392bd7b42bf3c34e50bbaecad1660ac1a9abf658ef711
MD5 463ae79b08c8ccdf616119b734e31abf
BLAKE2b-256 f0345284d6440b318ee0e4fb6ef4ad2477fa88ccfd1d09492fc0fcb098e1e1c8

See more details on using hashes here.

Provenance

The following attestation bundles were made for luma_py-0.1.0rc8-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