summaryrefslogtreecommitdiff
path: root/eventlet/green/urllib
diff options
context:
space:
mode:
Diffstat (limited to 'eventlet/green/urllib')
-rw-r--r--eventlet/green/urllib/__init__.py40
-rw-r--r--eventlet/green/urllib/error.py4
-rw-r--r--eventlet/green/urllib/parse.py3
-rw-r--r--eventlet/green/urllib/request.py44
-rw-r--r--eventlet/green/urllib/response.py3
5 files changed, 94 insertions, 0 deletions
diff --git a/eventlet/green/urllib/__init__.py b/eventlet/green/urllib/__init__.py
new file mode 100644
index 0000000..7cb4ea6
--- /dev/null
+++ b/eventlet/green/urllib/__init__.py
@@ -0,0 +1,40 @@
+from eventlet import patcher
+from eventlet.green import socket
+from eventlet.green import time
+from eventlet.green import httplib
+from eventlet.green import ftplib
+from eventlet.support import six
+
+if six.PY2:
+ to_patch = [('socket', socket), ('httplib', httplib),
+ ('time', time), ('ftplib', ftplib)]
+ try:
+ from eventlet.green import ssl
+ to_patch.append(('ssl', ssl))
+ except ImportError:
+ pass
+
+ patcher.inject('urllib', globals(), *to_patch)
+ try:
+ URLopener
+ except NameError:
+ patcher.inject('urllib.request', globals(), *to_patch)
+
+
+ # patch a bunch of things that have imports inside the
+ # function body; this is lame and hacky but I don't feel
+ # too bad because urllib is a hacky pile of junk that no
+ # one should be using anyhow
+ URLopener.open_http = patcher.patch_function(URLopener.open_http, ('httplib', httplib))
+ if hasattr(URLopener, 'open_https'):
+ URLopener.open_https = patcher.patch_function(URLopener.open_https, ('httplib', httplib))
+
+ URLopener.open_ftp = patcher.patch_function(URLopener.open_ftp, ('ftplib', ftplib))
+ ftpwrapper.init = patcher.patch_function(ftpwrapper.init, ('ftplib', ftplib))
+ ftpwrapper.retrfile = patcher.patch_function(ftpwrapper.retrfile, ('ftplib', ftplib))
+
+ del patcher
+
+ # Run test program when run as a script
+ if __name__ == '__main__':
+ main()
diff --git a/eventlet/green/urllib/error.py b/eventlet/green/urllib/error.py
new file mode 100644
index 0000000..6913813
--- /dev/null
+++ b/eventlet/green/urllib/error.py
@@ -0,0 +1,4 @@
+from eventlet import patcher
+from eventlet.green.urllib import response
+patcher.inject('urllib.error', globals(), ('urllib.response', response))
+del patcher
diff --git a/eventlet/green/urllib/parse.py b/eventlet/green/urllib/parse.py
new file mode 100644
index 0000000..f3a8924
--- /dev/null
+++ b/eventlet/green/urllib/parse.py
@@ -0,0 +1,3 @@
+from eventlet import patcher
+patcher.inject('urllib.parse', globals())
+del patcher
diff --git a/eventlet/green/urllib/request.py b/eventlet/green/urllib/request.py
new file mode 100644
index 0000000..8160bb9
--- /dev/null
+++ b/eventlet/green/urllib/request.py
@@ -0,0 +1,44 @@
+from eventlet import patcher
+from eventlet.green import ftplib, os, socket, time
+from eventlet.green.http import client as http_client
+from eventlet.green.urllib import error, parse, response
+
+# TODO should we also have green email version?
+# import email
+
+
+to_patch = [
+ ('http.client', http_client),
+ ('os', os),
+ ('socket', socket),
+ ('time', time),
+ ('urllib.error', error),
+ ('urllib.parse', parse),
+ ('urllib.response', response),
+]
+
+try:
+ from eventlet.green import ssl
+except ImportError:
+ pass
+else:
+ to_patch.append(('ssl', ssl))
+
+patcher.inject('urllib.request', globals(), *to_patch)
+del to_patch
+
+to_patch_in_functions = [('ftplib', ftplib)]
+del ftplib
+
+FTPHandler.ftp_open = patcher.patch_function(FTPHandler.ftp_open, *to_patch_in_functions)
+URLopener.open_ftp = patcher.patch_function(URLopener.open_ftp, *to_patch_in_functions)
+
+ftperrors = patcher.patch_function(ftperrors, *to_patch_in_functions)
+
+ftpwrapper.init = patcher.patch_function(ftpwrapper.init, *to_patch_in_functions)
+ftpwrapper.retrfile = patcher.patch_function(ftpwrapper.retrfile, *to_patch_in_functions)
+
+del error
+del parse
+del response
+del to_patch_in_functions
diff --git a/eventlet/green/urllib/response.py b/eventlet/green/urllib/response.py
new file mode 100644
index 0000000..f9aaba5
--- /dev/null
+++ b/eventlet/green/urllib/response.py
@@ -0,0 +1,3 @@
+from eventlet import patcher
+patcher.inject('urllib.response', globals())
+del patcher