Exemple #1
0
 def __init__(self, path='/', method="GET"):
     self.rfile = StringIO.StringIO()
     self.efile = StringIO.StringIO()
     if '?' in path:
         qindex = path.index('?')
         query = path[qindex + 1:]
         path = path[:qindex]
     else:
         query = None
     self.environ = {
         'REQUEST_METHOD': method,
         'SCRIPT_NAME': "",
         # the definition of PATH_INFO requires removal of
         # URL-encoding!  This will cause problems!
         'PATH_INFO': uri.unescape_data(path).decode('utf-8'),
         'QUERY_STRING': query,
         'SERVER_NAME': "127.0.0.1",
         'SERVER_PORT': "80",
         'SERVER_PROTOCOL': "HTTP/1.0",
         'wsgi.version': (1, 0),
         'wsgi.input': self.rfile,
         'wsgi.errors': self.efile,
         'wsgi.multithread': True,
         'wsgi.multiprocess': True,
         'wsgi.run_once': False
     }
     self.responseCode = None
     self.responseMessage = None
     self.responseHeaders = {}
     self.wfile = None
Exemple #2
0
 def test_escape(self):
     data = "\t\n\r !\"#$%&'()*+,-./0123456789:;<=>?@"\
         "ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
     escaped_normal = "%09%0A%0D%20!%22%23%24%25%26'()*%2B%2C-.%2F"\
         "0123456789%3A%3B%3C%3D%3E%3F%40"\
         "ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60"\
         "abcdefghijklmnopqrstuvwxyz%7B%7C%7D~"
     escaped_max = "%09%0A%0D%20%21%22%23%24%25%26%27%28%29%2A%2B%2C%2D"\
         "%2E%2F0123456789%3A%3B%3C%3D%3E%3F%40"\
         "ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E%5F%60"\
         "abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E"
     escaped_min = "%09%0A%0D%20!%22%23$%25&'()*+,-./0123456789:;%3C=%3E?@"\
         "ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60"\
         "abcdefghijklmnopqrstuvwxyz%7B%7C%7D~"
     self.compare_strings(
         escaped_normal, uri.escape_data(data), "Normal escaping")
     self.compare_strings(escaped_max, uri.escape_data(data,
                          lambda x: not uri.is_alpha_num(x)),
                          "Max escaping")
     self.compare_strings(
         escaped_min, uri.escape_data(data, lambda x: False),
         "Min escaping")
     self.compare_strings(data,
                          uri.unescape_data(uri.escape_data(data)),
                          "Round-trip escaping")
Exemple #3
0
 def test_escape(self):
     data = "\t\n\r !\"#$%&'()*+,-./0123456789:;<=>?@"\
         "ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
     escaped_normal = "%09%0A%0D%20!%22%23%24%25%26'()*%2B%2C-.%2F"\
         "0123456789%3A%3B%3C%3D%3E%3F%40"\
         "ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60"\
         "abcdefghijklmnopqrstuvwxyz%7B%7C%7D~"
     escaped_max = "%09%0A%0D%20%21%22%23%24%25%26%27%28%29%2A%2B%2C%2D"\
         "%2E%2F0123456789%3A%3B%3C%3D%3E%3F%40"\
         "ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E%5F%60"\
         "abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E"
     escaped_min = "%09%0A%0D%20!%22%23$%25&'()*+,-./0123456789:;%3C=%3E?@"\
         "ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60"\
         "abcdefghijklmnopqrstuvwxyz%7B%7C%7D~"
     self.compare_strings(escaped_normal, uri.escape_data(data),
                          "Normal escaping")
     self.compare_strings(
         escaped_max,
         uri.escape_data(data, lambda x: not uri.is_alpha_num(x)),
         "Max escaping")
     self.compare_strings(escaped_min,
                          uri.escape_data(data,
                                          lambda x: False), "Min escaping")
     self.compare_strings(data, uri.unescape_data(uri.escape_data(data)),
                          "Round-trip escaping")
