Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions jira/resilientsession.py
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,18 @@ def _jira_prepare(self, **original_kwargs) -> dict:
if "verify" not in prepared_kwargs:
prepared_kwargs["verify"] = self.verify

if "proxies" not in prepared_kwargs and self.proxies:
# Session.request() only falls back to self.proxies when no
# "proxies" kwarg is passed at all, but by then
# merge_environment_settings() has already used setdefault() to
# fill an empty request-level proxies dict from the http_proxy/
# https_proxy environment variables, and merge_setting() let's
# that request-level dict win over self.proxies for any matching
# key. Passing self.proxies through explicitly here means it's
# already populated before the environment fallback runs, so it
# can only fill in gaps rather than being overridden by them.
prepared_kwargs["proxies"] = self.proxies

return prepared_kwargs

def request( # type: ignore[override] # An intentionally different override
Expand Down
27 changes: 27 additions & 0 deletions tests/test_resilientsession.py
Original file line number Diff line number Diff line change
Expand Up @@ -254,3 +254,30 @@ def test_empty_dict_body_not_forwarded(mocked_request_method: Mock):
session.get(url="mocked_url", data={})
kwargs = mocked_request_method.call_args.kwargs
assert kwargs.get("data") == {}


@patch("requests.Session.request")
def test_configured_proxies_are_forwarded(mocked_request_method: Mock):
# Disable retries for this test.
session = jira.resilientsession.ResilientSession(max_retries=0)
# A user-configured session proxy must be passed explicitly as the
# per-request "proxies" kwarg. Left unset, requests.Session.request()
# let's an env-derived http_proxy/https_proxy value (from
# merge_environment_settings()'s setdefault()) win over self.proxies
# for any matching key.
session.proxies = {
"http": "http://localhost:3128",
"https": "http://localhost:3128",
}
session.get(url="mocked_url")
kwargs = mocked_request_method.call_args.kwargs
assert kwargs.get("proxies") == session.proxies


@patch("requests.Session.request")
def test_no_proxies_kwarg_when_unconfigured(mocked_request_method: Mock):
# Disable retries for this test.
session = jira.resilientsession.ResilientSession(max_retries=0)
session.get(url="mocked_url")
kwargs = mocked_request_method.call_args.kwargs
assert "proxies" not in kwargs
Loading