Updated Requests api to accept a 'cert' argument.
authorchadnickbok@gmail.com <chad@gaikai.com>
Thu, 15 Mar 2012 00:15:29 +0000 (17:15 -0700)
committerchadnickbok@gmail.com <chad@gaikai.com>
Thu, 15 Mar 2012 00:15:29 +0000 (17:15 -0700)
This argument can be either a string, containing the path to a
pem-formatted key and certificate chain, or a tuple of (cert, key).

When supplied a tuple, the values are paths to an SSL certificate
chain file and key, respectively.

requests/api.py
requests/models.py
requests/sessions.py

index 3c79646..3188a2d 100644 (file)
@@ -33,8 +33,7 @@ def request(method, url, **kwargs):
     :param config: (optional) A configuration dictionary.
     :param verify: (optional) if ``True``, the SSL cert will be verified. A CA_BUNDLE path can also be provided.
     :param prefetch: (optional) if ``True``, the response content will be immediately downloaded.
-    :param key_file: (optional) ssl client key file.
-    :param cert_file: (optional) ssl client cert file.
+    :param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair.
     """
 
     s = kwargs.pop('session') if 'session' in kwargs else sessions.session()
index d827042..717e36f 100644 (file)
@@ -64,8 +64,7 @@ class Request(object):
         _poolmanager=None,
         verify=None,
         session=None,
-        key_file=None,
-        cert_file=None):
+        cert=None):
 
         #: Dictionary of configurations for this request.
         self.config = dict(config or [])
@@ -146,8 +145,7 @@ class Request(object):
         self.verify = verify
 
         #: SSL Certificate
-        self.key_file = key_file
-        self.cert_file = cert_file
+        self.cert = cert
 
         if headers:
             headers = CaseInsensitiveDict(self.headers)
@@ -273,7 +271,8 @@ class Request(object):
                     _poolmanager=self._poolmanager,
                     proxies=self.proxies,
                     verify=self.verify,
-                    session=self.session
+                    session=self.session,
+                    cert=self.cert
                 )
 
                 request.send()
@@ -513,9 +512,12 @@ class Request(object):
             conn.cert_reqs = 'CERT_NONE'
             conn.ca_certs = None
 
-        if self.key_file and self.cert_file:
-            conn.key_file = self.key_file
-            conn.cert_file = self.cert_file
+        if self.cert:
+            if type(self.cert) is tuple:
+                conn.cert_file = self.cert[0]
+                conn.key_file = self.cert[1]
+            else:
+                conn.cert_file = self.cert
 
         if not self.sent or anyway:
 
index 90fbacf..61b9749 100644 (file)
@@ -64,7 +64,7 @@ class Session(object):
 
     __attrs__ = [
         'headers', 'cookies', 'auth', 'timeout', 'proxies', 'hooks',
-        'params', 'config', 'verify']
+        'params', 'config', 'verify', 'cert']
 
 
     def __init__(self,
@@ -78,8 +78,7 @@ class Session(object):
         config=None,
         prefetch=False,
         verify=True,
-        key_file=None,
-        cert_file=None):
+        cert=None):
 
         self.headers = headers or {}
         self.cookies = cookies or {}
@@ -91,8 +90,7 @@ class Session(object):
         self.config = config or {}
         self.prefetch = prefetch
         self.verify = verify
-        self.key_file = key_file
-        self.cert_file = cert_file
+        self.cert = cert
 
         for (k, v) in list(defaults.items()):
             self.config.setdefault(k, v)
@@ -136,8 +134,7 @@ class Session(object):
         config=None,
         prefetch=False,
         verify=None,
-        key_file=None,
-        cert_file=None):
+        cert=None):
 
         """Constructs and sends a :class:`Request <Request>`.
         Returns :class:`Response <Response>` object.
@@ -157,6 +154,7 @@ class Session(object):
         :param config: (optional) A configuration dictionary.
         :param prefetch: (optional) if ``True``, the response content will be immediately downloaded.
         :param verify: (optional) if ``True``, the SSL cert will be verified. A CA_BUNDLE path can also be provided.
+        :param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair.
         """
 
         method = str(method).upper()
@@ -194,8 +192,7 @@ class Session(object):
             proxies=proxies,
             config=config,
             verify=verify,
-            key_file=key_file,
-            cert_file=cert_file,
+            cert=cert,
             _poolmanager=self.poolmanager
         )