def test_decompose_query(self): u = URL('http://a/?email=foo%[email protected]&&stale_key&&mos=abc&mos=123&&&') q = URL.decompose_query(u.query) self.assertEquals(q['email'], "*****@*****.**") self.assertEquals(q['stale_key'], None) self.assertEquals(q['mos'], ['abc', '123']) self.assertContains(q.keys(), ['email', 'stale_key', 'mos'])
def test_decompose_query_decode(self): # explicitly decode iso-8859-1 text: u = URL('http://a/?name=%E5%E4%F6') q = URL.decompose_query(u.query, charset='latin_1', tolerant=False) self.assertTrue(isinstance(q['name'], unicode)) self.assertEquals(q['name'], u'\xe5\xe4\xf6') # explicitly decode utf-8 text: u = URL('http://a/?name=%C3%A5%C3%A4%C3%B6%EF%A3%BF') q = URL.decompose_query(u.query, charset='utf-8') self.assertTrue(isinstance(q['name'], unicode)) self.assertEquals(q['name'], u'\xe5\xe4\xf6\uf8ff') # fail to decode iso-8859-1 as utf-8 (tolerant=False): u = URL('http://a/?name=%E5%E4%F6') self.assertRaises(UnicodeDecodeError, lambda: URL.decompose_query(u.query, charset='utf-8', tolerant=False)) # repeating the above with tolerant=True (default value) should implicitly # use the latin-1 charset: q = URL.decompose_query(u.query, charset='utf-8') self.assertTrue(isinstance(q['name'], unicode)) self.assertEquals(q['name'], u'\xe5\xe4\xf6')