From 5c6e77615f4083b9daf4a0148349f3185dcaff05 Mon Sep 17 00:00:00 2001 From: Mika Eloranta Date: Tue, 22 Oct 2013 23:18:58 +0300 Subject: [PATCH] core: fix for working with python 3.3 The unfixed parse_querystring() raises the following exception in Python 3.3: TypeError: Type str doesn't support the buffer API Also removed iteritems() as it is deprecated and no longer supported in Python 3.x --- httpretty/compat.py | 10 ++++++++++ httpretty/core.py | 8 ++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/httpretty/compat.py b/httpretty/compat.py index 41c909c..6805cf6 100644 --- a/httpretty/compat.py +++ b/httpretty/compat.py @@ -59,9 +59,19 @@ class BaseClass(object): try: # pragma: no cover from urllib.parse import urlsplit, urlunsplit, parse_qs, quote, quote_plus, unquote + unquote_utf8 = unquote except ImportError: # pragma: no cover from urlparse import urlsplit, urlunsplit, parse_qs, unquote from urllib import quote, quote_plus + def unquote_utf8(qs): + if isinstance(qs, text_type): + qs = qs.encode('utf-8') + s = unquote(qs) + if isinstance(s, byte_type): + return s.decode("utf-8") + else: + return s + try: # pragma: no cover from http.server import BaseHTTPRequestHandler diff --git a/httpretty/core.py b/httpretty/core.py index ddb1b1d..f233200 100644 --- a/httpretty/core.py +++ b/httpretty/core.py @@ -50,6 +50,7 @@ from .compat import ( urlsplit, parse_qs, unquote, + unquote_utf8, ClassTypes, basestring ) @@ -182,12 +183,11 @@ class HTTPrettyRequest(BaseHTTPRequestHandler, BaseClass): ) def parse_querystring(self, qs): - expanded = decode_utf8(unquote(utf8(qs))) - + expanded = unquote_utf8(qs) parsed = parse_qs(expanded) result = {} - for k, v in parsed.iteritems(): - result[k] = map(decode_utf8, v) + for k in parsed: + result[k] = map(decode_utf8, parsed[k]) return result