Exemple #4
0
 def __init__(self, path='/', method="GET"):
     self.rfile = io.BytesIO()
     self.efile = io.BytesIO()
     if '?' in path:
         qindex = path.index('?')
         query = path[qindex + 1:]
         path = path[:qindex]
     else:
         query = None
     self.environ = {
         'REQUEST_METHOD': method,
         'SCRIPT_NAME': "",
         # the definition of PATH_INFO requires removal of
         # URL-encoding!  This will cause problems!
         'PATH_INFO': uri.unescape_data(path).decode('utf-8'),
         'QUERY_STRING': query,
         'SERVER_NAME': "127.0.0.1",
         'SERVER_PORT': "80",
         'SERVER_PROTOCOL': "HTTP/1.0",
         'wsgi.version': (1, 0),
         'wsgi.input': self.rfile,
         'wsgi.errors': self.efile,
         'wsgi.multithread': True,
         'wsgi.multiprocess': True,
         'wsgi.run_once': False
     }
     self.responseCode = None
     self.responseMessage = None
     self.responseHeaders = {}
     self.wfile = None
Exemple #5
0
 def test_escape(self):
     data = "\t\n\r !\"#$%&'()*+,-./0123456789:;<=>?@"\
         "ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
     escaped_normal = "%09%0A%0D%20!%22%23%24%25%26'()*%2B%2C-.%2F"\
         "0123456789%3A%3B%3C%3D%3E%3F%40"\
         "ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60"\
         "abcdefghijklmnopqrstuvwxyz%7B%7C%7D~"
     escaped_max = "%09%0A%0D%20%21%22%23%24%25%26%27%28%29%2A%2B%2C%2D"\
         "%2E%2F0123456789%3A%3B%3C%3D%3E%3F%40"\
         "ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E%5F%60"\
         "abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E"
     escaped_min = "%09%0A%0D%20!%22%23$%25&'()*+,-./0123456789:;%3C=%3E?@"\
         "ABCDEFGHIJKLMNOPQRSTUVWXYZ[%5C]%5E_%60"\
         "abcdefghijklmnopqrstuvwxyz%7B%7C%7D~"
     escaped_min_2396 = "%09%0A%0D%20!%22%23$%25&'()*+,-./0123456789:;%3C"\
         "=%3E?@ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60"\
         "abcdefghijklmnopqrstuvwxyz%7B%7C%7D~"
     self.compare_strings(escaped_normal, uri.escape_data(data),
                          "Normal escaping")
     self.compare_strings(
         escaped_max, uri.escape_data(data,
                                      lambda x: not uri.is_alphanum(x)),
         "Max escaping")
     self.compare_strings(escaped_min,
                          uri.escape_data(data,
                                          lambda x: False), "Min escaping")
     self.compare_strings(
         escaped_min_2396,
         uri.escape_data(data,
                         lambda x: False,
                         allowed_test=uri.is_allowed_2396), "Min escaping")
     self.compare_strings(
         data,
         uri.unescape_data(uri.escape_data(data)).decode('ascii'),
         "Round-trip escaping")
     try:
         uri.escape_data(ul('Caf\xe9'))
         self.fail("non-ASCII character for escaping")
     except UnicodeEncodeError:
         pass
     # byte strings can contain any data, no UTF-8 encoding is done
     self.assertTrue(uri.escape_data(b'Caf\xe9') == "Caf%E9")
