def rf(url, data_or_user=None, user=None, middleware=None, expect=None, **kwargs): if type(data_or_user) is User and user is None: user = data_or_user elif 'data' not in kwargs: kwargs['data'] = data_or_user if 'format' not in kwargs and 'content_type' not in kwargs: kwargs['format'] = 'json' request = getattr(APIRequestFactory(), verb)(url, **kwargs) request_error = None try: view, view_args, view_kwargs = resolve( urllib.parse.urlparse(url)[2]) except Http404 as e: request_error = e if isinstance(kwargs.get('cookies', None), dict): for key, value in kwargs['cookies'].items(): request.COOKIES[key] = value if middleware: middleware.process_request(request) if user: force_authenticate(request, user=user) if not request_error: response = view(request, *view_args, **view_kwargs) else: response = response_for_exception(request, request_error) if middleware: middleware.process_response(request, response) if expect: if response.status_code != expect: if getattr(response, 'data', None): try: data_copy = response.data.copy() # Make translated strings printable for key, value in response.data.items(): if isinstance(value, list): response.data[key] = [] for item in value: response.data[key].append(str(item)) else: response.data[key] = str(value) except Exception: response.data = data_copy assert response.status_code == expect, 'Response data: {}'.format( getattr(response, 'data', None)) if hasattr(response, 'render'): response.render() __SWAGGER_REQUESTS__.setdefault( request.path, {})[(request.method.lower(), response.status_code)] = (response.get( 'Content-Type', None), response.content, kwargs.get('data')) return response
def get_response(self, request): from django.http import Http404 if self._should_handle(request.path): try: return self.serve(request) except Http404 as e: return response_for_exception(request, e) return super().get_response(request)
def get_response(self, request): from django.http import Http404 if self._should_handle(request.path): try: return self.serve(request) except Http404 as e: if settings.DEBUG: from django.views import debug return debug.technical_404_response(request, e) return response_for_exception(request, e) return super().get_response(request)
def inner(request): try: response = get_response(request) except TimeoutError as exc: log.warning( f'Timeout: {request.path}', extra={ 'status_code': 408, 'request': request }, ) resolver = get_resolver(get_urlconf()) response = get_exception_response(request, resolver, 408, exc) except Exception as exc: response = response_for_exception(request, exc) return response
def get_response(self, request): try: return self.serve(request) except Http404 as e: return response_for_exception(request, e)
def dispatch(self, request, *args, **kwargs): if settings.DEBUG is False: # Only available on DEBUG=True return response_for_exception(request, Http404()) return super().dispatch(request, *args, **kwargs)
async def get_response_async(self, request): try: return await sync_to_async(self.serve)(request) except Http404 as e: return response_for_exception(request, e)