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 {World}")
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