Martin von Löwis avatar Martin von Löwis committed 4a186b8

Monkey-patch an OpenerDirector so that register will use the URL replacement.

Comments (0)

Files changed (1)

     def httpssh_open(self, req):
         return self.do_open(HTTPSSHConnection, req)
 
-def build_opener(*handlers):
-    return urllib2.build_opener(HTTPSSHHandler, *handlers)
-
 # upload.py insists on only supporting http and https URLs
 # Fake one, and make urlopen replace that with a httpssh URL
 _goodprefix = 'httpssh://submit@pypi.python.org/pypi'
 _badprefix = 'http://submit@pypi.python.org/pypi'
+class PyPIOpenerDirector(OpenerDirector):
+    def open(self, req, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
+        if req.get_full_url().startswith(_badprefix):
+            # parse type, then overwrite
+            req.get_type()
+            req.type = 'httpssh'
+        return OpenerDirector.open(self, req, data=data, timeout=timeout)
+
+def build_opener(*handlers):
+    opener = urllib2.build_opener(HTTPSSHHandler, *handlers)
+    # Monkey-patch class
+    opener.__class__ = PyPIOpenerDirector
+    return opener
+
 _opener = None
 def urlopen(req, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
     global _opener
     if _opener is None:
         _opener = build_opener()
-    if req.get_full_url().startswith(_badprefix):
-        # parse type, then overwrite
-        req.get_type()
-        req.type = 'httpssh'
     return _opener.open(req, data, timeout)
 
 def monkeypatch():
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.