blob: 8164872432ad09ecabaf1aceb343e6bc4a097f7d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
"""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)
|