Mercurial > cpython-lru_cache-weakref
annotate Lib/string.py @ 74006:88198b93ff2f
Issue #13560: Add PyUnicode_EncodeLocale()
* Use PyUnicode_EncodeLocale() in time.strftime() if wcsftime() is not
available
* Document my last changes in Misc/NEWS
| author | Victor Stinner <victor.stinner@haypocalc.com> |
|---|---|
| date | Sat, 17 Dec 2011 04:13:41 +0100 |
| parents | 83f43b58c988 |
| children | 4feb10457c13 |
| rev | line source |
|---|---|
|
41480
99027c2b3fd2
Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents:
41226
diff
changeset
|
1 """A collection of string constants. |
|
6964
33be7d5d498b
Added doc string, provided by Charles Waldman (with some reformatting
Guido van Rossum <guido@python.org>
parents:
6821
diff
changeset
|
2 |
|
33be7d5d498b
Added doc string, provided by Charles Waldman (with some reformatting
Guido van Rossum <guido@python.org>
parents:
6821
diff
changeset
|
3 Public module variables: |
|
33be7d5d498b
Added doc string, provided by Charles Waldman (with some reformatting
Guido van Rossum <guido@python.org>
parents:
6821
diff
changeset
|
4 |
|
49804
8f0a175f04be
#4361: fix string.py docstring, clarify that only ASCII characters are in its constants.
Georg Brandl <georg@python.org>
parents:
49734
diff
changeset
|
5 whitespace -- a string containing all ASCII whitespace |
|
8f0a175f04be
#4361: fix string.py docstring, clarify that only ASCII characters are in its constants.
Georg Brandl <georg@python.org>
parents:
49734
diff
changeset
|
6 ascii_lowercase -- a string containing all ASCII lowercase letters |
|
8f0a175f04be
#4361: fix string.py docstring, clarify that only ASCII characters are in its constants.
Georg Brandl <georg@python.org>
parents:
49734
diff
changeset
|
7 ascii_uppercase -- a string containing all ASCII uppercase letters |
|
8f0a175f04be
#4361: fix string.py docstring, clarify that only ASCII characters are in its constants.
Georg Brandl <georg@python.org>
parents:
49734
diff
changeset
|
8 ascii_letters -- a string containing all ASCII letters |
|
8f0a175f04be
#4361: fix string.py docstring, clarify that only ASCII characters are in its constants.
Georg Brandl <georg@python.org>
parents:
49734
diff
changeset
|
9 digits -- a string containing all ASCII decimal digits |
|
8f0a175f04be
#4361: fix string.py docstring, clarify that only ASCII characters are in its constants.
Georg Brandl <georg@python.org>
parents:
49734
diff
changeset
|
10 hexdigits -- a string containing all ASCII hexadecimal digits |
|
8f0a175f04be
#4361: fix string.py docstring, clarify that only ASCII characters are in its constants.
Georg Brandl <georg@python.org>
parents:
49734
diff
changeset
|
11 octdigits -- a string containing all ASCII octal digits |
|
8f0a175f04be
#4361: fix string.py docstring, clarify that only ASCII characters are in its constants.
Georg Brandl <georg@python.org>
parents:
49734
diff
changeset
|
12 punctuation -- a string containing all ASCII punctuation characters |
|
8f0a175f04be
#4361: fix string.py docstring, clarify that only ASCII characters are in its constants.
Georg Brandl <georg@python.org>
parents:
49734
diff
changeset
|
13 printable -- a string containing all ASCII characters considered printable |
|
6964
33be7d5d498b
Added doc string, provided by Charles Waldman (with some reformatting
Guido van Rossum <guido@python.org>
parents:
6821
diff
changeset
|
14 |
|
33be7d5d498b
Added doc string, provided by Charles Waldman (with some reformatting
Guido van Rossum <guido@python.org>
parents:
6821
diff
changeset
|
15 """ |
|
33be7d5d498b
Added doc string, provided by Charles Waldman (with some reformatting
Guido van Rossum <guido@python.org>
parents:
6821
diff
changeset
|
16 |
|
65291
fd044cda97d8
#9418: first step of moving private string methods to _string module.
Georg Brandl <georg@python.org>
parents:
64818
diff
changeset
|
17 import _string |
|
fd044cda97d8
#9418: first step of moving private string methods to _string module.
Georg Brandl <georg@python.org>
parents:
64818
diff
changeset
|
18 |
| 5 | 19 # Some strings for ctype-style character classification |
|
1331
07900834cc97
* pdb.py: set 'privileged' property when evaluating expressions
Guido van Rossum <guido@python.org>
parents:
1291
diff
changeset
|
20 whitespace = ' \t\n\r\v\f' |
|
42585
b623777f22b0
Remove string.{letters,lowercase,uppercase}.
Martin v. Löwis <martin@v.loewis.de>
parents:
42142
diff
changeset
|
21 ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz' |
|
b623777f22b0
Remove string.{letters,lowercase,uppercase}.
Martin v. Löwis <martin@v.loewis.de>
parents:
42142
diff
changeset
|
22 ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' |
|
18776
22b2f4b436af
Added the constants ascii_letters, ascii_lowercase, and ascii_uppercase
Fred Drake <fdrake@acm.org>
parents:
16657
diff
changeset
|
23 ascii_letters = ascii_lowercase + ascii_uppercase |
| 5 | 24 digits = '0123456789' |
| 25 hexdigits = digits + 'abcdef' + 'ABCDEF' | |
| 26 octdigits = '01234567' | |
|
15872
3685ef2a55a4
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
15610
diff
changeset
|
27 punctuation = """!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~""" |
|
42585
b623777f22b0
Remove string.{letters,lowercase,uppercase}.
Martin v. Löwis <martin@v.loewis.de>
parents:
42142
diff
changeset
|
28 printable = digits + ascii_letters + punctuation + whitespace |
| 5 | 29 |
|
33257
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
30 # Functions which aren't available as string methods. |
|
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
31 |
|
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
32 # Capitalize the words in a string, e.g. " aBc dEf " -> "Abc Def". |
|
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
33 def capwords(s, sep=None): |
|
56233
f3c595214abc
Merged revisions 75074 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
53909
diff
changeset
|
34 """capwords(s [,sep]) -> string |
|
33257
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
35 |
|
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
36 Split the argument into words using split, capitalize each |
|
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
37 word using capitalize, and join the capitalized words using |
|
56233
f3c595214abc
Merged revisions 75074 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
53909
diff
changeset
|
38 join. If the optional second argument sep is absent or None, |
|
f3c595214abc
Merged revisions 75074 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
53909
diff
changeset
|
39 runs of whitespace characters are replaced by a single space |
|
f3c595214abc
Merged revisions 75074 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
53909
diff
changeset
|
40 and leading and trailing whitespace are removed, otherwise |
|
f3c595214abc
Merged revisions 75074 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
53909
diff
changeset
|
41 sep is used to split and join the words. |
|
33257
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
42 |
|
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
43 """ |
|
56233
f3c595214abc
Merged revisions 75074 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
53909
diff
changeset
|
44 return (sep or ' ').join(x.capitalize() for x in s.split(sep)) |
|
33257
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
45 |
|
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
46 |
|
33278
2b136441035c
Minor improvements to the template code.
Raymond Hettinger <python@rcn.com>
parents:
33257
diff
changeset
|
47 #################################################################### |
|
33257
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
48 import re as _re |
|
68164
73c5abb41296
Issue #11297: Add collections.ChainMap()
Raymond Hettinger <python@rcn.com>
parents:
68092
diff
changeset
|
49 from collections import ChainMap |
|
33471
41dbee5ed295
Accepted Raymond's patch to combine mapping and keyword arguments, with slight
Barry Warsaw <barry@python.org>
parents:
33450
diff
changeset
|
50 |
|
33439
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
51 class _TemplateMetaclass(type): |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
52 pattern = r""" |
|
33588
68d11e439a0b
Make the regex pattern easier to read, understand, and modify
Raymond Hettinger <python@rcn.com>
parents:
33505
diff
changeset
|
53 %(delim)s(?: |
|
68d11e439a0b
Make the regex pattern easier to read, understand, and modify
Raymond Hettinger <python@rcn.com>
parents:
33505
diff
changeset
|
54 (?P<escaped>%(delim)s) | # Escape sequence of two delimiters |
|
68d11e439a0b
Make the regex pattern easier to read, understand, and modify
Raymond Hettinger <python@rcn.com>
parents:
33505
diff
changeset
|
55 (?P<named>%(id)s) | # delimiter and a Python identifier |
|
68d11e439a0b
Make the regex pattern easier to read, understand, and modify
Raymond Hettinger <python@rcn.com>
parents:
33505
diff
changeset
|
56 {(?P<braced>%(id)s)} | # delimiter and a braced identifier |
|
68d11e439a0b
Make the regex pattern easier to read, understand, and modify
Raymond Hettinger <python@rcn.com>
parents:
33505
diff
changeset
|
57 (?P<invalid>) # Other ill-formed delimiter exprs |
|
68d11e439a0b
Make the regex pattern easier to read, understand, and modify
Raymond Hettinger <python@rcn.com>
parents:
33505
diff
changeset
|
58 ) |
|
33439
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
59 """ |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
60 |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
61 def __init__(cls, name, bases, dct): |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
62 super(_TemplateMetaclass, cls).__init__(name, bases, dct) |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
63 if 'pattern' in dct: |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
64 pattern = cls.pattern |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
65 else: |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
66 pattern = _TemplateMetaclass.pattern % { |
|
33505
cc0ae03743b8
At the cost of a modest (but useful in its own right) change in the semantics
Barry Warsaw <barry@python.org>
parents:
33497
diff
changeset
|
67 'delim' : _re.escape(cls.delimiter), |
|
33439
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
68 'id' : cls.idpattern, |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
69 } |
|
63295
91cbb55e20be
#6630: allow customizing flags for compiling string.Template.idpattern.
Georg Brandl <georg@python.org>
parents:
56232
diff
changeset
|
70 cls.pattern = _re.compile(pattern, cls.flags | _re.VERBOSE) |
|
33439
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
71 |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
72 |
|
41226
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
40644
diff
changeset
|
73 class Template(metaclass=_TemplateMetaclass): |
|
33257
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
74 """A string class for supporting $-substitutions.""" |
|
33439
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
75 |
|
33505
cc0ae03743b8
At the cost of a modest (but useful in its own right) change in the semantics
Barry Warsaw <barry@python.org>
parents:
33497
diff
changeset
|
76 delimiter = '$' |
|
33439
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
77 idpattern = r'[_a-z][_a-z0-9]*' |
|
63295
91cbb55e20be
#6630: allow customizing flags for compiling string.Template.idpattern.
Georg Brandl <georg@python.org>
parents:
56232
diff
changeset
|
78 flags = _re.IGNORECASE |
|
33439
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
79 |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
80 def __init__(self, template): |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
81 self.template = template |
|
33257
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
82 |
|
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
83 # Search for $$, $identifier, ${identifier}, and any bare $'s |
|
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
84 |
|
33479
b87eaa46c9cb
Raymond's good suggestion to re-order the tests in the convert() helper so the
Barry Warsaw <barry@python.org>
parents:
33477
diff
changeset
|
85 def _invalid(self, mo): |
|
b87eaa46c9cb
Raymond's good suggestion to re-order the tests in the convert() helper so the
Barry Warsaw <barry@python.org>
parents:
33477
diff
changeset
|
86 i = mo.start('invalid') |
|
72485
83f43b58c988
#13012: use splitlines(keepends=True/False) instead of splitlines(0/1).
Ezio Melotti <ezio.melotti@gmail.com>
parents:
68258
diff
changeset
|
87 lines = self.template[:i].splitlines(keepends=True) |
|
33439
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
88 if not lines: |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
89 colno = 1 |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
90 lineno = 1 |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
91 else: |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
92 colno = i - len(''.join(lines[:-1])) |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
93 lineno = len(lines) |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
94 raise ValueError('Invalid placeholder in string: line %d, col %d' % |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
95 (lineno, colno)) |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
96 |
|
33477
a220073536d6
substitute(), safe_substitute(): Paul Moore provides a better hack for dealing
Barry Warsaw <barry@python.org>
parents:
33471
diff
changeset
|
97 def substitute(self, *args, **kws): |
|
a220073536d6
substitute(), safe_substitute(): Paul Moore provides a better hack for dealing
Barry Warsaw <barry@python.org>
parents:
33471
diff
changeset
|
98 if len(args) > 1: |
|
a220073536d6
substitute(), safe_substitute(): Paul Moore provides a better hack for dealing
Barry Warsaw <barry@python.org>
parents:
33471
diff
changeset
|
99 raise TypeError('Too many positional arguments') |
|
a220073536d6
substitute(), safe_substitute(): Paul Moore provides a better hack for dealing
Barry Warsaw <barry@python.org>
parents:
33471
diff
changeset
|
100 if not args: |
|
a220073536d6
substitute(), safe_substitute(): Paul Moore provides a better hack for dealing
Barry Warsaw <barry@python.org>
parents:
33471
diff
changeset
|
101 mapping = kws |
|
33471
41dbee5ed295
Accepted Raymond's patch to combine mapping and keyword arguments, with slight
Barry Warsaw <barry@python.org>
parents:
33450
diff
changeset
|
102 elif kws: |
|
68164
73c5abb41296
Issue #11297: Add collections.ChainMap()
Raymond Hettinger <python@rcn.com>
parents:
68092
diff
changeset
|
103 mapping = ChainMap(kws, args[0]) |
|
33477
a220073536d6
substitute(), safe_substitute(): Paul Moore provides a better hack for dealing
Barry Warsaw <barry@python.org>
parents:
33471
diff
changeset
|
104 else: |
|
a220073536d6
substitute(), safe_substitute(): Paul Moore provides a better hack for dealing
Barry Warsaw <barry@python.org>
parents:
33471
diff
changeset
|
105 mapping = args[0] |
|
33471
41dbee5ed295
Accepted Raymond's patch to combine mapping and keyword arguments, with slight
Barry Warsaw <barry@python.org>
parents:
33450
diff
changeset
|
106 # Helper function for .sub() |
|
33257
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
107 def convert(mo): |
|
33479
b87eaa46c9cb
Raymond's good suggestion to re-order the tests in the convert() helper so the
Barry Warsaw <barry@python.org>
parents:
33477
diff
changeset
|
108 # Check the most common path first. |
|
b87eaa46c9cb
Raymond's good suggestion to re-order the tests in the convert() helper so the
Barry Warsaw <barry@python.org>
parents:
33477
diff
changeset
|
109 named = mo.group('named') or mo.group('braced') |
|
b87eaa46c9cb
Raymond's good suggestion to re-order the tests in the convert() helper so the
Barry Warsaw <barry@python.org>
parents:
33477
diff
changeset
|
110 if named is not None: |
|
b87eaa46c9cb
Raymond's good suggestion to re-order the tests in the convert() helper so the
Barry Warsaw <barry@python.org>
parents:
33477
diff
changeset
|
111 val = mapping[named] |
|
b87eaa46c9cb
Raymond's good suggestion to re-order the tests in the convert() helper so the
Barry Warsaw <barry@python.org>
parents:
33477
diff
changeset
|
112 # We use this idiom instead of str() because the latter will |
|
b87eaa46c9cb
Raymond's good suggestion to re-order the tests in the convert() helper so the
Barry Warsaw <barry@python.org>
parents:
33477
diff
changeset
|
113 # fail if val is a Unicode containing non-ASCII characters. |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
34127
diff
changeset
|
114 return '%s' % (val,) |
|
33278
2b136441035c
Minor improvements to the template code.
Raymond Hettinger <python@rcn.com>
parents:
33257
diff
changeset
|
115 if mo.group('escaped') is not None: |
|
33505
cc0ae03743b8
At the cost of a modest (but useful in its own right) change in the semantics
Barry Warsaw <barry@python.org>
parents:
33497
diff
changeset
|
116 return self.delimiter |
|
33479
b87eaa46c9cb
Raymond's good suggestion to re-order the tests in the convert() helper so the
Barry Warsaw <barry@python.org>
parents:
33477
diff
changeset
|
117 if mo.group('invalid') is not None: |
|
b87eaa46c9cb
Raymond's good suggestion to re-order the tests in the convert() helper so the
Barry Warsaw <barry@python.org>
parents:
33477
diff
changeset
|
118 self._invalid(mo) |
|
33773
ab09daac5691
Invalid patterns to substitute and safe_substitute would crash since pattern
Neal Norwitz <nnorwitz@gmail.com>
parents:
33588
diff
changeset
|
119 raise ValueError('Unrecognized named group in pattern', |
|
ab09daac5691
Invalid patterns to substitute and safe_substitute would crash since pattern
Neal Norwitz <nnorwitz@gmail.com>
parents:
33588
diff
changeset
|
120 self.pattern) |
|
33439
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
121 return self.pattern.sub(convert, self.template) |
|
33257
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
122 |
|
33477
a220073536d6
substitute(), safe_substitute(): Paul Moore provides a better hack for dealing
Barry Warsaw <barry@python.org>
parents:
33471
diff
changeset
|
123 def safe_substitute(self, *args, **kws): |
|
a220073536d6
substitute(), safe_substitute(): Paul Moore provides a better hack for dealing
Barry Warsaw <barry@python.org>
parents:
33471
diff
changeset
|
124 if len(args) > 1: |
|
a220073536d6
substitute(), safe_substitute(): Paul Moore provides a better hack for dealing
Barry Warsaw <barry@python.org>
parents:
33471
diff
changeset
|
125 raise TypeError('Too many positional arguments') |
|
a220073536d6
substitute(), safe_substitute(): Paul Moore provides a better hack for dealing
Barry Warsaw <barry@python.org>
parents:
33471
diff
changeset
|
126 if not args: |
|
a220073536d6
substitute(), safe_substitute(): Paul Moore provides a better hack for dealing
Barry Warsaw <barry@python.org>
parents:
33471
diff
changeset
|
127 mapping = kws |
|
33471
41dbee5ed295
Accepted Raymond's patch to combine mapping and keyword arguments, with slight
Barry Warsaw <barry@python.org>
parents:
33450
diff
changeset
|
128 elif kws: |
|
68164
73c5abb41296
Issue #11297: Add collections.ChainMap()
Raymond Hettinger <python@rcn.com>
parents:
68092
diff
changeset
|
129 mapping = ChainMap(kws, args[0]) |
|
33477
a220073536d6
substitute(), safe_substitute(): Paul Moore provides a better hack for dealing
Barry Warsaw <barry@python.org>
parents:
33471
diff
changeset
|
130 else: |
|
a220073536d6
substitute(), safe_substitute(): Paul Moore provides a better hack for dealing
Barry Warsaw <barry@python.org>
parents:
33471
diff
changeset
|
131 mapping = args[0] |
|
33471
41dbee5ed295
Accepted Raymond's patch to combine mapping and keyword arguments, with slight
Barry Warsaw <barry@python.org>
parents:
33450
diff
changeset
|
132 # Helper function for .sub() |
|
33257
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
133 def convert(mo): |
|
64818
71b95942c3a4
Issue #1686: Fix string.Template when overriding the pattern attribute.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
64501
diff
changeset
|
134 named = mo.group('named') or mo.group('braced') |
|
33257
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
135 if named is not None: |
|
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
136 try: |
|
33439
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
137 # We use this idiom instead of str() because the latter |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
138 # will fail if val is a Unicode containing non-ASCII |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
34127
diff
changeset
|
139 return '%s' % (mapping[named],) |
|
33257
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
140 except KeyError: |
|
64818
71b95942c3a4
Issue #1686: Fix string.Template when overriding the pattern attribute.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
64501
diff
changeset
|
141 return mo.group() |
|
33479
b87eaa46c9cb
Raymond's good suggestion to re-order the tests in the convert() helper so the
Barry Warsaw <barry@python.org>
parents:
33477
diff
changeset
|
142 if mo.group('escaped') is not None: |
|
33505
cc0ae03743b8
At the cost of a modest (but useful in its own right) change in the semantics
Barry Warsaw <barry@python.org>
parents:
33497
diff
changeset
|
143 return self.delimiter |
|
33479
b87eaa46c9cb
Raymond's good suggestion to re-order the tests in the convert() helper so the
Barry Warsaw <barry@python.org>
parents:
33477
diff
changeset
|
144 if mo.group('invalid') is not None: |
|
64818
71b95942c3a4
Issue #1686: Fix string.Template when overriding the pattern attribute.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
64501
diff
changeset
|
145 return mo.group() |
|
33773
ab09daac5691
Invalid patterns to substitute and safe_substitute would crash since pattern
Neal Norwitz <nnorwitz@gmail.com>
parents:
33588
diff
changeset
|
146 raise ValueError('Unrecognized named group in pattern', |
|
ab09daac5691
Invalid patterns to substitute and safe_substitute would crash since pattern
Neal Norwitz <nnorwitz@gmail.com>
parents:
33588
diff
changeset
|
147 self.pattern) |
|
33439
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
148 return self.pattern.sub(convert, self.template) |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
149 |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
150 |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
151 |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
152 ######################################################################## |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
153 # the Formatter class |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
154 # see PEP 3101 for details and purpose of this class |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
155 |
|
49734
b0fcb17f7efa
Merged revisions 67154,67157-67159,67175-67176,67189,67224-67227,67234 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
43947
diff
changeset
|
156 # The hard parts are reused from the C implementation. They're exposed as "_" |
| 64501 | 157 # prefixed methods of str. |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
158 |
|
65291
fd044cda97d8
#9418: first step of moving private string methods to _string module.
Georg Brandl <georg@python.org>
parents:
64818
diff
changeset
|
159 # The overall parser is implemented in _string.formatter_parser. |
|
fd044cda97d8
#9418: first step of moving private string methods to _string module.
Georg Brandl <georg@python.org>
parents:
64818
diff
changeset
|
160 # The field name parser is implemented in _string.formatter_field_name_split |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
161 |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
162 class Formatter: |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
163 def format(self, format_string, *args, **kwargs): |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
164 return self.vformat(format_string, args, kwargs) |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
165 |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
166 def vformat(self, format_string, args, kwargs): |
|
43112
90c715bc7d30
Changed signature of string.Formatter.get_field, per suggestion by
Eric Smith <eric@trueblade.com>
parents:
43020
diff
changeset
|
167 used_args = set() |
|
43241
e946073dee38
Changed some ValueError's to KeyError and IndexError.
Eric Smith <eric@trueblade.com>
parents:
43200
diff
changeset
|
168 result = self._vformat(format_string, args, kwargs, used_args, 2) |
|
e946073dee38
Changed some ValueError's to KeyError and IndexError.
Eric Smith <eric@trueblade.com>
parents:
43200
diff
changeset
|
169 self.check_unused_args(used_args, args, kwargs) |
|
e946073dee38
Changed some ValueError's to KeyError and IndexError.
Eric Smith <eric@trueblade.com>
parents:
43200
diff
changeset
|
170 return result |
|
e946073dee38
Changed some ValueError's to KeyError and IndexError.
Eric Smith <eric@trueblade.com>
parents:
43200
diff
changeset
|
171 |
|
e946073dee38
Changed some ValueError's to KeyError and IndexError.
Eric Smith <eric@trueblade.com>
parents:
43200
diff
changeset
|
172 def _vformat(self, format_string, args, kwargs, used_args, recursion_depth): |
|
e946073dee38
Changed some ValueError's to KeyError and IndexError.
Eric Smith <eric@trueblade.com>
parents:
43200
diff
changeset
|
173 if recursion_depth < 0: |
|
e946073dee38
Changed some ValueError's to KeyError and IndexError.
Eric Smith <eric@trueblade.com>
parents:
43200
diff
changeset
|
174 raise ValueError('Max string recursion exceeded') |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
175 result = [] |
|
42948
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
176 for literal_text, field_name, format_spec, conversion in \ |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
177 self.parse(format_string): |
|
42969
0e510aff5e9a
Modified parsing of format strings, so that we always return
Eric Smith <eric@trueblade.com>
parents:
42948
diff
changeset
|
178 |
|
0e510aff5e9a
Modified parsing of format strings, so that we always return
Eric Smith <eric@trueblade.com>
parents:
42948
diff
changeset
|
179 # output the literal text |
|
0e510aff5e9a
Modified parsing of format strings, so that we always return
Eric Smith <eric@trueblade.com>
parents:
42948
diff
changeset
|
180 if literal_text: |
|
0e510aff5e9a
Modified parsing of format strings, so that we always return
Eric Smith <eric@trueblade.com>
parents:
42948
diff
changeset
|
181 result.append(literal_text) |
|
0e510aff5e9a
Modified parsing of format strings, so that we always return
Eric Smith <eric@trueblade.com>
parents:
42948
diff
changeset
|
182 |
|
0e510aff5e9a
Modified parsing of format strings, so that we always return
Eric Smith <eric@trueblade.com>
parents:
42948
diff
changeset
|
183 # if there's a field, output it |
|
0e510aff5e9a
Modified parsing of format strings, so that we always return
Eric Smith <eric@trueblade.com>
parents:
42948
diff
changeset
|
184 if field_name is not None: |
|
42948
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
185 # this is some markup, find the object and do |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
186 # the formatting |
|
42875
5fd65e250843
PEP 3101: Completed string.Formatter class. Reimplemented field_name to object transformation.
Eric Smith <eric@trueblade.com>
parents:
42817
diff
changeset
|
187 |
|
42948
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
188 # given the field_name, find the object it references |
|
43112
90c715bc7d30
Changed signature of string.Formatter.get_field, per suggestion by
Eric Smith <eric@trueblade.com>
parents:
43020
diff
changeset
|
189 # and the argument it came from |
|
43200
463b341a9d63
Removed used_args param from string.Formatter.get_field. It was left in by mistake from an earlier edit.
Eric Smith <eric@trueblade.com>
parents:
43144
diff
changeset
|
190 obj, arg_used = self.get_field(field_name, args, kwargs) |
|
43112
90c715bc7d30
Changed signature of string.Formatter.get_field, per suggestion by
Eric Smith <eric@trueblade.com>
parents:
43020
diff
changeset
|
191 used_args.add(arg_used) |
|
42875
5fd65e250843
PEP 3101: Completed string.Formatter class. Reimplemented field_name to object transformation.
Eric Smith <eric@trueblade.com>
parents:
42817
diff
changeset
|
192 |
|
5fd65e250843
PEP 3101: Completed string.Formatter class. Reimplemented field_name to object transformation.
Eric Smith <eric@trueblade.com>
parents:
42817
diff
changeset
|
193 # do any conversion on the resulting object |
|
42948
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
194 obj = self.convert_field(obj, conversion) |
|
42875
5fd65e250843
PEP 3101: Completed string.Formatter class. Reimplemented field_name to object transformation.
Eric Smith <eric@trueblade.com>
parents:
42817
diff
changeset
|
195 |
|
43241
e946073dee38
Changed some ValueError's to KeyError and IndexError.
Eric Smith <eric@trueblade.com>
parents:
43200
diff
changeset
|
196 # expand the format spec, if needed |
|
e946073dee38
Changed some ValueError's to KeyError and IndexError.
Eric Smith <eric@trueblade.com>
parents:
43200
diff
changeset
|
197 format_spec = self._vformat(format_spec, args, kwargs, |
|
e946073dee38
Changed some ValueError's to KeyError and IndexError.
Eric Smith <eric@trueblade.com>
parents:
43200
diff
changeset
|
198 used_args, recursion_depth-1) |
|
e946073dee38
Changed some ValueError's to KeyError and IndexError.
Eric Smith <eric@trueblade.com>
parents:
43200
diff
changeset
|
199 |
|
42875
5fd65e250843
PEP 3101: Completed string.Formatter class. Reimplemented field_name to object transformation.
Eric Smith <eric@trueblade.com>
parents:
42817
diff
changeset
|
200 # format the object and append to the result |
|
5fd65e250843
PEP 3101: Completed string.Formatter class. Reimplemented field_name to object transformation.
Eric Smith <eric@trueblade.com>
parents:
42817
diff
changeset
|
201 result.append(self.format_field(obj, format_spec)) |
|
42969
0e510aff5e9a
Modified parsing of format strings, so that we always return
Eric Smith <eric@trueblade.com>
parents:
42948
diff
changeset
|
202 |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
203 return ''.join(result) |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
204 |
|
42948
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
205 |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
206 def get_value(self, key, args, kwargs): |
|
42875
5fd65e250843
PEP 3101: Completed string.Formatter class. Reimplemented field_name to object transformation.
Eric Smith <eric@trueblade.com>
parents:
42817
diff
changeset
|
207 if isinstance(key, int): |
|
5fd65e250843
PEP 3101: Completed string.Formatter class. Reimplemented field_name to object transformation.
Eric Smith <eric@trueblade.com>
parents:
42817
diff
changeset
|
208 return args[key] |
|
5fd65e250843
PEP 3101: Completed string.Formatter class. Reimplemented field_name to object transformation.
Eric Smith <eric@trueblade.com>
parents:
42817
diff
changeset
|
209 else: |
|
5fd65e250843
PEP 3101: Completed string.Formatter class. Reimplemented field_name to object transformation.
Eric Smith <eric@trueblade.com>
parents:
42817
diff
changeset
|
210 return kwargs[key] |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
211 |
|
42948
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
212 |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
213 def check_unused_args(self, used_args, args, kwargs): |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
214 pass |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
215 |
|
42948
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
216 |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
217 def format_field(self, value, format_spec): |
|
42875
5fd65e250843
PEP 3101: Completed string.Formatter class. Reimplemented field_name to object transformation.
Eric Smith <eric@trueblade.com>
parents:
42817
diff
changeset
|
218 return format(value, format_spec) |
|
42948
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
219 |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
220 |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
221 def convert_field(self, value, conversion): |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
222 # do any conversion on the resulting object |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
223 if conversion == 'r': |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
224 return repr(value) |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
225 elif conversion == 's': |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
226 return str(value) |
|
43241
e946073dee38
Changed some ValueError's to KeyError and IndexError.
Eric Smith <eric@trueblade.com>
parents:
43200
diff
changeset
|
227 elif conversion is None: |
|
42948
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
228 return value |
| 64501 | 229 raise ValueError("Unknown conversion specifier {0!s}".format(conversion)) |
|
42948
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
230 |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
231 |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
232 # returns an iterable that contains tuples of the form: |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
233 # (literal_text, field_name, format_spec, conversion) |
|
42969
0e510aff5e9a
Modified parsing of format strings, so that we always return
Eric Smith <eric@trueblade.com>
parents:
42948
diff
changeset
|
234 # literal_text can be zero length |
|
0e510aff5e9a
Modified parsing of format strings, so that we always return
Eric Smith <eric@trueblade.com>
parents:
42948
diff
changeset
|
235 # field_name can be None, in which case there's no |
|
0e510aff5e9a
Modified parsing of format strings, so that we always return
Eric Smith <eric@trueblade.com>
parents:
42948
diff
changeset
|
236 # object to format and output |
|
0e510aff5e9a
Modified parsing of format strings, so that we always return
Eric Smith <eric@trueblade.com>
parents:
42948
diff
changeset
|
237 # if field_name is not None, it is looked up, formatted |
|
0e510aff5e9a
Modified parsing of format strings, so that we always return
Eric Smith <eric@trueblade.com>
parents:
42948
diff
changeset
|
238 # with format_spec and conversion and then used |
|
42948
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
239 def parse(self, format_string): |
|
65291
fd044cda97d8
#9418: first step of moving private string methods to _string module.
Georg Brandl <georg@python.org>
parents:
64818
diff
changeset
|
240 return _string.formatter_parser(format_string) |
|
42948
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
241 |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
242 |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
243 # given a field_name, find the object it references. |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
244 # field_name: the field being looked up, e.g. "0.name" |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
245 # or "lookup[3]" |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
246 # used_args: a set of which args have been used |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
247 # args, kwargs: as passed in to vformat |
|
43200
463b341a9d63
Removed used_args param from string.Formatter.get_field. It was left in by mistake from an earlier edit.
Eric Smith <eric@trueblade.com>
parents:
43144
diff
changeset
|
248 def get_field(self, field_name, args, kwargs): |
|
65291
fd044cda97d8
#9418: first step of moving private string methods to _string module.
Georg Brandl <georg@python.org>
parents:
64818
diff
changeset
|
249 first, rest = _string.formatter_field_name_split(field_name) |
|
42948
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
250 |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
251 obj = self.get_value(first, args, kwargs) |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
252 |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
253 # loop through the rest of the field_name, doing |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
254 # getattr or getitem as needed |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
255 for is_attr, i in rest: |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
256 if is_attr: |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
257 obj = getattr(obj, i) |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
258 else: |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
259 obj = obj[i] |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
260 |
|
43112
90c715bc7d30
Changed signature of string.Formatter.get_field, per suggestion by
Eric Smith <eric@trueblade.com>
parents:
43020
diff
changeset
|
261 return obj, first |
