Mercurial > cpython-lru_cache-weakref
annotate Lib/string.py @ 64158:ea0decd2acfb
Fix typo
| author | Éric Araujo <merwok@netwok.org> |
|---|---|
| date | Wed, 18 Aug 2010 22:35:23 +0000 |
| parents | 91cbb55e20be |
| children | b306105bf83d |
| 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 |
| 5 | 17 # 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
|
18 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
|
19 ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz' |
|
b623777f22b0
Remove string.{letters,lowercase,uppercase}.
Martin v. Löwis <martin@v.loewis.de>
parents:
42142
diff
changeset
|
20 ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' |
|
18776
22b2f4b436af
Added the constants ascii_letters, ascii_lowercase, and ascii_uppercase
Fred Drake <fdrake@acm.org>
parents:
16657
diff
changeset
|
21 ascii_letters = ascii_lowercase + ascii_uppercase |
| 5 | 22 digits = '0123456789' |
| 23 hexdigits = digits + 'abcdef' + 'ABCDEF' | |
| 24 octdigits = '01234567' | |
|
15872
3685ef2a55a4
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
15610
diff
changeset
|
25 punctuation = """!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~""" |
|
42585
b623777f22b0
Remove string.{letters,lowercase,uppercase}.
Martin v. Löwis <martin@v.loewis.de>
parents:
42142
diff
changeset
|
26 printable = digits + ascii_letters + punctuation + whitespace |
| 5 | 27 |
|
33257
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
28 # 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
|
29 |
|
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
30 # 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
|
31 def capwords(s, sep=None): |
|
56232
2006a2f4812d
Merged revisions 75070 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
54939
diff
changeset
|
32 """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
|
33 |
|
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
34 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
|
35 word using capitalize, and join the capitalized words using |
|
56232
2006a2f4812d
Merged revisions 75070 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
54939
diff
changeset
|
36 join. If the optional second argument sep is absent or None, |
|
2006a2f4812d
Merged revisions 75070 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
54939
diff
changeset
|
37 runs of whitespace characters are replaced by a single space |
|
2006a2f4812d
Merged revisions 75070 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
54939
diff
changeset
|
38 and leading and trailing whitespace are removed, otherwise |
|
2006a2f4812d
Merged revisions 75070 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
54939
diff
changeset
|
39 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
|
40 |
|
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
41 """ |
|
56232
2006a2f4812d
Merged revisions 75070 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
54939
diff
changeset
|
42 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
|
43 |
|
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
44 |
|
33278
2b136441035c
Minor improvements to the template code.
Raymond Hettinger <python@rcn.com>
parents:
33257
diff
changeset
|
45 #################################################################### |
|
33257
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
46 import re as _re |
|
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
47 |
|
33471
41dbee5ed295
Accepted Raymond's patch to combine mapping and keyword arguments, with slight
Barry Warsaw <barry@python.org>
parents:
33450
diff
changeset
|
48 class _multimap: |
|
41dbee5ed295
Accepted Raymond's patch to combine mapping and keyword arguments, with slight
Barry Warsaw <barry@python.org>
parents:
33450
diff
changeset
|
49 """Helper class for combining multiple mappings. |
|
41dbee5ed295
Accepted Raymond's patch to combine mapping and keyword arguments, with slight
Barry Warsaw <barry@python.org>
parents:
33450
diff
changeset
|
50 |
|
41dbee5ed295
Accepted Raymond's patch to combine mapping and keyword arguments, with slight
Barry Warsaw <barry@python.org>
parents:
33450
diff
changeset
|
51 Used by .{safe_,}substitute() to combine the mapping and keyword |
|
41dbee5ed295
Accepted Raymond's patch to combine mapping and keyword arguments, with slight
Barry Warsaw <barry@python.org>
parents:
33450
diff
changeset
|
52 arguments. |
|
41dbee5ed295
Accepted Raymond's patch to combine mapping and keyword arguments, with slight
Barry Warsaw <barry@python.org>
parents:
33450
diff
changeset
|
53 """ |
|
41dbee5ed295
Accepted Raymond's patch to combine mapping and keyword arguments, with slight
Barry Warsaw <barry@python.org>
parents:
33450
diff
changeset
|
54 def __init__(self, primary, secondary): |
|
41dbee5ed295
Accepted Raymond's patch to combine mapping and keyword arguments, with slight
Barry Warsaw <barry@python.org>
parents:
33450
diff
changeset
|
55 self._primary = primary |
|
41dbee5ed295
Accepted Raymond's patch to combine mapping and keyword arguments, with slight
Barry Warsaw <barry@python.org>
parents:
33450
diff
changeset
|
56 self._secondary = secondary |
|
41dbee5ed295
Accepted Raymond's patch to combine mapping and keyword arguments, with slight
Barry Warsaw <barry@python.org>
parents:
33450
diff
changeset
|
57 |
|
41dbee5ed295
Accepted Raymond's patch to combine mapping and keyword arguments, with slight
Barry Warsaw <barry@python.org>
parents:
33450
diff
changeset
|
58 def __getitem__(self, key): |
|
41dbee5ed295
Accepted Raymond's patch to combine mapping and keyword arguments, with slight
Barry Warsaw <barry@python.org>
parents:
33450
diff
changeset
|
59 try: |
|
41dbee5ed295
Accepted Raymond's patch to combine mapping and keyword arguments, with slight
Barry Warsaw <barry@python.org>
parents:
33450
diff
changeset
|
60 return self._primary[key] |
|
41dbee5ed295
Accepted Raymond's patch to combine mapping and keyword arguments, with slight
Barry Warsaw <barry@python.org>
parents:
33450
diff
changeset
|
61 except KeyError: |
|
41dbee5ed295
Accepted Raymond's patch to combine mapping and keyword arguments, with slight
Barry Warsaw <barry@python.org>
parents:
33450
diff
changeset
|
62 return self._secondary[key] |
|
41dbee5ed295
Accepted Raymond's patch to combine mapping and keyword arguments, with slight
Barry Warsaw <barry@python.org>
parents:
33450
diff
changeset
|
63 |
|
41dbee5ed295
Accepted Raymond's patch to combine mapping and keyword arguments, with slight
Barry Warsaw <barry@python.org>
parents:
33450
diff
changeset
|
64 |
|
33439
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
65 class _TemplateMetaclass(type): |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
66 pattern = r""" |
|
33588
68d11e439a0b
Make the regex pattern easier to read, understand, and modify
Raymond Hettinger <python@rcn.com>
parents:
33505
diff
changeset
|
67 %(delim)s(?: |
|
68d11e439a0b
Make the regex pattern easier to read, understand, and modify
Raymond Hettinger <python@rcn.com>
parents:
33505
diff
changeset
|
68 (?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
|
69 (?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
|
70 {(?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
|
71 (?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
|
72 ) |
|
33439
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
73 """ |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
74 |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
75 def __init__(cls, name, bases, dct): |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
76 super(_TemplateMetaclass, cls).__init__(name, bases, dct) |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
77 if 'pattern' in dct: |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
78 pattern = cls.pattern |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
79 else: |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
80 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
|
81 'delim' : _re.escape(cls.delimiter), |
|
33439
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
82 'id' : cls.idpattern, |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
83 } |
|
63295
91cbb55e20be
#6630: allow customizing flags for compiling string.Template.idpattern.
Georg Brandl <georg@python.org>
parents:
56232
diff
changeset
|
84 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
|
85 |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
86 |
|
41226
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
40644
diff
changeset
|
87 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
|
88 """A string class for supporting $-substitutions.""" |
|
33439
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
89 |
|
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
|
90 delimiter = '$' |
|
33439
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
91 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
|
92 flags = _re.IGNORECASE |
|
33439
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
93 |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
94 def __init__(self, template): |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
95 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
|
96 |
|
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
97 # 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
|
98 |
|
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
|
99 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
|
100 i = mo.start('invalid') |
|
33439
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
101 lines = self.template[:i].splitlines(True) |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
102 if not lines: |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
103 colno = 1 |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
104 lineno = 1 |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
105 else: |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
106 colno = i - len(''.join(lines[:-1])) |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
107 lineno = len(lines) |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
108 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
|
109 (lineno, colno)) |
|
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
110 |
|
33477
a220073536d6
substitute(), safe_substitute(): Paul Moore provides a better hack for dealing
Barry Warsaw <barry@python.org>
parents:
33471
diff
changeset
|
111 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
|
112 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
|
113 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
|
114 if not args: |
|
a220073536d6
substitute(), safe_substitute(): Paul Moore provides a better hack for dealing
Barry Warsaw <barry@python.org>
parents:
33471
diff
changeset
|
115 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
|
116 elif kws: |
|
33477
a220073536d6
substitute(), safe_substitute(): Paul Moore provides a better hack for dealing
Barry Warsaw <barry@python.org>
parents:
33471
diff
changeset
|
117 mapping = _multimap(kws, args[0]) |
|
a220073536d6
substitute(), safe_substitute(): Paul Moore provides a better hack for dealing
Barry Warsaw <barry@python.org>
parents:
33471
diff
changeset
|
118 else: |
|
a220073536d6
substitute(), safe_substitute(): Paul Moore provides a better hack for dealing
Barry Warsaw <barry@python.org>
parents:
33471
diff
changeset
|
119 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
|
120 # 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
|
121 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
|
122 # 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
|
123 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
|
124 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
|
125 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
|
126 # 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
|
127 # 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
|
128 return '%s' % (val,) |
|
33278
2b136441035c
Minor improvements to the template code.
Raymond Hettinger <python@rcn.com>
parents:
33257
diff
changeset
|
129 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
|
130 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
|
131 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
|
132 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
|
133 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
|
134 self.pattern) |
|
33439
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
135 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
|
136 |
|
33477
a220073536d6
substitute(), safe_substitute(): Paul Moore provides a better hack for dealing
Barry Warsaw <barry@python.org>
parents:
33471
diff
changeset
|
137 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
|
138 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
|
139 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
|
140 if not args: |
|
a220073536d6
substitute(), safe_substitute(): Paul Moore provides a better hack for dealing
Barry Warsaw <barry@python.org>
parents:
33471
diff
changeset
|
141 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
|
142 elif kws: |
|
33477
a220073536d6
substitute(), safe_substitute(): Paul Moore provides a better hack for dealing
Barry Warsaw <barry@python.org>
parents:
33471
diff
changeset
|
143 mapping = _multimap(kws, args[0]) |
|
a220073536d6
substitute(), safe_substitute(): Paul Moore provides a better hack for dealing
Barry Warsaw <barry@python.org>
parents:
33471
diff
changeset
|
144 else: |
|
a220073536d6
substitute(), safe_substitute(): Paul Moore provides a better hack for dealing
Barry Warsaw <barry@python.org>
parents:
33471
diff
changeset
|
145 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
|
146 # 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
|
147 def convert(mo): |
|
33278
2b136441035c
Minor improvements to the template code.
Raymond Hettinger <python@rcn.com>
parents:
33257
diff
changeset
|
148 named = mo.group('named') |
|
33257
11a4fbc88a80
PEP 292 classes Template and SafeTemplate are added to the string module.
Barry Warsaw <barry@python.org>
parents:
31199
diff
changeset
|
149 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
|
150 try: |
|
33439
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
151 # 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
|
152 # 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
|
153 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
|
154 except KeyError: |
|
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
|
155 return self.delimiter + named |
|
33278
2b136441035c
Minor improvements to the template code.
Raymond Hettinger <python@rcn.com>
parents:
33257
diff
changeset
|
156 braced = mo.group('braced') |
|
33482
2623668c5ff5
Fix small bugs in Template code.
Raymond Hettinger <python@rcn.com>
parents:
33479
diff
changeset
|
157 if braced is not None: |
|
2623668c5ff5
Fix small bugs in Template code.
Raymond Hettinger <python@rcn.com>
parents:
33479
diff
changeset
|
158 try: |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
34127
diff
changeset
|
159 return '%s' % (mapping[braced],) |
|
33482
2623668c5ff5
Fix small bugs in Template code.
Raymond Hettinger <python@rcn.com>
parents:
33479
diff
changeset
|
160 except KeyError: |
|
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
|
161 return self.delimiter + '{' + braced + '}' |
|
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
|
162 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
|
163 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
|
164 if mo.group('invalid') is not None: |
|
33871
5afa5277fcd9
SF patch #1056967, changes the semantics of Template.safe_substitute() to not
Barry Warsaw <barry@python.org>
parents:
33773
diff
changeset
|
165 return self.delimiter |
|
33773
ab09daac5691
Invalid patterns to substitute and safe_substitute would crash since pattern
Neal Norwitz <nnorwitz@gmail.com>
parents:
33588
diff
changeset
|
166 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
|
167 self.pattern) |
|
33439
629200d880ea
Many updates to PEP 292 templates. Summary:
Barry Warsaw <barry@python.org>
parents:
33278
diff
changeset
|
168 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
|
169 |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
170 |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
171 |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
172 ######################################################################## |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
173 # the Formatter class |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
174 # 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
|
175 |
|
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
|
176 # The hard parts are reused from the C implementation. They're exposed as "_" |
|
b0fcb17f7efa
Merged revisions 67154,67157-67159,67175-67176,67189,67224-67227,67234 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
43947
diff
changeset
|
177 # prefixed methods of str and unicode. |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
178 |
|
42896
7bf8f2339ec6
PEP 3101: Removed _formatter_xxx routines from sysmodule, and made them unicode methods instead (per GvR suggestion).
Eric Smith <eric@trueblade.com>
parents:
42875
diff
changeset
|
179 # The overall parser is implemented in str._formatter_parser. |
|
7bf8f2339ec6
PEP 3101: Removed _formatter_xxx routines from sysmodule, and made them unicode methods instead (per GvR suggestion).
Eric Smith <eric@trueblade.com>
parents:
42875
diff
changeset
|
180 # The field name parser is implemented in str._formatter_field_name_split |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
181 |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
182 class Formatter: |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
183 def format(self, format_string, *args, **kwargs): |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
184 return self.vformat(format_string, args, kwargs) |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
185 |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
186 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
|
187 used_args = set() |
|
43241
e946073dee38
Changed some ValueError's to KeyError and IndexError.
Eric Smith <eric@trueblade.com>
parents:
43200
diff
changeset
|
188 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
|
189 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
|
190 return result |
|
e946073dee38
Changed some ValueError's to KeyError and IndexError.
Eric Smith <eric@trueblade.com>
parents:
43200
diff
changeset
|
191 |
|
e946073dee38
Changed some ValueError's to KeyError and IndexError.
Eric Smith <eric@trueblade.com>
parents:
43200
diff
changeset
|
192 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
|
193 if recursion_depth < 0: |
|
e946073dee38
Changed some ValueError's to KeyError and IndexError.
Eric Smith <eric@trueblade.com>
parents:
43200
diff
changeset
|
194 raise ValueError('Max string recursion exceeded') |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
195 result = [] |
|
42948
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
196 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
|
197 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
|
198 |
|
0e510aff5e9a
Modified parsing of format strings, so that we always return
Eric Smith <eric@trueblade.com>
parents:
42948
diff
changeset
|
199 # output the literal text |
|
0e510aff5e9a
Modified parsing of format strings, so that we always return
Eric Smith <eric@trueblade.com>
parents:
42948
diff
changeset
|
200 if literal_text: |
|
0e510aff5e9a
Modified parsing of format strings, so that we always return
Eric Smith <eric@trueblade.com>
parents:
42948
diff
changeset
|
201 result.append(literal_text) |
|
0e510aff5e9a
Modified parsing of format strings, so that we always return
Eric Smith <eric@trueblade.com>
parents:
42948
diff
changeset
|
202 |
|
0e510aff5e9a
Modified parsing of format strings, so that we always return
Eric Smith <eric@trueblade.com>
parents:
42948
diff
changeset
|
203 # 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
|
204 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
|
205 # 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
|
206 # 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
|
207 |
|
42948
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
208 # 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
|
209 # 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
|
210 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
|
211 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
|
212 |
|
5fd65e250843
PEP 3101: Completed string.Formatter class. Reimplemented field_name to object transformation.
Eric Smith <eric@trueblade.com>
parents:
42817
diff
changeset
|
213 # 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
|
214 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
|
215 |
|
43241
e946073dee38
Changed some ValueError's to KeyError and IndexError.
Eric Smith <eric@trueblade.com>
parents:
43200
diff
changeset
|
216 # expand the format spec, if needed |
|
e946073dee38
Changed some ValueError's to KeyError and IndexError.
Eric Smith <eric@trueblade.com>
parents:
43200
diff
changeset
|
217 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
|
218 used_args, recursion_depth-1) |
|
e946073dee38
Changed some ValueError's to KeyError and IndexError.
Eric Smith <eric@trueblade.com>
parents:
43200
diff
changeset
|
219 |
|
42875
5fd65e250843
PEP 3101: Completed string.Formatter class. Reimplemented field_name to object transformation.
Eric Smith <eric@trueblade.com>
parents:
42817
diff
changeset
|
220 # 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
|
221 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
|
222 |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
223 return ''.join(result) |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
224 |
|
42948
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
225 |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
226 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
|
227 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
|
228 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
|
229 else: |
|
5fd65e250843
PEP 3101: Completed string.Formatter class. Reimplemented field_name to object transformation.
Eric Smith <eric@trueblade.com>
parents:
42817
diff
changeset
|
230 return kwargs[key] |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
231 |
|
42948
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
232 |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
233 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
|
234 pass |
|
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
235 |
|
42948
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
236 |
|
42817
5355337709e1
Implementation of PEP 3101, Advanced String Formatting.
Eric Smith <eric@trueblade.com>
parents:
42585
diff
changeset
|
237 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
|
238 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
|
239 |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
240 |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
241 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
|
242 # 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
|
243 if conversion == 'r': |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
244 return repr(value) |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
245 elif conversion == 's': |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
246 return str(value) |
|
43241
e946073dee38
Changed some ValueError's to KeyError and IndexError.
Eric Smith <eric@trueblade.com>
parents:
43200
diff
changeset
|
247 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
|
248 return value |
|
43241
e946073dee38
Changed some ValueError's to KeyError and IndexError.
Eric Smith <eric@trueblade.com>
parents:
43200
diff
changeset
|
249 raise ValueError("Unknown converion 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
|
250 |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
251 |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
252 # 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
|
253 # (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
|
254 # 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
|
255 # 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
|
256 # 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
|
257 # 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
|
258 # 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
|
259 def parse(self, format_string): |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
260 return format_string._formatter_parser() |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
261 |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
262 |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
263 # 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
|
264 # 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
|
265 # or "lookup[3]" |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
266 # 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
|
267 # 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
|
268 def get_field(self, field_name, args, kwargs): |
|
42948
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
269 first, rest = field_name._formatter_field_name_split() |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
270 |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
271 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
|
272 |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
273 # 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
|
274 # 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
|
275 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
|
276 if is_attr: |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
277 obj = getattr(obj, i) |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
278 else: |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
279 obj = obj[i] |
|
4ecbae07481f
Simplified tuple returned by string._formatter_parser to only have
Eric Smith <eric@trueblade.com>
parents:
42896
diff
changeset
|
280 |
|
43112
90c715bc7d30
Changed signature of string.Formatter.get_field, per suggestion by
Eric Smith <eric@trueblade.com>
parents:
43020
diff
changeset
|
281 return obj, first |
