Skip to content

Commit 8ae41ee

Browse files
fix: improve handling of response
Fixes error, when response is not from ninja or drf
1 parent ef3c8b5 commit 8ae41ee

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

openapi_tester/clients.py

+4
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ def request(self, *args, **kwargs) -> Response: # type: ignore[override]
4444
response_handler = ResponseHandlerFactory.create(
4545
*args, response=response, **kwargs
4646
)
47+
if not response_handler:
48+
return response
4749
if self._is_successful_response(response):
4850
self.schema_tester.validate_request(response_handler=response_handler)
4951
self.schema_tester.validate_response(response_handler=response_handler)
@@ -145,6 +147,8 @@ def request(self, *args, **kwargs) -> Response:
145147
response_handler = ResponseHandlerFactory.create(
146148
*args, response=response, path_prefix=self._ninja_path_prefix, **kwargs
147149
)
150+
if not response_handler:
151+
return response
148152
if self._is_successful_response(response):
149153
self.schema_tester.validate_request(response_handler=response_handler)
150154
self.schema_tester.validate_response(response_handler)

openapi_tester/response_handler_factory.py

+18-7
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@
33
Module that contains the factory to create response handlers.
44
"""
55

6+
import contextlib
67
from typing import TYPE_CHECKING, Union
78

8-
from rest_framework.response import Response
9-
109
from openapi_tester.response_handler import (
1110
DjangoNinjaResponseHandler,
1211
DRFResponseHandler,
@@ -26,8 +25,20 @@ class ResponseHandlerFactory:
2625

2726
@staticmethod
2827
def create(
29-
*request_args, response: Union[Response, "HttpResponse"], **kwargs
30-
) -> "ResponseHandler":
31-
if isinstance(response, Response):
32-
return DRFResponseHandler(response=response)
33-
return DjangoNinjaResponseHandler(*request_args, response=response, **kwargs)
28+
*request_args,
29+
response: "HttpResponse",
30+
**kwargs,
31+
) -> Union["ResponseHandler", None]:
32+
with contextlib.suppress(ImportError):
33+
from rest_framework.response import Response as DRFResponse
34+
35+
if isinstance(response, DRFResponse):
36+
return DRFResponseHandler(response=response)
37+
with contextlib.suppress(ImportError):
38+
from ninja.testing.client import NinjaResponse
39+
40+
if isinstance(response, NinjaResponse):
41+
return DjangoNinjaResponseHandler(
42+
*request_args, response=response, **kwargs
43+
)
44+
return None

0 commit comments

Comments
 (0)