diff --git a/debian/control b/debian/control index cd954f2d5..207a294ce 100644 --- a/debian/control +++ b/debian/control @@ -16,6 +16,7 @@ Depends: ${misc:Depends}, ${python:Depends}, graphviz, python-feedparser, python-imaging, + python-requests, python-vobject, uwsgi, uwsgi-plugin-python diff --git a/tests/utilities.py b/tests/utilities.py index 8fae3cc9d..0c2235692 100644 --- a/tests/utilities.py +++ b/tests/utilities.py @@ -272,9 +272,6 @@ class HttpRequestsMocking(object): self.headers = headers or {} self.length = len(data or '') - def getheader(self, header): - return self.headers.get(header, None) - if status is None: raise ConnectionError('error') return FakeResponse(status, data, headers), status, data, None diff --git a/wcs/qommon/misc.py b/wcs/qommon/misc.py index 094908e01..fb04fb8c2 100644 --- a/wcs/qommon/misc.py +++ b/wcs/qommon/misc.py @@ -20,10 +20,7 @@ import calendar import re import os import time -import httplib import urllib -import socket -import ssl import base64 import json import subprocess @@ -31,6 +28,8 @@ import tempfile import unicodedata import hashlib +import requests + try: from PIL import Image except ImportError: @@ -277,6 +276,7 @@ def _http_request(url, method='GET', body=None, headers={}, cert_file=None, time else: hostname, query = urllib.splithost(url[6:]) + auth = None if '@' in hostname: authenticator, hostname = hostname.split('@') if ':' in authenticator: @@ -284,39 +284,19 @@ def _http_request(url, method='GET', body=None, headers={}, cert_file=None, time else: username = authenticator password = '' - headers['Authorization'] = 'Basic %s' % base64.b64encode('%s:%s' % (username, password)) - - connection_kwargs = {'host': hostname} - if timeout: - connection_kwargs['timeout'] = timeout - if cert_file: - connection_kwargs['cert_file'] = cert_file - if url.startswith('http://'): - conn = httplib.HTTPConnection(**connection_kwargs) - else: # https - conn = httplib.HTTPSConnection(**connection_kwargs) - query = query.replace('&', '&') + auth = (username, password) try: - conn.request(method, query, body, headers) - response = conn.getresponse() - except socket.gaierror, (err, msg): - conn.close() - raise ConnectionError('error while connecting to %s (%s)' % (hostname, msg)) - except socket.timeout, err: - conn.close() + response = requests.request(method, url, headers=headers, data=body, + timeout=timeout, cert=cert_file) + except requests.Timeout: raise ConnectionError('connection timed out while fetching the page') - except socket.error, err: - conn.close() - raise ConnectionError('error while fetching the page (%s)' % err) - except ssl.CertificateError, err: - conn.close() - raise ConnectionError('certificate error when connecting (%s)' % err) + except requests.RequestException as err: + raise ConnectionError('error in http request to to %s (%s)' % (hostname, err)) else: - data = response.read() - status = response.status - auth_header = response.getheader('WWW-Authenticate') - conn.close() + data = response.content + status = response.status_code + auth_header = response.headers.get('WWW-Authenticate') return response, status, data, auth_header diff --git a/wcs/qommon/saml2.py b/wcs/qommon/saml2.py index f5fbe8247..b85653187 100644 --- a/wcs/qommon/saml2.py +++ b/wcs/qommon/saml2.py @@ -15,8 +15,6 @@ # along with this program; if not, see . import os -import httplib -import urllib import urlparse import time import sys diff --git a/wcs/wf/wscall.py b/wcs/wf/wscall.py index 47ac2bbde..c909c46e4 100644 --- a/wcs/wf/wscall.py +++ b/wcs/wf/wscall.py @@ -275,7 +275,7 @@ class WebserviceCallStatusItem(WorkflowStatusItem): return app_error_code = 0 - app_error_code_header = response.getheader('x-error-code') + app_error_code_header = response.headers.get('x-error-code') if app_error_code_header: # result is good only if header value is '0' try: @@ -337,7 +337,7 @@ class WebserviceCallStatusItem(WorkflowStatusItem): elif d.get('display_id'): formdata.id_display = d.get('display_id') else: # store result as attachment - content_type = response.getheader('content-type') or '' + content_type = response.headers.get('content-type') or '' if content_type: content_type = content_type.split(';')[0].strip().lower() workflow_data['%s_content_type' % self.varname] = content_type