Python API for IntentText with Rust-core parsing by default.
The package uses @intenttext/core (Rust-backed) for parser parity and keeps Python-native rendering/query/validation helpers for Python workflows and AI stacks.
Engine controls:
INTENTTEXT_PY_ENGINE=rust(default) to use Rust core through Node.INTENTTEXT_PY_ENGINE=pyto force legacy Python parser.INTENTTEXT_PY_FALLBACK=0to disable automatic fallback to Python parser when Rust core is unavailable.INTENTTEXT_PY_VALIDATE_ENGINE=rustto use Rust semantic validation through Node (default); setpyto force Python compatibility mode.INTENTTEXT_PY_QUERY_ENGINE=rustto use Rust-backed query execution (pyby default for compatibility with regex property filters).INTENTTEXT_PY_RENDER_ENGINE=rustto use Rust-backed HTML rendering (pyby default for compatibility).INTENTTEXT_PY_SOURCE_ENGINE=rustto use Rust-backedto_sourceconversion (pyby default for compatibility).INTENTTEXT_PY_TRUST_ENGINE=rustto use Rust-backed trust helpers (pyby default for compatibility).
Install
Quick Start
from intenttext import parse, render_html, merge_data, validate, query # Parse a document source = """ title: Sprint Planning section: Tasks task: Write tests | owner: Ahmed | due: Friday task: Deploy to staging | owner: Sarah | due: Monday gate: Final approval | approver: Lead | timeout: 24h """.strip() doc = parse(source) # Query for tasks tasks = query(doc, type="task") for task in tasks: print(f"{task.content} -> {task.properties.get('owner', 'unassigned')}") # Validate workflow semantics result = validate(doc) if not result.valid: for issue in result.issues: print(f"[{issue.type.upper()}] {issue.message}") # Render to HTML html = render_html(doc)
API
parse(source: str) -> IntentDocumentparse_safe(source: str, ...) -> ParseResultrender_html(doc: IntentDocument, include_css: bool = True) -> strrender_print(doc: IntentDocument) -> strrender_markdown(doc: IntentDocument) -> strmerge_data(template: IntentDocument, data: dict) -> IntentDocumentparse_and_merge(template_source: str, data: dict) -> IntentDocumentvalidate(doc: IntentDocument) -> ValidationResultquery(doc: IntentDocument, ...) -> list[IntentBlock]to_source(doc: IntentDocument) -> str
Development
pip install -e .[dev] pytest
Release (PyPI)
# 1) Ensure tests pass python3 -m pytest -q # 2) Build source + wheel python3 -m pip install -U hatch twine hatch build # 3) Validate package metadata and long description twine check dist/* # 4) Upload (interactive) twine upload dist/*
Tag-based release flow:
git tag v1.0.0 git push origin v1.0.0
GitHub Action publish workflow uses PYPI_API_TOKEN for automated release on v* tags.
License
MIT