This package provides a backport of the new PEP 750 "t-string" template string syntax, for use with Python versions before 3.14.
Instead of the new syntax t"..."
(which is only available in Python 3.14+), use the function call form:
from tstrings import t
name = "World"
tpl = t("Hello, {name}!")
print(tpl.strings) # ("Hello, ", "!")
print(tpl.interpolations) # (Interpolation(value="World", expression="name", ...),)
The returned object is a Template
with .strings
and .interpolations
attributes, closely matching the PEP 750 API.
- String interpolation: Supports
{expr}
expressions, including complex expressions. - Debug specifier:
{var=}
and{var=:.2f}
forms, as in f-strings. - Conversion specifiers:
{val!r}
,{val!s}
,{val!a}
. - Format specifiers:
{num:.2f}
. - Multiline expressions: Supported.
- Error handling: Raises
NameError
orSyntaxError
for invalid expressions, as in f-strings (but at runtime, not at compile time). - PEP 750 API: Returns
Template
andInterpolation
dataclasses matching the PEP.
- No t-string literal syntax: You must use
t("...")
, nott"..."
. - No support for all edge cases: Some advanced t-string edge cases may not be fully supported.
from tstrings import t
name = ""
value = 1
num = 3.1415
obj = {}
data = [1, 2, 3]
# Simple
tpl = t("Hello, {name}!")
# Debug
tpl = t("{value=}")
# Format
tpl = t("{num:.2f}")
# Conversion
tpl = t("{obj!r}")
# Multiline
tpl = t("""
{sum(data)}
""")
Install with uv sync
and activate the virtualenv (. .venv/bin/activate
or similar).
Run the test suite with:
nox
or just:
pytest
See tests/test_all.py
for coverage of all supported features.
Tests also include the tdom source code (modified for pre-3.14 syntax) and test suite.
This was hacked together in less than 2 hours. If you find it useful, please consider contributing fixes, improvements, or documentation!
Pull requests and issues are welcome.