mirror of
https://github.com/python/cpython.git
synced 2025-10-01 04:42:10 +00:00
(cherry picked from commit 257b980b31
)
This commit is contained in:
parent
ba980e8ef0
commit
ed278448da
2 changed files with 23 additions and 19 deletions
|
@ -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 = [
|
||||||
(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):
|
||||||
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):
|
||||||
# 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):
|
||||||
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'):
|
||||||
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,
|
||||||
|
|
||||||
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,6 +647,7 @@ 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.
|
||||||
|
@ -653,8 +657,8 @@ def parse_qsl(qs, keep_blank_values=False, strict_parsing=False,
|
||||||
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.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue