def context(request: RestRequest) -> Dict: """ Creates a context dict for the serializers. See https://stackoverflow.com/a/34444082 """ r = RestRequest(request._request) r.accepted_renderer = JSONRenderer return {'request': r}
def _create_dummy_request(self, path="/") -> Request: wsgi_request = APIRequestFactory().get(path) # Give access to all fields, so these can all be dumped. wsgi_request.user_scopes = UserScopes(query_params={}, request_scopes=[]) wsgi_request.user_scopes.has_any_scope = lambda *scopes: True wsgi_request.user_scopes.has_all_scopes = lambda *scopes: True # Wrap in DRF request object, like the view would have done. drf_request = Request(wsgi_request) drf_request.accepted_renderer = HALJSONRenderer() # Add what DSOViewMixin would have added drf_request.accept_crs = None drf_request.response_content_crs = None return drf_request
def test_fields_limit_works(api_rf, movie, fields): """Prove that serializer can limit output fields.""" django_request = api_rf.get("/", {"fields": fields}) drf_request = Request(django_request) drf_request.accepted_renderer = HALJSONRenderer() queryset = Movie.objects.all() serializer = MovieSerializer(many=True, instance=queryset, context={"request": drf_request}) paginator = DSOPageNumberPagination() paginator.paginate_queryset(queryset, drf_request) response = paginator.get_paginated_response(serializer.data) # Since response didn't to through APIView.finalize_response(), fix that: response.accepted_renderer = drf_request.accepted_renderer response.accepted_media_type = drf_request.accepted_renderer.media_type response.renderer_context = {"request": drf_request} data = read_response_json(response.render()) assert data == { "_links": { "self": { "href": drf_request.build_absolute_uri() }, }, "_embedded": { "movie": [{ "name": "foo123" }] }, "page": { "number": 1, "size": 20 }, } assert response["X-Pagination-Page"] == "1" assert response["X-Pagination-Limit"] == "20"
def test_removes_url_fields_if_accepted_renderer_is_not_browsable_api( self): drf_request = Request(HttpRequest()) drf_request.accepted_renderer = JSONRenderer() serializer = _SerializerWithUrlFields(context={'request': drf_request}) self.assertEqual(1, len(serializer.fields))
def test_keeps_url_fields_if_accepted_renderer_is_browsable_api(self): drf_request = Request(HttpRequest()) drf_request.accepted_renderer = BrowsableAPIRenderer() serializer = _SerializerWithUrlFields(context={'request': drf_request}) self.assertEqual(3, len(serializer.fields))
def to_drf_request(api_request): """Turns an API request into a DRF request.""" request = Request(api_request) request.accepted_renderer = HALJSONRenderer() return request