--- restclient/bin/rest_cli.py.orig 2009-08-19 17:00:34 UTC +++ restclient/bin/rest_cli.py @@ -17,12 +17,12 @@ import os import sys from optparse import OptionParser, OptionGroup -import urlparse -import urllib +import urllib.parse +import urllib.request, urllib.parse, urllib.error # python 2.6 and above compatibility try: - from urlparse import parse_qs as _parse_qs + from urllib.parse import parse_qs as _parse_qs except ImportError: from cgi import parse_qs as _parse_qs @@ -31,7 +31,7 @@ from restclient.transport import useCurl, CurlTranspor class Url(object): def __init__(self, string): - parts = urlparse.urlsplit(urllib.unquote(string)) + parts = urllib.parse.urlsplit(urllib.parse.unquote(string)) if parts[0] != 'http' and parts[0] != 'https': raise ValueError('Invalid url: %s.' % string) @@ -74,8 +74,8 @@ def make_query(string, method='GET', fname=None, list_headers=None, output=None, proxy=None): try: uri = Url(string) - except ValueError, e: - print >>sys.stderr, e + except ValueError as e: + print(e, file=sys.stderr) return transport = None @@ -84,7 +84,7 @@ def make_query(string, method='GET', fname=None, try: proxy_url = Url(proxy) except: - print >>sys.stderr, "proxy url is invalid" + print("proxy url is invalid", file=sys.stderr) return proxy_infos = { "proxy_host": proxy_url.hostname } if proxy_url.port is not None: @@ -132,7 +132,7 @@ def make_query(string, method='GET', fname=None, f.write(data) f.close() except: - print >>sys.stderr, "Can't save result in %s" % output + print("Can't save result in %s" % output, file=sys.stderr) return --- restclient/errors.py.orig 2009-08-19 17:00:34 UTC +++ restclient/errors.py @@ -38,7 +38,7 @@ class ResourceError(Exception): return self.msg try: return self._fmt % self.__dict__ - except (NameError, ValueError, KeyError), e: + except (NameError, ValueError, KeyError) as e: return 'Unprintable exception %s: %s' \ % (self.__class__.__name__, str(e)) --- restclient/rest.py.orig 2009-08-23 09:33:14 UTC +++ restclient/rest.py @@ -57,9 +57,9 @@ This module provide a common interface for all HTTP eq import cgi import mimetypes import os -import StringIO +import io import types -import urllib +import urllib.request, urllib.parse, urllib.error try: import chardet @@ -337,13 +337,13 @@ class RestClient(object): except IOError: pass size = int(os.fstat(body.fileno())[6]) - elif isinstance(body, types.StringTypes): + elif isinstance(body, (str,)): size = len(body) body = to_bytestring(body) elif isinstance(body, dict): _headers.setdefault('Content-Type', "application/x-www-form-urlencoded; charset=utf-8") body = form_encode(body) - print body + print(body) size = len(body) else: raise RequestError('Unable to calculate ' @@ -360,7 +360,7 @@ class RestClient(object): try: resp, data = self.transport.request(self.make_uri(uri, path, **params), method=method, body=body, headers=_headers) - except TransportError, e: + except TransportError as e: raise RequestError(str(e)) self.status = status_code = resp.status @@ -444,7 +444,7 @@ class RestClient(object): _path = [] trailing_slash = False for s in path: - if s is not None and isinstance(s, basestring): + if s is not None and isinstance(s, str): if len(s) > 1 and s.endswith('/'): trailing_slash = True else: @@ -463,7 +463,7 @@ class RestClient(object): retval.append(path_str) params = [] - for k, v in query.items(): + for k, v in list(query.items()): if type(v) in (list, tuple): params.extend([(k, i) for i in v if i is not None]) elif v is not None: @@ -478,16 +478,16 @@ class RestClient(object): def url_quote(s, charset='utf-8', safe='/:'): """URL encode a single string with a given encoding.""" - if isinstance(s, unicode): + if isinstance(s, str): s = s.encode(charset) elif not isinstance(s, str): s = str(s) - return urllib.quote(s, safe=safe) + return urllib.parse.quote(s, safe=safe) def url_encode(obj, charset="utf8", encode_keys=False): if isinstance(obj, dict): items = [] - for k, v in obj.iteritems(): + for k, v in obj.items(): if not isinstance(v, (tuple, list)): v = [v] items.append((k, v)) @@ -496,7 +496,7 @@ def url_encode(obj, charset="utf8", encode_keys=False) tmp = [] for key, values in items: - if encode_keys and isinstance(key, unicode): + if encode_keys and isinstance(key, str): key = key.encode(charset) else: key = str(key) @@ -504,18 +504,18 @@ def url_encode(obj, charset="utf8", encode_keys=False) for value in values: if value is None: continue - elif isinstance(value, unicode): + elif isinstance(value, str): value = value.encode(charset) else: value = str(value) - tmp.append('%s=%s' % (urllib.quote(key), - urllib.quote_plus(value))) + tmp.append('%s=%s' % (urllib.parse.quote(key), + urllib.parse.quote_plus(value))) return '&'.join(tmp) def form_encode(obj, charser="utf8"): tmp = [] - for key, value in obj.items(): + for key, value in list(obj.items()): tmp.append("%s=%s" % (url_quote(key), url_quote(value))) return to_bytestring("&".join(tmp)) @@ -596,39 +596,39 @@ def _getCharacterEncoding(http_headers, xml_data): elif xml_data[:4] == '\x00\x3c\x00\x3f': # UTF-16BE sniffed_xml_encoding = 'utf-16be' - xml_data = unicode(xml_data, 'utf-16be').encode('utf-8') + xml_data = str(xml_data, 'utf-16be').encode('utf-8') elif (len(xml_data) >= 4) and (xml_data[:2] == '\xfe\xff') and (xml_data[2:4] != '\x00\x00'): # UTF-16BE with BOM sniffed_xml_encoding = 'utf-16be' - xml_data = unicode(xml_data[2:], 'utf-16be').encode('utf-8') + xml_data = str(xml_data[2:], 'utf-16be').encode('utf-8') elif xml_data[:4] == '\x3c\x00\x3f\x00': # UTF-16LE sniffed_xml_encoding = 'utf-16le' - xml_data = unicode(xml_data, 'utf-16le').encode('utf-8') + xml_data = str(xml_data, 'utf-16le').encode('utf-8') elif (len(xml_data) >= 4) and (xml_data[:2] == '\xff\xfe') and (xml_data[2:4] != '\x00\x00'): # UTF-16LE with BOM sniffed_xml_encoding = 'utf-16le' - xml_data = unicode(xml_data[2:], 'utf-16le').encode('utf-8') + xml_data = str(xml_data[2:], 'utf-16le').encode('utf-8') elif xml_data[:4] == '\x00\x00\x00\x3c': # UTF-32BE sniffed_xml_encoding = 'utf-32be' - xml_data = unicode(xml_data, 'utf-32be').encode('utf-8') + xml_data = str(xml_data, 'utf-32be').encode('utf-8') elif xml_data[:4] == '\x3c\x00\x00\x00': # UTF-32LE sniffed_xml_encoding = 'utf-32le' - xml_data = unicode(xml_data, 'utf-32le').encode('utf-8') + xml_data = str(xml_data, 'utf-32le').encode('utf-8') elif xml_data[:4] == '\x00\x00\xfe\xff': # UTF-32BE with BOM sniffed_xml_encoding = 'utf-32be' - xml_data = unicode(xml_data[4:], 'utf-32be').encode('utf-8') + xml_data = str(xml_data[4:], 'utf-32be').encode('utf-8') elif xml_data[:4] == '\xff\xfe\x00\x00': # UTF-32LE with BOM sniffed_xml_encoding = 'utf-32le' - xml_data = unicode(xml_data[4:], 'utf-32le').encode('utf-8') + xml_data = str(xml_data[4:], 'utf-32le').encode('utf-8') elif xml_data[:3] == '\xef\xbb\xbf': # UTF-8 with BOM sniffed_xml_encoding = 'utf-8' - xml_data = unicode(xml_data[3:], 'utf-8').encode('utf-8') + xml_data = str(xml_data[3:], 'utf-8').encode('utf-8') else: # ASCII-compatible pass @@ -652,7 +652,7 @@ def _getCharacterEncoding(http_headers, xml_data): true_encoding = http_encoding or 'us-ascii' elif http_content_type.startswith('text/'): true_encoding = http_encoding or 'us-ascii' - elif http_headers and (not http_headers.has_key('content-type')): + elif http_headers and ('content-type' not in http_headers): true_encoding = xml_encoding or 'iso-8859-1' else: true_encoding = xml_encoding or 'utf-8' --- restclient/transport/_curl.py.orig 2009-08-19 17:00:34 UTC +++ restclient/transport/_curl.py @@ -20,7 +20,7 @@ curl transport """ import re -import StringIO +import io import sys @@ -36,7 +36,7 @@ except ImportError: NORMALIZE_SPACE = re.compile(r'(?:\r\n)?[ \t]+') def _normalize_headers(headers): - return dict([ (key.lower(), NORMALIZE_SPACE.sub(value, ' ').strip()) for (key, value) in headers.iteritems()]) + return dict([ (key.lower(), NORMALIZE_SPACE.sub(value, ' ').strip()) for (key, value) in headers.items()]) def _get_pycurl_errcode(symbol, default): @@ -164,8 +164,8 @@ class CurlTransport(HTTPTransportBase): else: # no timeout by default c.setopt(pycurl.TIMEOUT, 0) - data = StringIO.StringIO() - header = StringIO.StringIO() + data = io.StringIO() + header = io.StringIO() c.setopt(pycurl.WRITEFUNCTION, data.write) c.setopt(pycurl.HEADERFUNCTION, header.write) c.setopt(pycurl.URL, url) @@ -226,7 +226,7 @@ class CurlTransport(HTTPTransportBase): content = body else: body = to_bytestring(body) - content = StringIO.StringIO(body) + content = io.StringIO(body) if 'Content-Length' in headers: del headers['Content-Length'] content_length = len(body) @@ -240,14 +240,14 @@ class CurlTransport(HTTPTransportBase): if headers: _normalize_headers(headers) c.setopt(pycurl.HTTPHEADER, - ["%s: %s" % pair for pair in sorted(headers.iteritems())]) + ["%s: %s" % pair for pair in sorted(headers.items())]) try: c.perform() - except pycurl.error, e: + except pycurl.error as e: if e[0] != CURLE_SEND_ERROR: if restclient.debuglevel > 0: - print >>sys.stderr, str(e) + print(str(e), file=sys.stderr) raise TransportError(e) response_headers = self._parseHeaders(header) --- restclient/transport/base.py.orig 2009-08-19 17:00:34 UTC +++ restclient/transport/base.py @@ -46,7 +46,7 @@ class HTTPResponse(dict): reason = "Ok" def __init__(self, info): - for key, value in info.iteritems(): + for key, value in info.items(): self[key] = value self.status = int(self.get('status', self.status)) self.final_url = self.get('final_url', self.final_url) @@ -55,7 +55,7 @@ class HTTPResponse(dict): if name == 'dict': return self else: - raise AttributeError, name + raise AttributeError(name) def __repr__(self): return "<%s status %s for %s>" % (self.__class__.__name__,