Commit 5b969fd
authored
1 parent c89a66f commit 5b969fd
File tree
2 files changed
+33
-6
lines changed- Lib
- string
- test/test_string
2 files changed
+33-6lines changedLines changed: 12 additions & 5 deletionsOriginal file line number Diff line number Diff line change @@ -1,15 +1,22 @@11"""Support for template string literals (t-strings)."""223-__all__ = [4-"Interpolation",5-"Template",6-]7-83t = t"{0}"94Template = type(t)105Interpolation = type(t.interpolations[0])116del t1278+def convert(obj, /, conversion):9+"""Convert *obj* using formatted string literal semantics."""10+if conversion is None:11+return obj12+if conversion == 'r':13+return repr(obj)14+if conversion == 's':15+return str(obj)16+if conversion == 'a':17+return ascii(obj)18+raise ValueError(f'invalid conversion specifier: {conversion}')19+1320def _template_unpickle(*args):1421import itertools1522Lines changed: 21 additions & 1 deletionOriginal file line number Diff line number Diff line change @@ -1,7 +1,7 @@11import pickle22import unittest33from collections.abc import Iterator, Iterable4-from string.templatelib import Template, Interpolation4+from string.templatelib import Template, Interpolation, convert5566from test.test_string._support import TStringBaseCase, fstring77@@ -169,5 +169,25 @@ def test_exhausted(self):169169self.assertRaises(StopIteration, next, template_iter)170170171171172+class TestFunctions(unittest.TestCase):173+def test_convert(self):174+from fractions import Fraction175+176+for obj in ('Café', None, 3.14, Fraction(1, 2)):177+with self.subTest(f'{obj=}'):178+self.assertEqual(convert(obj, None), obj)179+self.assertEqual(convert(obj, 's'), str(obj))180+self.assertEqual(convert(obj, 'r'), repr(obj))181+self.assertEqual(convert(obj, 'a'), ascii(obj))182+183+# Invalid conversion specifier184+with self.assertRaises(ValueError):185+convert(obj, 'z')186+with self.assertRaises(ValueError):187+convert(obj, 1)188+with self.assertRaises(ValueError):189+convert(obj, object())190+191+172192if __name__ == '__main__':173193unittest.main()
0 commit comments