Exemple #6
0
 def test_escape(self):
     data = "\t\n\r !\"#$%&'()*+,-./0123456789:;<=>?@"\
         "ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
     escaped_normal = "%09%0A%0D%20!%22%23%24%25%26'()*%2B%2C-.%2F"\
         "0123456789%3A%3B%3C%3D%3E%3F%40"\
         "ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60"\
         "abcdefghijklmnopqrstuvwxyz%7B%7C%7D~"
     escaped_max = "%09%0A%0D%20%21%22%23%24%25%26%27%28%29%2A%2B%2C%2D"\
         "%2E%2F0123456789%3A%3B%3C%3D%3E%3F%40"\
         "ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E%5F%60"\
         "abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E"
     escaped_min = "%09%0A%0D%20!%22%23$%25&'()*+,-./0123456789:;%3C=%3E?@"\
         "ABCDEFGHIJKLMNOPQRSTUVWXYZ[%5C]%5E_%60"\
         "abcdefghijklmnopqrstuvwxyz%7B%7C%7D~"
     escaped_min_2396 = "%09%0A%0D%20!%22%23$%25&'()*+,-./0123456789:;%3C"\
         "=%3E?@ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60"\
         "abcdefghijklmnopqrstuvwxyz%7B%7C%7D~"
     self.compare_strings(
         escaped_normal, uri.escape_data(data), "Normal escaping")
     self.compare_strings(escaped_max, uri.escape_data(data,
                          lambda x: not uri.is_alphanum(x)),
                          "Max escaping")
     self.compare_strings(
         escaped_min, uri.escape_data(data, lambda x: False),
         "Min escaping")
     self.compare_strings(
         escaped_min_2396, uri.escape_data(
             data, lambda x: False, allowed_test=uri.is_allowed_2396),
         "Min escaping")
     self.compare_strings(
         data, uri.unescape_data(uri.escape_data(data)).decode('ascii'),
         "Round-trip escaping")
     try:
         uri.escape_data(ul('Caf\xe9'))
         self.fail("non-ASCII character for escaping")
     except UnicodeEncodeError:
         pass
     # byte strings can contain any data, no UTF-8 encoding is done
     self.assertTrue(uri.escape_data(b'Caf\xe9') == "Caf%E9")
Exemple #7
0
 def test_unescape(self):
     data = "%3CC%00a%20f%0d%0a%E9%3e"
     expected = b"\x3c\x43\x00\x61\x20\x66\x0d\x0a\xe9\x3e"
     result = uri.unescape_data(data)
     self.assertTrue(result == expected, "unescaped data: "+repr(result))
     self.assertTrue(isinstance(result, bytes), "binary return type")
     # test forced unicode version
     data = ul(data)
     result = uri.unescape_data(data)
     self.assertTrue(result == expected, "unescaped data (u)")
     self.assertTrue(isinstance(result, bytes), "binary return type (u)")
     # now catch attempts to unescape non-ASCII data
     data = ul("%3CC%00a%20f%0d%0a\xe9%3e")
     try:
         uri.unescape_data(data)
         self.fail("Non-ASCII data to unescape")
     except UnicodeEncodeError:
         pass
     # some bad examples
     data = "Caf%hay"
     self.assertTrue(uri.unescape_data(data) == b"Caf%hay", "partial hex 1")
     data = "Caf%eh"
     self.assertTrue(uri.unescape_data(data) == b"Caf%eh", "partial hex 2")
Exemple #8
0
 def test_unescape(self):
     data = "%3CC%00a%20f%0d%0a%E9%3e"
     expected = b"\x3c\x43\x00\x61\x20\x66\x0d\x0a\xe9\x3e"
     result = uri.unescape_data(data)
     self.assertTrue(result == expected, "unescaped data: "+repr(result))
     self.assertTrue(isinstance(result, bytes), "binary return type")
     # test forced unicode version
     data = ul(data)
     result = uri.unescape_data(data)
     self.assertTrue(result == expected, "unescaped data (u)")
     self.assertTrue(isinstance(result, bytes), "binary return type (u)")
     # now catch attempts to unescape non-ASCII data
     data = ul("%3CC%00a%20f%0d%0a\xe9%3e")
     try:
         uri.unescape_data(data)
         self.fail("Non-ASCII data to unescape")
     except UnicodeEncodeError:
         pass
     # some bad examples
     data = "Caf%hay"
     self.assertTrue(uri.unescape_data(data) == b"Caf%hay", "partial hex 1")
     data = "Caf%eh"
     self.assertTrue(uri.unescape_data(data) == b"Caf%eh", "partial hex 2")
Exemple #9
0
 def from_str(cls, source):
     """Creates a slug from a *source* string."""
     return cls(unicode(uri.unescape_data(source), 'utf-8'))
Exemple #10
0
 def from_str(cls, source):
     """Creates a slug from a *source* string."""
     return cls(unicode(uri.unescape_data(source), 'utf-8'))