@@ -65,10 +65,14 @@ def run(self, args, opts):
65
65
import setuptools
66
66
except ImportError :
67
67
raise UsageError ("setuptools not installed" )
68
+
69
+ urllib2 .install_opener (urllib2 .build_opener (HTTPRedirectHandler ))
70
+
68
71
if opts .list_targets :
69
72
for name , target in _get_targets ().items ():
70
73
print "%-20s %s" % (name , target ['url' ])
71
74
return
75
+
72
76
if opts .list_projects :
73
77
target = _get_target (opts .list_projects )
74
78
req = urllib2 .Request (_url (target , 'listprojects.json' ))
@@ -214,3 +218,24 @@ def _build_egg():
214
218
def _create_default_setup_py (** kwargs ):
215
219
with open ('setup.py' , 'w' ) as f :
216
220
f .write (_SETUP_PY_TEMPLATE % kwargs )
221
+
222
+
223
+ class HTTPRedirectHandler (urllib2 .HTTPRedirectHandler ):
224
+
225
+ def redirect_request (self , req , fp , code , msg , headers , newurl ):
226
+ newurl = newurl .replace (' ' , '%20' )
227
+ if code in (301 , 307 ):
228
+ return urllib2 .Request (newurl ,
229
+ data = req .get_data (),
230
+ headers = req .headers ,
231
+ origin_req_host = req .get_origin_req_host (),
232
+ unverifiable = True )
233
+ elif code in (302 , 303 ):
234
+ newheaders = dict ((k , v ) for k , v in req .headers .items ()
235
+ if k .lower () not in ("content-length" , "content-type" ))
236
+ return urllib2 .Request (newurl ,
237
+ headers = newheaders ,
238
+ origin_req_host = req .get_origin_req_host (),
239
+ unverifiable = True )
240
+ else :
241
+ raise urllib2 .HTTPError (req .get_full_url (), code , msg , headers , fp )
0 commit comments