python-apache-libcloud/support-pytest-8.2.patch
2024-09-03 04:50:47 +00:00

40 lines
1.7 KiB
Diff

From 44e923662205f2a2413fadb23715dc2934bff625 Mon Sep 17 00:00:00 2001
From: Steve Kowalik <steven@wedontsleep.org>
Date: Tue, 3 Sep 2024 14:30:51 +1000
Subject: [PATCH] Only call super() during MockHttp if required
With pytest 8.2 and above, any class that contains classes is collected,
which means they are instantiated, which MockHttp's superclasses do not
accept, since they require keyword arguments. To work around this, only
call the superclass's __init__ method if we are passed kwargs.
---
libcloud/test/__init__.py | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/libcloud/test/__init__.py b/libcloud/test/__init__.py
index d45c82c84d..1cc595f685 100644
--- a/libcloud/test/__init__.py
+++ b/libcloud/test/__init__.py
@@ -87,7 +87,7 @@ def read(self, chunk_size=None):
return StringIO.read(self)
-class MockHttp(LibcloudConnection):
+class MockHttp(LibcloudConnection, unittest.TestCase):
"""
A mock HTTP client/server suitable for testing purposes. This replaces
`HTTPConnection` by implementing its API and returning a mock response.
@@ -108,7 +108,11 @@ def __init__(self, *args, **kwargs):
# within a response
if isinstance(self, unittest.TestCase):
unittest.TestCase.__init__(self, "__init__")
- super().__init__(*args, **kwargs)
+ # When this class is collected, it is instantiated with no arguments,
+ # which breaks any superclasses that expect arguments, so only
+ # do so if we were passed any keyword arguments.
+ if kwargs:
+ super().__init__(*args, **kwargs)
def _get_request(self, method, url, body=None, headers=None):
# Find a method we can use for this request