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

Uploaded Python 3

File details

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

File metadata

  • Download URL: luma_py-0.1.0rc5.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.0rc5.tar.gz
Algorithm Hash digest
SHA256 01946a04ea68b6761133bae39c3a3ace1cd0a9b9ec9ed4ea56ac91e79044c8fe
MD5 c2ad82edac518f2396d63c693ec7881f
BLAKE2b-256 102f82b3623618e6a1c8bafb7082361ae3af75184f5b0fb054db9f729ffeb8ed

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: luma_py-0.1.0rc5-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.0rc5-py3-none-any.whl
Algorithm Hash digest
SHA256 b7212da2a362440e362f7bf7e5453cdfebc8052b0b5f58ba338d308177340454
MD5 bbfffde3488052749572c1c05155d804
BLAKE2b-256 59567b79428cf2cb9ebeb07b9a67a72111d39e1736cb682e122555317a416a3d

See more details on using hashes here.

Provenance

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