Repository navigation
Add support for Template type (t-strings) to pprint #134551
Description
Feature or enhancement
Proposal:
Update pprint functions to understand and format Template and Interpolation types:
>>> from pprint import pp
>>> name = "World"
>>> pp(t"Hello {name}")
Template(strings=('Hello ', ''),
interpolations=(Interpolation('World', 'name', None, ''),))""")I believe it will be quite common to play with t-strings in the REPL and other dynamic environments, where pretty formatting could help a lot. I don't know how high is the bar for adding types to the pprint registry, though.
If this is deemed worthwhile, I have a working implementation, pretty straightforward.
More complex examples (inspired from the PEP), to give a sense of what it could look like:
>>> attributes = {"id": "main"}
>>> attribute_value = "shrubbery"
>>> content = "hello"
>>> template = t"<span {attributes} data-value={attribute_value}>{content}</span>"
>>> pp(template)
Template(strings=('<span ', ' data-value=', '>', '</span>'),
interpolations=(Interpolation({'id': 'main'}, 'attributes', None, ''),
Interpolation('shrubbery',
'attribute_value',
None,
''),
Interpolation('hello', 'content', None, '')))
>>>
>>> nested = t"<div>{template}</div>"
>>> pp(nested)
Template(strings=('<div>', '</div>'),
interpolations=(Interpolation(Template(strings=('<span ',
' data-value=',
'>',
'</span>'),
interpolations=(Interpolation({'id': 'main'},
'attributes',
None,
''),
Interpolation('shrubbery',
'attribute_value',
None,
''),
Interpolation('hello',
'content',
None,
''))),
'template',
None,
''),))Unfortunately, "interpolation" being a quite long word repeated 2 times in the repr of a t-string, with default formatting rules we soon have text crumpled to the right of the screen... but I believe it is still more readable than
Template(strings=('<div>', '</div>'), interpolations=(Interpolation(Template(strings=('<span ', ' da
ta-value=', '>', '</span>'), interpolations=(Interpolation({'id': 'main'}, 'attributes', None, ''),
Interpolation('shrubbery', 'attribute_value', None, ''), Interpolation('hello', 'content', None, '')
)), 'template', None, ''),))Has this already been discussed elsewhere?
This is a minor feature, which does not need previous discussion elsewhere
Links to previous discussion of this feature:
No response
Activity
hugovk commentedon May 23, 2025
Good idea, cc @davepeck @lysnikolaou
Or something like Black formatting takes up less vertical and horizontal space:
And taking the simpler case:
Formats like:
Or with
--line-length 79uses more vertical space but feels more readable:Obviously we don't need to implement the full flexibility and complexity of Black-style formatting, but perhaps something along these lines?
loic-simon commentedon May 23, 2025
I didn't dare to get away from
pprintconventions (that follow PEP8, if I'm not mistaken) 😄 but I agree it would be way more readeable!lysnikolaou commentedon Jun 3, 2025
I agree with @hugovk that Black-like formatting makes this more readable. If people are okay with that, I'd certainly prefer it.
gh-134551: Add t-strings support to pprint (#134577)
pythongh-134551: Add t-strings support to pprint (python#134577)