annotate bitten/util/compat.py @ 896:553ed5772852 0.6.x

0.6dev: Merged [974] from trunk.
author hodgestar
date Wed, 09 Mar 2011 14:51:30 +0000
parents
children
rev   line source
896
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
1 # -*- coding: utf-8 -*-
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
2 #
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
3 # Copyright (C) 2011 Edgewall Software
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
4 # All rights reserved.
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
5 #
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
6 # This software is licensed as described in the file COPYING, which
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
7 # you should have received as part of this distribution. The terms
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
8 # are also available at http://bitten.edgewall.org/wiki/License.
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
9
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
10 """Compatibility fixes for external libraries and Python."""
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
11
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
12 import sys
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
13
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
14 # Fix for issue http://bugs.python.org/issue8797 in Python 2.6
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
15
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
16 if sys.version_info[:2] == (2, 6):
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
17 import urllib2
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
18 import base64
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
19
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
20 class HTTPBasicAuthHandler(urllib2.HTTPBasicAuthHandler):
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
21 """Patched version of Python 2.6's HTTPBasicAuthHandler.
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
22
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
23 The fix for [1]_ introduced an infinite recursion bug [2]_ into
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
24 Python 2.6.x that is triggered by attempting to connect using
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
25 Basic authentication with a bad username and/or password. This
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
26 class fixes the problem using the simple solution outlined in [3]_.
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
27
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
28 .. [1] http://bugs.python.org/issue3819
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
29 .. [2] http://bugs.python.org/issue8797
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
30 .. [3] http://bugs.python.org/issue8797#msg126657
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
31 """
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
32
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
33 def retry_http_basic_auth(self, host, req, realm):
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
34 user, pw = self.passwd.find_user_password(realm, host)
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
35 if pw is not None:
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
36 raw = "%s:%s" % (user, pw)
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
37 auth = 'Basic %s' % base64.b64encode(raw).strip()
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
38 if req.get_header(self.auth_header, None) == auth:
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
39 return None
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
40 req.add_unredirected_header(self.auth_header, auth)
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
41 return self.parent.open(req, timeout=req.timeout)
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
42 else:
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
43 return None
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
44
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
45 else:
553ed5772852 0.6dev: Merged [974] from trunk.
hodgestar
parents:
diff changeset
46 from urllib2 import HTTPBasicAuthHandler
Copyright (C) 2012-2017 Edgewall Software