2
0
Эх сурвалжийг харах

test: factor out request backoff

Nicolas Duchon 2 долоо хоног өмнө
parent
commit
13b6f5d29e
1 өөрчлөгдсөн 19 нэмэгдсэн , 30 устгасан
  1. 19 30
      test/conftest.py

+ 19 - 30
test/conftest.py

@@ -104,47 +104,36 @@ class RequestsForDocker:
         nginx_proxy_container = self.get_nginx_proxy_container()
         return container_ip(nginx_proxy_container)
 
-    def get(self, *args, **kwargs) -> Response:
+    def _with_backoff(self, method_name, *args, **kwargs) -> Response:
+        """Apply backoff retry logic to any session HTTP method."""
         with ipv6(kwargs.pop('ipv6', False)):
-            @backoff.on_predicate(backoff.constant, lambda r: r.status_code in (404, 502), interval=.3, max_tries=30, jitter=None)
-            def _get(*_args, **_kwargs):
-                return self.session.get(*_args, **_kwargs)
-            return _get(*args, **kwargs)
+            @backoff.on_predicate(
+                backoff.constant,
+                lambda r: r.status_code in (404, 502),
+                interval=.25,
+                max_tries=20
+            )
+            def _request(*_args, **_kwargs):
+                return getattr(self.session, method_name)(*_args, **_kwargs)
+            return _request(*args, **kwargs)
+    
+    def get(self, *args, **kwargs) -> Response:
+        return self._with_backoff('get', *args, **kwargs)
 
     def post(self, *args, **kwargs) -> Response:
-        with ipv6(kwargs.pop('ipv6', False)):
-            @backoff.on_predicate(backoff.constant, lambda r: r.status_code in (404, 502), interval=.3, max_tries=30, jitter=None)
-            def _post(*_args, **_kwargs):
-                return self.session.post(*_args, **_kwargs)
-            return _post(*args, **kwargs)
+        return self._with_backoff('post', *args, **kwargs)
 
     def put(self, *args, **kwargs) -> Response:
-        with ipv6(kwargs.pop('ipv6', False)):
-            @backoff.on_predicate(backoff.constant, lambda r: r.status_code in (404, 502), interval=.3, max_tries=30, jitter=None)
-            def _put(*_args, **_kwargs):
-                return self.session.put(*_args, **_kwargs)
-            return _put(*args, **kwargs)
+        return self._with_backoff('put', *args, **kwargs)
 
     def head(self, *args, **kwargs) -> Response:
-        with ipv6(kwargs.pop('ipv6', False)):
-            @backoff.on_predicate(backoff.constant, lambda r: r.status_code in (404, 502), interval=.3, max_tries=30, jitter=None)
-            def _head(*_args, **_kwargs):
-                return self.session.head(*_args, **_kwargs)
-            return _head(*args, **kwargs)
+        return self._with_backoff('head', *args, **kwargs)
 
     def delete(self, *args, **kwargs) -> Response:
-        with ipv6(kwargs.pop('ipv6', False)):
-            @backoff.on_predicate(backoff.constant, lambda r: r.status_code in (404, 502), interval=.3, max_tries=30, jitter=None)
-            def _delete(*_args, **_kwargs):
-                return self.session.delete(*_args, **_kwargs)
-            return _delete(*args, **kwargs)
+        return self._with_backoff('delete', *args, **kwargs)
 
     def options(self, *args, **kwargs) -> Response:
-        with ipv6(kwargs.pop('ipv6', False)):
-            @backoff.on_predicate(backoff.constant, lambda r: r.status_code in (404, 502), interval=.3, max_tries=30, jitter=None)
-            def _options(*_args, **_kwargs):
-                return self.session.options(*_args, **_kwargs)
-            return _options(*args, **kwargs)
+        return self._with_backoff('options', *args, **kwargs)
 
     def __getattr__(self, name):
         return getattr(requests, name)