Skip to content

Commit 061a4ec

Browse files
committed
Bugzilla: Add requests_session __init__ parameter
This allows users to pass in a requests_session we will use for talking to remote bugzilla, which saves us having to expose various requests bits via the official API Signed-off-by: Cole Robinson <[email protected]>
1 parent b1e4d45 commit 061a4ec

3 files changed

Lines changed: 25 additions & 7 deletions

File tree

bugzilla/_session.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ class _BugzillaSession(object):
1717
Class to handle the backend agnostic 'requests' setup
1818
"""
1919
def __init__(self, url, user_agent,
20-
cookiecache=None, sslverify=True, cert=None,
21-
tokencache=None, api_key=None):
20+
cookiecache, sslverify, cert,
21+
tokencache, api_key, requests_session=None):
2222
self._url = url
2323
self._user_agent = user_agent
2424
self._scheme = urlparse(url)[0]
@@ -30,13 +30,16 @@ def __init__(self, url, user_agent,
3030
raise Exception("Invalid URL scheme: %s (%s)" % (
3131
self._scheme, url))
3232

33-
self._session = requests.Session()
33+
self._session = requests_session
34+
if not self._session:
35+
self._session = requests.Session()
36+
3437
if cert:
3538
self._session.cert = cert
3639
if self._cookiecache:
3740
self._session.cookies = self._cookiecache.get_cookiejar()
38-
39-
self._session.verify = sslverify
41+
if sslverify is False:
42+
self._session.verify = False
4043
self._session.headers["User-Agent"] = self._user_agent
4144
self._session.params["Bugzilla_api_key"] = self._api_key
4245
self._set_tokencache_param()

bugzilla/base.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ def get_rcfile_default_url():
176176
def __init__(self, url=-1, user=None, password=None, cookiefile=-1,
177177
sslverify=True, tokenfile=-1, use_creds=True, api_key=None,
178178
cert=None, configpaths=-1, basic_auth=False,
179-
force_rest=False, force_xmlrpc=False):
179+
force_rest=False, force_xmlrpc=False, requests_session=None):
180180
"""
181181
:param url: The bugzilla instance URL, which we will connect
182182
to immediately. Most users will want to specify this at
@@ -211,6 +211,9 @@ def __init__(self, url=-1, user=None, password=None, cookiefile=-1,
211211
:param force_xmlrpc: Force use of the XMLRPC API. If neither force_X
212212
parameter are specified, heuristics will be used to determine
213213
which API to use, with XMLRPC preferred for back compatability.
214+
:param requests_session: An optional requests.Session object the
215+
API will use to contact the remote bugzilla instance. This
216+
way the API user can set up whatever auth bits they may need.
214217
"""
215218
if url == -1:
216219
raise TypeError("Specify a valid bugzilla url, or pass url=None")
@@ -224,6 +227,7 @@ def __init__(self, url=-1, user=None, password=None, cookiefile=-1,
224227

225228
self._backend = None
226229
self._session = None
230+
self._user_requests_session = requests_session
227231
self._sslverify = sslverify
228232
self._cache = _BugzillaAPICache()
229233
self._bug_autorefresh = False
@@ -491,7 +495,8 @@ def connect(self, url=None):
491495
sslverify=self._sslverify,
492496
cert=self.cert,
493497
tokencache=self._tokencache,
494-
api_key=self.api_key)
498+
api_key=self.api_key,
499+
requests_session=self._user_requests_session)
495500
backendclass = self._get_backend_class()
496501
self._backend = backendclass(url, self._session)
497502

tests/test_api_misc.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,16 @@ def test_get_xmlrpc_proxy():
300300
assert hasattr(bz.get_requests_session(), "request")
301301

302302

303+
def test_requests_session_passthrough():
304+
import requests
305+
session = requests.Session()
306+
307+
bz = tests.mockbackend.make_bz(
308+
bz_kwargs={"requests_session": session, "sslverify": False})
309+
assert bz.get_requests_session() is session
310+
assert session.verify is False
311+
312+
303313
def test_query_url_fail():
304314
# test some handling of query from_url errors
305315
query = {"query_format": "advanced", "product": "FOO"}

0 commit comments

Comments
 (0)