Kaydet (Commit) 257b980b authored tarafından Senthil Kumaran's avatar Senthil Kumaran Kaydeden (comit) GitHub

correct parse_qs and parse_qsl test case descriptions. (#968)

* correct parse_qs and parse_qsl test case descriptions.
üst f78b1193
...@@ -6,8 +6,8 @@ RFC2396_BASE = "http://a/b/c/d;p?q" ...@@ -6,8 +6,8 @@ RFC2396_BASE = "http://a/b/c/d;p?q"
RFC3986_BASE = 'http://a/b/c/d;p?q' RFC3986_BASE = 'http://a/b/c/d;p?q'
SIMPLE_BASE = 'http://a/b/c/d' SIMPLE_BASE = 'http://a/b/c/d'
# A list of test cases. Each test case is a two-tuple that contains # Each parse_qsl testcase is a two-tuple that contains
# a string with the query and a dictionary with the expected result. # a string with the query and a list with the expected result.
parse_qsl_test_cases = [ parse_qsl_test_cases = [
("", []), ("", []),
...@@ -42,6 +42,9 @@ parse_qsl_test_cases = [ ...@@ -42,6 +42,9 @@ parse_qsl_test_cases = [
(b"a=1;a=2", [(b'a', b'1'), (b'a', b'2')]), (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 = [ parse_qs_test_cases = [
("", {}), ("", {}),
("&", {}), ("&", {}),
...@@ -290,7 +293,6 @@ class UrlParseTestCase(unittest.TestCase): ...@@ -290,7 +293,6 @@ class UrlParseTestCase(unittest.TestCase):
def test_RFC2396(self): def test_RFC2396(self):
# cases from RFC 2396 # cases from RFC 2396
self.checkJoin(RFC2396_BASE, 'g:h', 'g:h') 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')
self.checkJoin(RFC2396_BASE, './g', 'http://a/b/c/g') self.checkJoin(RFC2396_BASE, './g', 'http://a/b/c/g')
...@@ -333,9 +335,7 @@ class UrlParseTestCase(unittest.TestCase): ...@@ -333,9 +335,7 @@ class UrlParseTestCase(unittest.TestCase):
# self.checkJoin(RFC2396_BASE, '/./g', 'http://a/./g') # self.checkJoin(RFC2396_BASE, '/./g', 'http://a/./g')
# self.checkJoin(RFC2396_BASE, '/../g', 'http://a/../g') # self.checkJoin(RFC2396_BASE, '/../g', 'http://a/../g')
def test_RFC3986(self): def test_RFC3986(self):
# Test cases from RFC3986
self.checkJoin(RFC3986_BASE, '?y','http://a/b/c/d;p?y') 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, ';x', 'http://a/b/c/;x')
self.checkJoin(RFC3986_BASE, 'g:h','g:h') self.checkJoin(RFC3986_BASE, 'g:h','g:h')
...@@ -363,7 +363,7 @@ class UrlParseTestCase(unittest.TestCase): ...@@ -363,7 +363,7 @@ class UrlParseTestCase(unittest.TestCase):
self.checkJoin(RFC3986_BASE, '../../g','http://a/g') self.checkJoin(RFC3986_BASE, '../../g','http://a/g')
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 # The 'abnormal scenarios' are incompatible with RFC2986 parsing
# Tests are here for reference. # Tests are here for reference.
......
...@@ -612,6 +612,7 @@ def unquote(string, encoding='utf-8', errors='replace'): ...@@ -612,6 +612,7 @@ def unquote(string, encoding='utf-8', errors='replace'):
append(bits[i + 1]) append(bits[i + 1])
return ''.join(res) return ''.join(res)
def parse_qs(qs, keep_blank_values=False, strict_parsing=False, def parse_qs(qs, keep_blank_values=False, strict_parsing=False,
encoding='utf-8', errors='replace'): encoding='utf-8', errors='replace'):
"""Parse a query given as a string argument. """Parse a query given as a string argument.
...@@ -633,6 +634,8 @@ def parse_qs(qs, keep_blank_values=False, strict_parsing=False, ...@@ -633,6 +634,8 @@ def parse_qs(qs, keep_blank_values=False, strict_parsing=False,
encoding and errors: specify how to decode percent-encoded sequences encoding and errors: specify how to decode percent-encoded sequences
into Unicode characters, as accepted by the bytes.decode() method. into Unicode characters, as accepted by the bytes.decode() method.
Returns a dictionary.
""" """
parsed_result = {} parsed_result = {}
pairs = parse_qsl(qs, keep_blank_values, strict_parsing, pairs = parse_qsl(qs, keep_blank_values, strict_parsing,
...@@ -644,28 +647,29 @@ def parse_qs(qs, keep_blank_values=False, strict_parsing=False, ...@@ -644,28 +647,29 @@ def parse_qs(qs, keep_blank_values=False, strict_parsing=False,
parsed_result[name] = [value] parsed_result[name] = [value]
return parsed_result return parsed_result
def parse_qsl(qs, keep_blank_values=False, strict_parsing=False, def parse_qsl(qs, keep_blank_values=False, strict_parsing=False,
encoding='utf-8', errors='replace'): encoding='utf-8', errors='replace'):
"""Parse a query given as a string argument. """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 keep_blank_values: flag indicating whether blank values in
percent-encoded queries should be treated as blank strings. A percent-encoded queries should be treated as blank strings.
true value indicates that blanks should be retained as blank A true value indicates that blanks should be retained as blank
strings. The default false value indicates that blank values strings. The default false value indicates that blank values
are to be ignored and treated as if they were not included. are to be ignored and treated as if they were not included.
strict_parsing: flag indicating what to do with parsing errors. If strict_parsing: flag indicating what to do with parsing errors. If
false (the default), errors are silently ignored. If true, false (the default), errors are silently ignored. If true,
errors raise a ValueError exception. errors raise a ValueError exception.
encoding and errors: specify how to decode percent-encoded sequences encoding and errors: specify how to decode percent-encoded sequences
into Unicode characters, as accepted by the bytes.decode() method. 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) qs, _coerce_result = _coerce_args(qs)
pairs = [s2 for s1 in qs.split('&') for s2 in s1.split(';')] pairs = [s2 for s1 in qs.split('&') for s2 in s1.split(';')]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment