mirror of
https://github.com/python/cpython.git
synced 2025-07-25 20:24:11 +00:00

GH-132661: Add ``string.templatelib.convert()`` (GH-135217)
(cherry picked from commit 5b969fd645
)
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
33 lines
956 B
Python
33 lines
956 B
Python
"""Support for template string literals (t-strings)."""
|
|
|
|
t = t"{0}"
|
|
Template = type(t)
|
|
Interpolation = type(t.interpolations[0])
|
|
del t
|
|
|
|
def convert(obj, /, conversion):
|
|
"""Convert *obj* using formatted string literal semantics."""
|
|
if conversion is None:
|
|
return obj
|
|
if conversion == 'r':
|
|
return repr(obj)
|
|
if conversion == 's':
|
|
return str(obj)
|
|
if conversion == 'a':
|
|
return ascii(obj)
|
|
raise ValueError(f'invalid conversion specifier: {conversion}')
|
|
|
|
def _template_unpickle(*args):
|
|
import itertools
|
|
|
|
if len(args) != 2:
|
|
raise ValueError('Template expects tuple of length 2 to unpickle')
|
|
|
|
strings, interpolations = args
|
|
parts = []
|
|
for string, interpolation in itertools.zip_longest(strings, interpolations):
|
|
if string is not None:
|
|
parts.append(string)
|
|
if interpolation is not None:
|
|
parts.append(interpolation)
|
|
return Template(*parts)
|