From 6c7ad021c8c2b445381effcf9a51239c986adfc3 Mon Sep 17 00:00:00 2001 From: Frank Schreiner Date: Thu, 18 Aug 2022 11:54:58 +0000 Subject: [PATCH] reset "file current position" on errors If an error occurs while sending a file to the API (e.g. 401), the io handle is reused and the current postion is at the end of the file. This results in an empty value. This patch takes care that the current file postion gets resetted if a retransmission is required. --- osc/connection.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/osc/connection.py b/osc/connection.py index 2701ccba..0154c0f8 100644 --- a/osc/connection.py +++ b/osc/connection.py @@ -296,6 +296,9 @@ def http_request(method, url, headers=None, data=None, file=None): # prompt user if we should trust the certificate pool.trusted_cert_store.prompt_trust(cert, reason=e.reason) + if hasattr(data, 'seek'): + data.seek(0) + response = pool.urlopen( method, urlopen_url, body=data, headers=headers, preload_content=False, assert_same_host=assert_same_host @@ -307,6 +310,8 @@ def http_request(method, url, headers=None, data=None, file=None): success = handler.set_request_headers_after_401(url, headers, response) if success: break + if hasattr(data, 'seek'): + data.seek(0) response = pool.urlopen(method, urlopen_url, body=data, headers=headers, preload_content=False) if response.status / 100 != 2: