]> git.ipfire.org Git - thirdparty/python-fints.git/commitdiff
Wrap transport errors as FinTSConnectionError (#215) master
authorMoritz <mm@mxs.de>
Tue, 2 Jun 2026 16:38:19 +0000 (15:38 -0100)
committerGitHub <noreply@github.com>
Tue, 2 Jun 2026 16:38:19 +0000 (18:38 +0200)
fints/connection.py
tests/test_connection.py [new file with mode: 0644]

index c01bb0355abf0f8fbcc6076d1d9f4d1e801f1284..ad90f81c716a8b1c4cddc45189dfa37fba71a573 100644 (file)
@@ -37,12 +37,15 @@ class FinTSHTTPSConnection:
             logger.debug("Sending {}>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n{}\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n".format("(abbrv.)" if log_configuration.reduced else "", log_out.getvalue()))
             log_out.truncate(0)
 
-        r = self.session.post(
-            self.url, data=base64.b64encode(msg.render_bytes()),
-            headers={
-                'Content-Type': 'text/plain',
-            },
-        )
+        try:
+            r = self.session.post(
+                self.url, data=base64.b64encode(msg.render_bytes()),
+                headers={
+                    'Content-Type': 'text/plain',
+                },
+            )
+        except (requests.RequestException, OSError) as e:
+            raise FinTSConnectionError("Could not connect to FinTS endpoint: {}".format(e)) from e
 
         if r.status_code < 200 or r.status_code > 299:
             raise FinTSConnectionError('Bad status code {}'.format(r.status_code))
diff --git a/tests/test_connection.py b/tests/test_connection.py
new file mode 100644 (file)
index 0000000..9c18b34
--- /dev/null
@@ -0,0 +1,30 @@
+import pytest
+import requests
+
+from fints.connection import FinTSHTTPSConnection
+from fints.exceptions import FinTSConnectionError
+
+
+class DummyMessage:
+    segments = []
+
+    def print_nested(self, stream=None, **kwargs):
+        pass
+
+    def render_bytes(self):
+        return b"dummy"
+
+
+def test_send_wraps_transport_errors():
+    connection = FinTSHTTPSConnection("https://example.invalid/fints")
+
+    def raise_timeout(*args, **kwargs):
+        raise requests.exceptions.Timeout("request timed out")
+
+    connection.session.post = raise_timeout
+
+    with pytest.raises(FinTSConnectionError) as excinfo:
+        connection.send(DummyMessage())
+
+    assert "request timed out" in str(excinfo.value)
+    assert isinstance(excinfo.value.__cause__, requests.exceptions.Timeout)