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
0dc5ab41
Commit
0dc5ab41
authored
Dec 31, 2012
by
Łukasz Langa
Browse files
Options
Browse Files
Download
Plain Diff
Merged `parser.clean()` fix (issue #16820) from 3.2.
parents
97eefc10
c7ce3f7b
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
48 additions
and
1 deletion
+48
-1
Doc/library/configparser.rst
Doc/library/configparser.rst
+7
-1
Lib/configparser.py
Lib/configparser.py
+13
-0
Lib/test/test_configparser.py
Lib/test/test_configparser.py
+27
-0
Misc/ACKS
Misc/ACKS
+1
-0
No files found.
Doc/library/configparser.rst
View file @
0dc5ab41
...
...
@@ -389,7 +389,13 @@ However, there are a few differences that should be taken into account:
the default value to be visible again. Trying to delete a default value
causes a ``KeyError``.
* Trying to delete the ``DEFAULTSECT`` raises ``ValueError``.
* ``DEFAULTSECT`` cannot be removed from the parser:
* trying to delete it raises ``ValueError``,
* ``parser.clear()`` leaves it intact,
* ``parser.popitem()`` never returns it.
* ``parser.get(section, option, **kwargs)`` - the second argument is **not**
a fallback value. Note however that the section-level ``get()`` methods are
...
...
Lib/configparser.py
View file @
0dc5ab41
...
...
@@ -852,6 +852,19 @@ class RawConfigParser(MutableMapping):
value_getter = lambda option: d[option]
return [(option, value_getter(option)) for option in d.keys()]
def popitem(self):
"""Remove a section from the parser and return it as
a (section_name, section_proxy) tuple. If no section is present, raise
KeyError.
The section DEFAULT is never returned because it cannot be removed.
"""
for key in self.sections():
value = self[key]
del self[key]
return key, value
raise KeyError
def optionxform(self, optionstr):
return optionstr.lower()
...
...
Lib/test/test_configparser.py
View file @
0dc5ab41
...
...
@@ -770,6 +770,33 @@ boolean {0[0]} NO
with
self
.
assertRaises
(
configparser
.
NoSectionError
):
cf
.
items
(
"no such section"
)
def
test_popitem
(
self
):
cf
=
self
.
fromstring
(
"""
[section1]
name1 {0[0]} value1
[section2]
name2 {0[0]} value2
[section3]
name3 {0[0]} value3
"""
.
format
(
self
.
delimiters
),
defaults
=
{
"default"
:
"<default>"
})
self
.
assertEqual
(
cf
.
popitem
()[
0
],
'section1'
)
self
.
assertEqual
(
cf
.
popitem
()[
0
],
'section2'
)
self
.
assertEqual
(
cf
.
popitem
()[
0
],
'section3'
)
with
self
.
assertRaises
(
KeyError
):
cf
.
popitem
()
def
test_clear
(
self
):
cf
=
self
.
newconfig
({
"foo"
:
"Bar"
})
self
.
assertEqual
(
cf
.
get
(
self
.
default_section
,
"Foo"
),
"Bar"
,
"could not locate option, expecting case-insensitive option names"
)
cf
[
'zing'
]
=
{
'option1'
:
'value1'
,
'option2'
:
'value2'
}
self
.
assertEqual
(
cf
.
sections
(),
[
'zing'
])
self
.
assertEqual
(
set
(
cf
[
'zing'
].
keys
()),
{
'option1'
,
'option2'
,
'foo'
})
cf
.
clear
()
self
.
assertEqual
(
set
(
cf
.
sections
()),
set
())
self
.
assertEqual
(
set
(
cf
[
self
.
default_section
].
keys
()),
{
'foo'
})
class
StrictTestCase
(
BasicTestCase
):
config_class
=
configparser
.
RawConfigParser
...
...
Misc/ACKS
View file @
0dc5ab41
...
...
@@ -1049,6 +1049,7 @@ Michael Scharf
Andreas Schawo
Neil Schemenauer
David Scherer
Wolfgang Scherer
Hynek Schlawack
Bob Schmertz
Gregor Schmid
...
...
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