John Vandenberg has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/234487

Change subject: Support requests 0.8.2
......................................................................

Support requests 0.8.2

Bug: T110637
Change-Id: I0a0edfe2d73321bb9f89f4f3ce6d235c08696578
---
M .travis.yml
M pywikibot/comms/http.py
M pywikibot/comms/threadedhttp.py
M setup.py
4 files changed, 40 insertions(+), 9 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/pywikibot/core 
refs/changes/87/234487/1

diff --git a/.travis.yml b/.travis.yml
index 7a60b58..f632682 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -21,6 +21,7 @@
       - graphviz
       - liblua5.1-0-dev
       - python-ipaddr
+      - python-requests
 
 before_install:
   # When PYSETUP_TEST_EXTRAS is not enabled, do not allow the
diff --git a/pywikibot/comms/http.py b/pywikibot/comms/http.py
index 835202f..4ea170c 100644
--- a/pywikibot/comms/http.py
+++ b/pywikibot/comms/http.py
@@ -38,10 +38,22 @@
 
 if sys.version_info[0] > 2:
     from http import cookiejar as cookielib
-    from urllib.parse import quote
+    from urllib.parse import quote, urlparse
 else:
     import cookielib
     from urllib2 import quote
+    from urlparse import urlparse
+
+try:
+    from requests.exceptions import SSLError
+except ImportError:
+
+    class SSLError():
+
+        """Fake SSLError."""
+
+        pass
+
 
 from pywikibot import config
 from pywikibot.exceptions import (
@@ -74,12 +86,16 @@
     pywikibot.debug(u"Loaded cookies from file.", _logger)
 
 session = requests.Session()
-session.cookies = cookie_jar
+if not isinstance(requests_oauthlib, Exception):
+    session.cookies = cookie_jar
+else:
+    session.cookies = requests.utils.dict_from_cookiejar(cookie_jar)
 
 
 # Prepare flush on quit
 def _flush():
-    session.close()
+    if hasattr(session, 'close'):
+        session.close()
     message = 'Closing network session.'
     if hasattr(sys, 'last_type'):
         # we quit because of an exception
@@ -255,7 +271,7 @@
     @return: authentication token
     @rtype: None or tuple of two str
     """
-    parsed_uri = requests.utils.urlparse(uri)
+    parsed_uri = urlparse(uri)
     netloc_parts = parsed_uri.netloc.split('.')
     netlocs = [parsed_uri.netloc] + ['.'.join(['*'] + netloc_parts[i + 1:])
                                      for i in range(len(netloc_parts))]
@@ -270,6 +286,8 @@
 
 
 def _http_process(session, http_request):
+    global cookie_jar
+
     method = http_request.method
     uri = http_request.uri
     body = http_request.body
@@ -292,9 +310,19 @@
         # Note that the connections are pooled which mean that a future
         # HTTPS request can succeed even if the certificate is invalid and
         # verify=True, when a request with verify=False happened before
+        kwargs = {
+            'auth': auth,
+            'timeout': timeout,
+            'verify': not ignore_validation,
+        }
+        if not hasattr(session, 'verify'):
+            del kwargs['verify']
+
         response = session.request(method, uri, data=body, headers=headers,
-                                   auth=auth, timeout=timeout,
-                                   verify=not ignore_validation)
+                                   **kwargs)
+
+        if isinstance(session.cookies, dict):
+            cookie_jar = requests.utils.cookiejar_from_dict(session.cookies)
     except Exception as e:
         http_request.data = e
     else:
@@ -309,7 +337,7 @@
     @type request: L{threadedhttp.HttpRequest}
     """
     # TODO: do some error correcting stuff
-    if isinstance(request.data, requests.exceptions.SSLError):
+    if isinstance(request.data, SSLError):
         if SSL_CERT_VERIFY_FAILED_MSG in str(request.data):
             raise FatalServerError(str(request.data))
 
diff --git a/pywikibot/comms/threadedhttp.py b/pywikibot/comms/threadedhttp.py
index 6c6f72a..b44b2a0 100644
--- a/pywikibot/comms/threadedhttp.py
+++ b/pywikibot/comms/threadedhttp.py
@@ -117,7 +117,8 @@
     def header_encoding(self):
         """Return charset given by the response header."""
         if not hasattr(self, '_header_encoding'):
-            pos = self.response_headers['content-type'].find('charset=')
+            content_type = self.response_headers['content-type']
+            pos = -1 if not content_type else content_type.find('charset=')
             if pos >= 0:
                 pos += len('charset=')
                 encoding = self.response_headers['content-type'][pos:]
diff --git a/setup.py b/setup.py
index bbff59b..f3b7b7b 100644
--- a/setup.py
+++ b/setup.py
@@ -131,7 +131,8 @@
         # them up and the warnings will stop. See
         # 
<https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning>
         # for more details.
-        dependencies += extra_deps['security']
+        # dependencies += extra_deps['security']
+        pass
 
     script_deps['data_ingestion.py'] = extra_deps['csv']
 

-- 
To view, visit https://gerrit.wikimedia.org/r/234487
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0a0edfe2d73321bb9f89f4f3ce6d235c08696578
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: John Vandenberg <jay...@gmail.com>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to