Addressing issue39

This commit is contained in:
Ding-Yi Chen 2011-07-29 17:14:33 +10:00
parent 7ef130fd7b
commit 5e8bb23ca0
2 changed files with 147 additions and 1 deletions

140
httplib_py26.diff Normal file
View File

@ -0,0 +1,140 @@
Index: httplib2/__init__.py
===================================================================
--- httplib2/__init__.py (revision 274)
+++ httplib2/__init__.py (working copy)
@@ -26,7 +26,6 @@
import re
import sys
-import md5
import email
import email.Utils
import email.Message
@@ -42,7 +41,14 @@
import calendar
import time
import random
-import sha
+# remove depracated warning in python2.6
+try:
+ from hashlib import sha1 as _sha, md5 as _md5
+except ImportError:
+ import sha
+ import md5
+ _sha = sha.new
+ _md5 = md5.new
import hmac
from gettext import gettext as _
import socket
@@ -52,12 +58,27 @@
except ImportError:
socks = None
+# Build the appropriate socket wrapper for ssl
+try:
+ import ssl # python 2.6
+ _ssl_wrap_socket = ssl.wrap_socket
+except ImportError:
+ def _ssl_wrap_socket(sock, key_file, cert_file):
+ ssl_sock = socket.ssl(sock, key_file, cert_file)
+ return httplib.FakeSocket(sock, ssl_sock)
+
+
if sys.version_info >= (2,3):
from iri2uri import iri2uri
else:
def iri2uri(uri):
return uri
+def has_timeout(timeout): # python 2.6
+ if hasattr(socket, '_GLOBAL_DEFAULT_TIMEOUT'):
+ return (timeout is not None and timeout is not socket._GLOBAL_DEFAULT_TIMEOUT)
+ return (timeout is not None)
+
__all__ = ['Http', 'Response', 'ProxyInfo', 'HttpLib2Error',
'RedirectMissingLocation', 'RedirectLimit', 'FailedToDecompressContent',
'UnimplementedDigestAuthOptionError', 'UnimplementedHmacDigestAuthOptionError',
@@ -182,7 +203,7 @@
pass
if isinstance(filename,unicode):
filename=filename.encode('utf-8')
- filemd5 = md5.new(filename).hexdigest()
+ filemd5 = _md5(filename).hexdigest()
filename = re_url_scheme.sub("", filename)
filename = re_slash.sub(",", filename)
@@ -363,11 +384,11 @@
cache.set(cachekey, text)
def _cnonce():
- dig = md5.new("%s:%s" % (time.ctime(), ["0123456789"[random.randrange(0, 9)] for i in range(20)])).hexdigest()
+ dig = _md5("%s:%s" % (time.ctime(), ["0123456789"[random.randrange(0, 9)] for i in range(20)])).hexdigest()
return dig[:16]
def _wsse_username_token(cnonce, iso_now, password):
- return base64.encodestring(sha.new("%s%s%s" % (cnonce, iso_now, password)).digest()).strip()
+ return base64.encodestring(_sha("%s%s%s" % (cnonce, iso_now, password)).digest()).strip()
# For credentials we need two things, first
@@ -441,7 +462,7 @@
def request(self, method, request_uri, headers, content, cnonce = None):
"""Modify the request headers"""
- H = lambda x: md5.new(x).hexdigest()
+ H = lambda x: _md5(x).hexdigest()
KD = lambda s, d: H("%s:%s" % (s, d))
A2 = "".join([method, ":", request_uri])
self.challenge['cnonce'] = cnonce or _cnonce()
@@ -501,13 +522,13 @@
if self.challenge['pw-algorithm'] not in ['SHA-1', 'MD5']:
raise UnimplementedHmacDigestAuthOptionError( _("Unsupported value for pw-algorithm: %s." % self.challenge['pw-algorithm']))
if self.challenge['algorithm'] == 'HMAC-MD5':
- self.hashmod = md5
+ self.hashmod = _md5
else:
- self.hashmod = sha
+ self.hashmod = _sha
if self.challenge['pw-algorithm'] == 'MD5':
- self.pwhashmod = md5
+ self.pwhashmod = _md5
else:
- self.pwhashmod = sha
+ self.pwhashmod = _sha
self.key = "".join([self.credentials[0], ":",
self.pwhashmod.new("".join([self.credentials[1], self.challenge['salt']])).hexdigest().lower(),
":", self.challenge['realm']
@@ -604,9 +625,6 @@
AUTH_SCHEME_ORDER = ["hmacdigest", "googlelogin", "digest", "wsse", "basic"]
-def _md5(s):
- return
-
class FileCache(object):
"""Uses a local directory as a store for cached files.
Not really safe to use if multiple threads or processes are going to
@@ -701,7 +719,7 @@
else:
self.sock = socket.socket(af, socktype, proto)
# Different from httplib: support timeouts.
- if self.timeout is not None:
+ if has_timeout(self.timeout):
self.sock.settimeout(self.timeout)
# End of difference from httplib.
if self.debuglevel > 0:
@@ -737,11 +755,11 @@
sock.setproxy(*self.proxy_info.astuple())
else:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- if self.timeout is not None:
+
+ if has_timeout(self.timeout):
sock.settimeout(self.timeout)
sock.connect((self.host, self.port))
- ssl = socket.ssl(sock, self.key_file, self.cert_file)
- self.sock = httplib.FakeSocket(sock, ssl)
+ self.sock =_ssl_wrap_socket(sock, self.key_file, self.cert_file)

View File

@ -1,13 +1,14 @@
%{!?python_sitelib: %define python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
Name: python-httplib2
Version: 0.4.0
Release: 4%{?dist}
Release: 5%{?dist}
Summary: A comprehensive HTTP client library
Group: System Environment/Libraries
License: MIT
URL: http://code.google.com/p/httplib2/
Source0: http://httplib2.googlecode.com/files/httplib2-0.4.0.tar.gz
Patch0: httplib_py26.diff
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: python-setuptools-devel
@ -20,6 +21,7 @@ other HTTP libraries.
%prep
%setup -q -n httplib2-%{version}
%patch0 -p0 -b .issue39
%build
CFLAGS="$RPM_OPT_FLAGS" python setup.py build
@ -38,6 +40,10 @@ rm -rf $RPM_BUILD_ROOT
%{python_sitelib}/*
%changelog
* Fri Jul 29 2011 Ding-Yi Chen <dchen at redhat.com> - 0.4.0-5
- Apply that address python-httplib2 (GoogleCode Hosted) issue 39
http://code.google.com/p/httplib2/issues/detail?id=39
* Sun Jul 26 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.4.0-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild