mirror of
https://github.com/python/cpython.git
synced 2025-09-27 10:50:04 +00:00
Merge remote
This commit is contained in:
commit
31196dd7d0
2 changed files with 51 additions and 6 deletions
|
@ -993,18 +993,26 @@ class RawConfigParser(MutableMapping):
|
||||||
indent_level = 0
|
indent_level = 0
|
||||||
e = None # None, or an exception
|
e = None # None, or an exception
|
||||||
for lineno, line in enumerate(fp, start=1):
|
for lineno, line in enumerate(fp, start=1):
|
||||||
comment_start = None
|
comment_start = sys.maxsize
|
||||||
# strip inline comments
|
# strip inline comments
|
||||||
for prefix in self._inline_comment_prefixes:
|
inline_prefixes = {p: -1 for p in self._inline_comment_prefixes}
|
||||||
index = line.find(prefix)
|
while comment_start == sys.maxsize and inline_prefixes:
|
||||||
if index == 0 or (index > 0 and line[index-1].isspace()):
|
next_prefixes = {}
|
||||||
comment_start = index
|
for prefix, index in inline_prefixes.items():
|
||||||
break
|
index = line.find(prefix, index+1)
|
||||||
|
if index == -1:
|
||||||
|
continue
|
||||||
|
next_prefixes[prefix] = index
|
||||||
|
if index == 0 or (index > 0 and line[index-1].isspace()):
|
||||||
|
comment_start = min(comment_start, index)
|
||||||
|
inline_prefixes = next_prefixes
|
||||||
# strip full line comments
|
# strip full line comments
|
||||||
for prefix in self._comment_prefixes:
|
for prefix in self._comment_prefixes:
|
||||||
if line.strip().startswith(prefix):
|
if line.strip().startswith(prefix):
|
||||||
comment_start = 0
|
comment_start = 0
|
||||||
break
|
break
|
||||||
|
if comment_start == sys.maxsize:
|
||||||
|
comment_start = None
|
||||||
value = line[:comment_start].strip()
|
value = line[:comment_start].strip()
|
||||||
if not value:
|
if not value:
|
||||||
if self._empty_lines_in_values:
|
if self._empty_lines_in_values:
|
||||||
|
|
|
@ -1618,6 +1618,42 @@ class ExceptionPicklingTestCase(unittest.TestCase):
|
||||||
self.assertEqual(repr(e1), repr(e2))
|
self.assertEqual(repr(e1), repr(e2))
|
||||||
|
|
||||||
|
|
||||||
|
class InlineCommentStrippingTestCase(unittest.TestCase):
|
||||||
|
"""Tests for issue #14590: ConfigParser doesn't strip inline comment when
|
||||||
|
delimiter occurs earlier without preceding space.."""
|
||||||
|
|
||||||
|
def test_stripping(self):
|
||||||
|
cfg = configparser.ConfigParser(inline_comment_prefixes=(';', '#',
|
||||||
|
'//'))
|
||||||
|
cfg.read_string("""
|
||||||
|
[section]
|
||||||
|
k1 = v1;still v1
|
||||||
|
k2 = v2 ;a comment
|
||||||
|
k3 = v3 ; also a comment
|
||||||
|
k4 = v4;still v4 ;a comment
|
||||||
|
k5 = v5;still v5 ; also a comment
|
||||||
|
k6 = v6;still v6; and still v6 ;a comment
|
||||||
|
k7 = v7;still v7; and still v7 ; also a comment
|
||||||
|
|
||||||
|
[multiprefix]
|
||||||
|
k1 = v1;still v1 #a comment ; yeah, pretty much
|
||||||
|
k2 = v2 // this already is a comment ; continued
|
||||||
|
k3 = v3;#//still v3# and still v3 ; a comment
|
||||||
|
""")
|
||||||
|
s = cfg['section']
|
||||||
|
self.assertEqual(s['k1'], 'v1;still v1')
|
||||||
|
self.assertEqual(s['k2'], 'v2')
|
||||||
|
self.assertEqual(s['k3'], 'v3')
|
||||||
|
self.assertEqual(s['k4'], 'v4;still v4')
|
||||||
|
self.assertEqual(s['k5'], 'v5;still v5')
|
||||||
|
self.assertEqual(s['k6'], 'v6;still v6; and still v6')
|
||||||
|
self.assertEqual(s['k7'], 'v7;still v7; and still v7')
|
||||||
|
s = cfg['multiprefix']
|
||||||
|
self.assertEqual(s['k1'], 'v1;still v1')
|
||||||
|
self.assertEqual(s['k2'], 'v2')
|
||||||
|
self.assertEqual(s['k3'], 'v3;#//still v3# and still v3')
|
||||||
|
|
||||||
|
|
||||||
def test_main():
|
def test_main():
|
||||||
support.run_unittest(
|
support.run_unittest(
|
||||||
ConfigParserTestCase,
|
ConfigParserTestCase,
|
||||||
|
@ -1640,4 +1676,5 @@ def test_main():
|
||||||
ReadFileTestCase,
|
ReadFileTestCase,
|
||||||
CoverageOneHundredTestCase,
|
CoverageOneHundredTestCase,
|
||||||
ExceptionPicklingTestCase,
|
ExceptionPicklingTestCase,
|
||||||
|
InlineCommentStrippingTestCase,
|
||||||
)
|
)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue