Skip to content

Commit

Permalink
correct parse_qs and parse_qsl test case descriptions. (#968) (#998)
Browse files Browse the repository at this point in the history
(cherry picked from commit 257b980)
  • Loading branch information
orsenthil committed Apr 5, 2017
1 parent 846bd39 commit 2d8bda5
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 19 deletions.
12 changes: 6 additions & 6 deletions Lib/test/test_urlparse.py
Expand Up @@ -6,8 +6,8 @@
RFC3986_BASE = 'http://a/b/c/d;p?q'
SIMPLE_BASE = 'http://a/b/c/d'

# A list of test cases. Each test case is a two-tuple that contains
# a string with the query and a dictionary with the expected result.
# Each parse_qsl testcase is a two-tuple that contains
# a string with the query and a list with the expected result.

parse_qsl_test_cases = [
("", []),
Expand Down Expand Up @@ -42,6 +42,9 @@
(b"a=1;a=2", [(b'a', b'1'), (b'a', b'2')]),
]

# Each parse_qs testcase is a two-tuple that contains
# a string with the query and a dictionary with the expected result.

parse_qs_test_cases = [
("", {}),
("&", {}),
Expand Down Expand Up @@ -290,7 +293,6 @@ def test_RFC2368(self):
def test_RFC2396(self):
# cases from RFC 2396


self.checkJoin(RFC2396_BASE, 'g:h', 'g:h')
self.checkJoin(RFC2396_BASE, 'g', 'http://a/b/c/g')
self.checkJoin(RFC2396_BASE, './g', 'http://a/b/c/g')
Expand Down Expand Up @@ -333,9 +335,7 @@ def test_RFC2396(self):
# self.checkJoin(RFC2396_BASE, '/./g', 'http://a/./g')
# self.checkJoin(RFC2396_BASE, '/../g', 'http://a/../g')


def test_RFC3986(self):
# Test cases from RFC3986
self.checkJoin(RFC3986_BASE, '?y','http://a/b/c/d;p?y')
self.checkJoin(RFC3986_BASE, ';x', 'http://a/b/c/;x')
self.checkJoin(RFC3986_BASE, 'g:h','g:h')
Expand Down Expand Up @@ -363,7 +363,7 @@ def test_RFC3986(self):
self.checkJoin(RFC3986_BASE, '../../g','http://a/g')
self.checkJoin(RFC3986_BASE, '../../../g', 'http://a/g')

#Abnormal Examples
# Abnormal Examples

# The 'abnormal scenarios' are incompatible with RFC2986 parsing
# Tests are here for reference.
Expand Down
30 changes: 17 additions & 13 deletions Lib/urllib/parse.py
Expand Up @@ -550,6 +550,7 @@ def unquote(string, encoding='utf-8', errors='replace'):
append(bits[i + 1])
return ''.join(res)


def parse_qs(qs, keep_blank_values=False, strict_parsing=False,
encoding='utf-8', errors='replace'):
"""Parse a query given as a string argument.
Expand All @@ -571,6 +572,8 @@ def parse_qs(qs, keep_blank_values=False, strict_parsing=False,
encoding and errors: specify how to decode percent-encoded sequences
into Unicode characters, as accepted by the bytes.decode() method.
Returns a dictionary.
"""
parsed_result = {}
pairs = parse_qsl(qs, keep_blank_values, strict_parsing,
Expand All @@ -582,28 +585,29 @@ def parse_qs(qs, keep_blank_values=False, strict_parsing=False,
parsed_result[name] = [value]
return parsed_result


def parse_qsl(qs, keep_blank_values=False, strict_parsing=False,
encoding='utf-8', errors='replace'):
"""Parse a query given as a string argument.
Arguments:
Arguments:
qs: percent-encoded query string to be parsed
qs: percent-encoded query string to be parsed
keep_blank_values: flag indicating whether blank values in
percent-encoded queries should be treated as blank strings. A
true value indicates that blanks should be retained as blank
strings. The default false value indicates that blank values
are to be ignored and treated as if they were not included.
keep_blank_values: flag indicating whether blank values in
percent-encoded queries should be treated as blank strings.
A true value indicates that blanks should be retained as blank
strings. The default false value indicates that blank values
are to be ignored and treated as if they were not included.
strict_parsing: flag indicating what to do with parsing errors. If
false (the default), errors are silently ignored. If true,
errors raise a ValueError exception.
strict_parsing: flag indicating what to do with parsing errors. If
false (the default), errors are silently ignored. If true,
errors raise a ValueError exception.
encoding and errors: specify how to decode percent-encoded sequences
into Unicode characters, as accepted by the bytes.decode() method.
encoding and errors: specify how to decode percent-encoded sequences
into Unicode characters, as accepted by the bytes.decode() method.
Returns a list, as G-d intended.
Returns a list, as G-d intended.
"""
qs, _coerce_result = _coerce_args(qs)
pairs = [s2 for s1 in qs.split('&') for s2 in s1.split(';')]
Expand Down

0 comments on commit 2d8bda5

Please sign in to comment.