--- a/src/pyams_utils/protocol/http.py Sat Nov 23 01:24:11 2019 +0100
+++ b/src/pyams_utils/protocol/http.py Sat Nov 23 14:57:24 2019 +0100
@@ -10,49 +10,54 @@
# FOR A PARTICULAR PURPOSE.
#
+"""PyAMS_utils.protocol.http module
+
+This module provides an HTTP client class, which allows to easilly define proxies and
+authentication headers.
+"""
+
+import urllib.parse
+
+import httplib2
+
+
__docformat__ = 'restructuredtext'
-# import standard library
-import httplib2
-import urllib.parse
-
-# import interfaces
-
-# import packages
-
-
-class HTTPClient(object):
+class HTTPClient:
+ # pylint: disable=too-many-instance-attributes
"""HTTP client with proxy support"""
- def __init__(self, method, protocol, servername, url, params={}, credentials=(),
- proxy=(), rdns=True, proxy_auth=(), timeout=None, headers={}):
+ def __init__(self, method, protocol, servername, url, params=None, credentials=(),
+ proxy=(), rdns=True, proxy_auth=(), timeout=None, headers=None):
+ # pylint: disable=too-many-arguments
"""Intialize HTTP connection"""
self.connection = None
self.method = method
self.protocol = protocol
self.servername = servername
self.url = url
- self.params = params
+ self.params = params or {}
self.location = None
self.credentials = credentials
self.proxy = proxy
self.rdns = rdns
self.proxy_auth = proxy_auth
self.timeout = timeout
- self.headers = headers
- if 'User-Agent' not in headers:
+ self.headers = headers or {}
+ if 'User-Agent' not in self.headers:
self.headers['User-Agent'] = 'PyAMS HTTP Client/1.0'
def get_response(self):
"""Common HTTP request"""
if self.proxy and (len(self.proxy) == 2):
- proxy_info = httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP,
- proxy_host=self.proxy[0],
- proxy_port=self.proxy[1],
- proxy_rdns=self.rdns,
- proxy_user=self.proxy_auth and self.proxy_auth[0] or None,
- proxy_pass=self.proxy_auth and self.proxy_auth[1] or None)
+ proxy_info = httplib2.ProxyInfo(
+ httplib2.socks.PROXY_TYPE_HTTP,
+ proxy_host=self.proxy[0],
+ proxy_port=self.proxy[1],
+ proxy_rdns=self.rdns,
+ proxy_user=self.proxy_auth and self.proxy_auth[0] or None,
+ proxy_pass=self.proxy_auth and self.proxy_auth[1] or None)
else:
proxy_info = None
http = httplib2.Http(timeout=self.timeout, proxy_info=proxy_info)
@@ -65,14 +70,17 @@
return response, content
-def get_client(method, protocol, servername, url, params={}, credentials=(), proxy=(),
- rdns=True, proxy_auth=(), timeout=None, headers={}):
+def get_client(method, protocol, servername, url, params=None, credentials=(), proxy=(),
+ rdns=True, proxy_auth=(), timeout=None, headers=None):
+ # pylint: disable=too-many-arguments
"""HTTP client factory"""
return HTTPClient(method, protocol, servername, url, params, credentials, proxy,
rdns, proxy_auth, timeout, headers)
-def get_client_from_url(url, credentials=(), proxy=(), rdns=True, proxy_auth=(), timeout=None, headers={}):
+def get_client_from_url(url, credentials=(), proxy=(), rdns=True, proxy_auth=(), timeout=None,
+ headers=None):
+ # pylint: disable=too-many-arguments
"""HTTP client factory from URL"""
elements = urllib.parse.urlparse(url)
return HTTPClient('GET', elements.scheme, elements.netloc, elements.path, elements.params,