From 855dc43e6f22c362a055b306b40cc91b843c7cb3 Mon Sep 17 00:00:00 2001 From: Adam Williamson Date: Mon, 24 Jun 2024 12:10:47 -0700 Subject: [PATCH] Base64IO: set write buffer before doing attr check TestBase64IO.test_init_fails() fails in current Fedora Rawhide (with Python 3.13) because pytest complains about an unraisable exception: AttributeError: 'Base64IO' object has no attribute '_Base64IO__write_buffer' it seems like we're reaching `close()` (via `__exit__()`, I guess) even after raising an exception in `__init__()`, and that causes a problem because we never set `self.__write_buffer` if the required attrs check fails. To solve this, we can just set `self.__write_buffer` before doing the attr check. Signed-off-by: Adam Williamson --- src/ansible_runner/utils/base64io.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ansible_runner/utils/base64io.py b/src/ansible_runner/utils/base64io.py index 0a2422f1..d9cf9278 100644 --- a/src/ansible_runner/utils/base64io.py +++ b/src/ansible_runner/utils/base64io.py @@ -78,6 +78,9 @@ def __init__(self, wrapped: IO) -> None: :raises TypeError: if ``wrapped`` does not have attributes needed to determine the stream's state """ + # set before the attr check as we may reach close() after that + # check fails + self.__write_buffer = b"" required_attrs = ("read", "write", "close", "closed", "flush") if not all(hasattr(wrapped, attr) for attr in required_attrs): raise TypeError( @@ -86,7 +89,6 @@ def __init__(self, wrapped: IO) -> None: super().__init__() self.__wrapped = wrapped self.__read_buffer = b"" - self.__write_buffer = b"" def __enter__(self): """Return self on enter."""