_dispatch[_collections.UserString.__repr__] = _pprint_user_string
+ def _pprint_template(self, object, stream, indent, allowance, context, level):
+ cls_name = object.__class__.__name__
+ if self._expand:
+ indent += self._indent_per_level
+ else:
+ indent += len(cls_name) + 1
+
+ items = (
+ ("strings", object.strings),
+ ("interpolations", object.interpolations),
+ )
+ stream.write(self._format_block_start(cls_name + "(", indent))
+ self._format_namespace_items(
+ items, stream, indent, allowance, context, level
+ )
+ stream.write(
+ self._format_block_end(")", indent - self._indent_per_level)
+ )
+
+ def _pprint_interpolation(self, object, stream, indent, allowance, context, level):
+ cls_name = object.__class__.__name__
+ if self._expand:
+ indent += self._indent_per_level
+ items = (
+ ("value", object.value),
+ ("expression", object.expression),
+ ("conversion", object.conversion),
+ ("format_spec", object.format_spec),
+ )
+ stream.write(self._format_block_start(cls_name + "(", indent))
+ self._format_namespace_items(
+ items, stream, indent, allowance, context, level
+ )
+ stream.write(
+ self._format_block_end(")", indent - self._indent_per_level)
+ )
+ else:
+ indent += len(cls_name)
+ items = (
+ object.value,
+ object.expression,
+ object.conversion,
+ object.format_spec,
+ )
+ stream.write(cls_name + "(")
+ self._format_items(
+ items, stream, indent, allowance, context, level
+ )
+ stream.write(")")
+
+ t = t"{0}"
+ _dispatch[type(t).__repr__] = _pprint_template
+ _dispatch[type(t.interpolations[0]).__repr__] = _pprint_interpolation
+ del t
+
def _safe_repr(self, object, context, maxlevels, level):
# Return triple (repr_string, isreadable, isrecursive).
typ = type(object)
'jumped over a '
'lazy dog'}""")
+ def test_template(self):
+ d = t""
+ self.assertEqual(pprint.pformat(d),
+ "Template(strings=('',), interpolations=())")
+ self.assertEqual(pprint.pformat(d), repr(d))
+ self.assertEqual(pprint.pformat(d, width=1),
+"""\
+Template(strings=('',),
+ interpolations=())""")
+ name = "World"
+ d = t"Hello {name}"
+ self.assertEqual(pprint.pformat(d),
+"""\
+Template(strings=('Hello ', ''),
+ interpolations=(Interpolation('World', 'name', None, ''),))""")
+ ver = {3.13: False, 3.14: True}
+ d = t"Hello { {"name": "Python", "version": ver}!s:z}!"
+ self.assertEqual(pprint.pformat(d, width=1),
+"""\
+Template(strings=('Hello ',
+ '!'),
+ interpolations=(Interpolation({'name': 'Python',
+ 'version': {3.13: False,
+ 3.14: True}},
+ ' '
+ '{"name": '
+ '"Python", '
+ '"version": '
+ 'ver}',
+ 's',
+ 'z'),))""")
+
+ def test_expand_template(self):
+ d = t""
+ self.assertEqual(
+ pprint.pformat(d, expand=True),
+ "Template(strings=('',), interpolations=())",
+ )
+ name = "World"
+ d = t"Hello {name}"
+ self.assertEqual(
+ pprint.pformat(d, width=40, indent=4, expand=True),
+ """\
+Template(
+ strings=('Hello ', ''),
+ interpolations=(
+ Interpolation(
+ value='World',
+ expression='name',
+ conversion=None,
+ format_spec='',
+ ),
+ ),
+)""",
+ )
+ ver = {3.13: False, 3.14: True}
+ d = t"Hello { {"name": "Python", "version": ver}!s:z}!"
+ self.assertEqual(
+ pprint.pformat(d, width=40, indent=4, expand=True),
+ """\
+Template(
+ strings=('Hello ', '!'),
+ interpolations=(
+ Interpolation(
+ value={
+ 'name': 'Python',
+ 'version': {
+ 3.13: False,
+ 3.14: True,
+ },
+ },
+ expression=' {"name": "Python", '
+ '"version": ver}',
+ conversion='s',
+ format_spec='z',
+ ),
+ ),
+)""",
+ )
+
def test_expand_dataclass(self):
@dataclasses.dataclass
class DummyDataclass: