mirror of https://github.com/python/cpython
Allow internal whitespace in keys.
Closes SF bug #583248; backporting to r22-maint branch.
This commit is contained in:
parent
2ca041fde0
commit
176916a989
|
@ -418,7 +418,7 @@ class ConfigParser:
|
|||
r'\]' # ]
|
||||
)
|
||||
OPTCRE = re.compile(
|
||||
r'(?P<option>[^:=\s]+)' # very permissive!
|
||||
r'(?P<option>[^:=\s][^:=]*)' # very permissive!
|
||||
r'\s*(?P<vi>[:=])\s*' # any number of space/tab,
|
||||
# followed by separator
|
||||
# (either : or =), followed
|
||||
|
@ -448,7 +448,8 @@ class ConfigParser:
|
|||
# comment or blank line?
|
||||
if line.strip() == '' or line[0] in '#;':
|
||||
continue
|
||||
if line.split(None, 1)[0].lower() == 'rem' and line[0] in "rR": # no leading whitespace
|
||||
if line.split(None, 1)[0].lower() == 'rem' and line[0] in "rR":
|
||||
# no leading whitespace
|
||||
continue
|
||||
# continuation line?
|
||||
if line[0].isspace() and cursect is not None and optname:
|
||||
|
@ -488,7 +489,7 @@ class ConfigParser:
|
|||
# allow empty values
|
||||
if optval == '""':
|
||||
optval = ''
|
||||
optname = self.optionxform(optname)
|
||||
optname = self.optionxform(optname.rstrip())
|
||||
cursect[optname] = optval
|
||||
else:
|
||||
# a non-fatal parsing error occurred. set up the
|
||||
|
|
|
@ -16,6 +16,7 @@ def basic(src):
|
|||
r'Internationalized Stuff',
|
||||
r'Long Line',
|
||||
r'Section\with$weird%characters[' '\t',
|
||||
r'Spaces',
|
||||
r'Spacey Bar',
|
||||
],
|
||||
"unexpected list of section names")
|
||||
|
@ -26,6 +27,8 @@ def basic(src):
|
|||
verify(cf.get('Foo Bar', 'foo', raw=1) == 'bar')
|
||||
verify(cf.get('Spacey Bar', 'foo', raw=1) == 'bar')
|
||||
verify(cf.get('Commented Bar', 'foo', raw=1) == 'bar')
|
||||
verify(cf.get('Spaces', 'key with spaces', raw=1) == 'value')
|
||||
verify(cf.get('Spaces', 'another with spaces', raw=1) == 'splat!')
|
||||
|
||||
verify('__name__' not in cf.options("Foo Bar"),
|
||||
'__name__ "option" should not be exposed by the API!')
|
||||
|
@ -225,6 +228,9 @@ foo[bg]: Bulgarian
|
|||
foo=Default
|
||||
foo[en]=English
|
||||
foo[de]=Deutsch
|
||||
[Spaces]
|
||||
key with spaces : value
|
||||
another with spaces = splat!
|
||||
""")
|
||||
write("""[Long Line]
|
||||
foo: this line is much, much longer than my editor
|
||||
|
|
Loading…
Reference in New Issue