diff --git a/jira/resilientsession.py b/jira/resilientsession.py index 640b1e203..39ce7643d 100644 --- a/jira/resilientsession.py +++ b/jira/resilientsession.py @@ -180,7 +180,7 @@ def _jira_prepare(self, **original_kwargs) -> dict: prepared_kwargs["headers"] = request_headers data = original_kwargs.get("data", None) - if isinstance(data, dict): + if isinstance(data, dict) and data: # mypy ensures we don't do this, # but for people subclassing we should preserve old behaviour prepared_kwargs["data"] = json.dumps(data) diff --git a/tests/test_resilientsession.py b/tests/test_resilientsession.py index 7762ec8fa..e49b73fd7 100644 --- a/tests/test_resilientsession.py +++ b/tests/test_resilientsession.py @@ -242,3 +242,13 @@ def test_verify_is_forwarded(mocked_request_method: Mock): session.get(url="mocked_url", data={"some": "fake-data"}) kwargs = mocked_request_method.call_args.kwargs assert kwargs["verify"] == session.verify is False + + +@patch("requests.Session.request") +def test_empty_dict_body_not_forwarded(mocked_request_method: Mock): + # Disable retries for this test. + session = jira.resilientsession.ResilientSession(max_retries=0) + # Empty dictionary should not be converted to JSON + session.get(url="mocked_url", data={}) + kwargs = mocked_request_method.call_args.kwargs + assert "data" not in kwargs