Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
ac37ba07
Commit
ac37ba07
authored
Aug 14, 2015
by
Robert Collins
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Issue #21159: Improve message in configparser.InterpolationMissingOptionError.
Patch from Łukasz Langa.
parent
4ce4f974
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
21 additions
and
18 deletions
+21
-18
Lib/configparser.py
Lib/configparser.py
+14
-15
Lib/test/test_configparser.py
Lib/test/test_configparser.py
+4
-3
Misc/NEWS
Misc/NEWS
+3
-0
No files found.
Lib/configparser.py
View file @
ac37ba07
...
...
@@ -241,12 +241,9 @@ class InterpolationMissingOptionError(InterpolationError):
"""A string substitution required a setting which was not available."""
def
__init__
(
self
,
option
,
section
,
rawval
,
reference
):
msg
=
(
"Bad value substitution:
\
n
"
"
\
t
section: [%s]
\
n
"
"
\
t
option : %s
\
n
"
"
\
t
key : %s
\
n
"
"
\
t
rawval : %s
\
n
"
%
(
section
,
option
,
reference
,
rawval
))
msg
=
(
"Bad value substitution: option {!r} in section {!r} contains "
"an interpolation key {!r} which is not a valid option name. "
"Raw value: {!r}"
.
format
(
option
,
section
,
reference
,
rawval
))
InterpolationError
.
__init__
(
self
,
option
,
section
,
msg
)
self
.
reference
=
reference
self
.
args
=
(
option
,
section
,
rawval
,
reference
)
...
...
@@ -264,11 +261,11 @@ class InterpolationDepthError(InterpolationError):
"""Raised when substitutions are nested too deeply."""
def
__init__
(
self
,
option
,
section
,
rawval
):
msg
=
(
"
Value interpolation too deeply recursive:
\
n
"
"
\
t
section: [%s]
\
n
"
"
\
t
option : %s
\
n
"
"
\
t
rawval : %s
\
n
"
%
(
section
,
option
,
rawval
))
msg
=
(
"
Recursion limit exceeded in value substitution: option {!r}
"
"
in section {!r} contains an interpolation key which
"
"
cannot be substituted in {} steps. Raw value: {!r}
"
"
"
.
format
(
option
,
section
,
MAX_INTERPOLATION_DEPTH
,
rawval
))
InterpolationError
.
__init__
(
self
,
option
,
section
,
msg
)
self
.
args
=
(
option
,
section
,
rawval
)
...
...
@@ -384,8 +381,9 @@ class BasicInterpolation(Interpolation):
def
_interpolate_some
(
self
,
parser
,
option
,
accum
,
rest
,
section
,
map
,
depth
):
rawval
=
parser
.
get
(
section
,
option
,
raw
=
True
,
fallback
=
rest
)
if
depth
>
MAX_INTERPOLATION_DEPTH
:
raise
InterpolationDepthError
(
option
,
section
,
r
est
)
raise
InterpolationDepthError
(
option
,
section
,
r
awval
)
while
rest
:
p
=
rest
.
find
(
"%"
)
if
p
<
0
:
...
...
@@ -410,7 +408,7 @@ class BasicInterpolation(Interpolation):
v
=
map
[
var
]
except
KeyError
:
raise
InterpolationMissingOptionError
(
option
,
section
,
r
est
,
var
)
option
,
section
,
r
awval
,
var
)
if
"%"
in
v
:
self
.
_interpolate_some
(
parser
,
option
,
accum
,
v
,
section
,
map
,
depth
+
1
)
...
...
@@ -444,8 +442,9 @@ class ExtendedInterpolation(Interpolation):
def _interpolate_some(self, parser, option, accum, rest, section, map,
depth):
rawval = parser.get(section, option, raw=True, fallback=rest)
if depth > MAX_INTERPOLATION_DEPTH:
raise InterpolationDepthError(option, section, r
est
)
raise InterpolationDepthError(option, section, r
awval
)
while rest:
p = rest.find("
$
")
if p < 0:
...
...
@@ -482,7 +481,7 @@ class ExtendedInterpolation(Interpolation):
"
More
than
one
':'
found
:
%
r" % (rest,))
except (KeyError, NoSectionError, NoOptionError):
raise InterpolationMissingOptionError(
option, section, r
est
, "
:
".join(path))
option, section, r
awval
, "
:
".join(path))
if "
$
" in v:
self._interpolate_some(parser, opt, accum, v, sect,
dict(parser.items(sect, raw=True)),
...
...
Lib/test/test_configparser.py
View file @
ac37ba07
...
...
@@ -847,7 +847,8 @@ class ConfigParserTestCase(BasicTestCase, unittest.TestCase):
"something with lots of interpolation (10 steps)"
)
e
=
self
.
get_error
(
cf
,
configparser
.
InterpolationDepthError
,
"Foo"
,
"bar11"
)
if
self
.
interpolation
==
configparser
.
_UNSET
:
self
.
assertEqual
(
e
.
args
,
(
"bar11"
,
"Foo"
,
"%(with1)s"
))
self
.
assertEqual
(
e
.
args
,
(
"bar11"
,
"Foo"
,
"something %(with11)s lots of interpolation (11 steps)"
))
elif
isinstance
(
self
.
interpolation
,
configparser
.
LegacyInterpolation
):
self
.
assertEqual
(
e
.
args
,
(
"bar11"
,
"Foo"
,
"something %(with11)s lots of interpolation (11 steps)"
))
...
...
@@ -861,7 +862,7 @@ class ConfigParserTestCase(BasicTestCase, unittest.TestCase):
self
.
assertEqual
(
e
.
option
,
"name"
)
if
self
.
interpolation
==
configparser
.
_UNSET
:
self
.
assertEqual
(
e
.
args
,
(
'name'
,
'Interpolation Error'
,
''
,
'reference'
))
'
%(reference)s
'
,
'reference'
))
elif
isinstance
(
self
.
interpolation
,
configparser
.
LegacyInterpolation
):
self
.
assertEqual
(
e
.
args
,
(
'name'
,
'Interpolation Error'
,
'%(reference)s'
,
'reference'
))
...
...
@@ -1177,7 +1178,7 @@ class ConfigParserTestCaseExtendedInterpolation(BasicTestCase, unittest.TestCase
with
self
.
assertRaises
(
exception_class
)
as
cm
:
cf
[
'interpolated'
][
'$trying'
]
self
.
assertEqual
(
cm
.
exception
.
reference
,
'dollars:${sick'
)
self
.
assertEqual
(
cm
.
exception
.
args
[
2
],
'}'
)
#rawval
self
.
assertEqual
(
cm
.
exception
.
args
[
2
],
'
${dollars:${sick}
}'
)
#rawval
def
test_case_sensitivity_basic
(
self
):
ini
=
textwrap
.
dedent
(
"""
...
...
Misc/NEWS
View file @
ac37ba07
...
...
@@ -75,6 +75,9 @@ Core and Builtins
Library
-------
-
Issue
#
21159
:
Improve
message
in
configparser
.
InterpolationMissingOptionError
.
Patch
from
Ł
ukasz
Langa
.
-
Issue
#
23888
:
Handle
fractional
time
in
cookie
expiry
.
Patch
by
ssh
.
-
Issue
#
23004
:
mock_open
()
now
reads
binary
data
correctly
when
the
type
of
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment