示例#1
0
def handle_api_call(http_request, url, api):
    if not action_resolver.is_valid_resource(url, api):
        return HttpResponseNotFound()

    action = action_resolver.resolve_action(http_request, url, api)
    if action is None:
        # we could not resolve what action to call for this http request.
        # return method not allowed response
        return HttpResponseNotAllowed("%s:%s" % (url, http_request.method))

    request_body = http_request.read()
    request_data = api_request_builder.build_request_data(request_body, http_request.META)
    if request_data.get('error_message'):
        return HttpResponseBadRequest(
            json.dumps(request_data), content_type='application/json')

    request = api_request_builder.build_request(http_request=http_request,
                                                url=url, api=api,
                                                request_data=request_data,
                                                request_body=request_body)

    response = action(request)

    http_response = django_response_builder.build_http_response(
        http_request, response)
    return http_response
示例#2
0
def handle_api_call(http_request, url, api):
    if not action_resolver.is_valid_resource(url, api):
        return HttpResponseNotFound()

    action = action_resolver.resolve_action(http_request, url, api)
    if action is None:
        # we could not resolve what action to call for this http request.
        # return method not allowed response
        return HttpResponseNotAllowed("%s:%s" % (url, http_request.method))

    request_body = http_request.read()
    request_data = api_request_builder.build_request_data(
        request_body, http_request.META)
    if request_data.get('error_message'):
        return HttpResponseBadRequest(json.dumps(request_data),
                                      content_type='application/json')

    request = api_request_builder.build_request(http_request=http_request,
                                                url=url,
                                                api=api,
                                                request_data=request_data,
                                                request_body=request_body)

    response = action(request)

    http_response = django_response_builder.build_http_response(
        http_request, response)
    return http_response
示例#3
0
    def test_resolve_non_existing_endpoint(self):
        mock_http_request = MagicMock()
        mock_http_request.method = "DELETE"
        mock_api = MagicMock(spec_set=[])

        action = action_resolver.resolve_action(mock_http_request, api=mock_api, url="foo")
        assert_that(action, equal_to(None))
示例#4
0
    def test_resolve_non_existing_endpoint(self):
        mock_http_request = MagicMock()
        mock_http_request.method = 'DELETE'
        mock_api = MagicMock(spec_set=[])

        action = action_resolver.resolve_action(mock_http_request,
                                                api=mock_api,
                                                url='foo')
        assert_that(action, equal_to(None))
示例#5
0
    def test_resolve_non_existing_action_options(self):
        mock_http_request = MagicMock()
        mock_http_request.method = "OPTIONS"
        mock_api = MagicMock()
        mock_resource = object()
        mock_api.resolve_resource.return_value = mock_resource

        action = action_resolver.resolve_action(mock_http_request, api=mock_api, url="foo")
        assert_that(action, equal_to(None))
示例#6
0
    def test_resolve_post_on_list_as_create_detail(self):
        mock_http_request = MagicMock()
        mock_http_request.method = "POST"
        mock_api = MagicMock()
        mock_resource = MagicMock()
        mock_api.resolve_resource.return_value = mock_resource
        mock_resource.create_detail = expected_create_action = MagicMock()

        action = action_resolver.resolve_action(mock_http_request, api=mock_api, url="foo")
        assert_that(action, equal_to(expected_create_action))
示例#7
0
    def test_resolve_detail_action_on_api(self):
        mock_http_request = MagicMock()
        mock_http_request.method = "DELETE"
        mock_api = MagicMock()
        mock_resource = MagicMock()
        mock_api.resolve_resource.return_value = mock_resource
        mock_resource.delete_detail = expected_delete_action = MagicMock()

        action = action_resolver.resolve_action(mock_http_request, api=mock_api, url="foo/1")
        assert_that(action, equal_to(expected_delete_action))
示例#8
0
    def test_resolve_non_existing_action_put(self):
        mock_http_request = MagicMock()
        mock_http_request.method = 'PUT'
        mock_api = MagicMock()
        mock_resource = object()
        mock_api.resolve_resource.return_value = mock_resource

        action = action_resolver.resolve_action(mock_http_request, api=mock_api,
                                                url='foo')
        assert_that(action, equal_to(None))
示例#9
0
    def test_resolve_non_existing_action_options(self):
        mock_http_request = MagicMock()
        mock_http_request.method = 'OPTIONS'
        mock_api = MagicMock()
        mock_resource = object()
        mock_api.resolve_resource.return_value = mock_resource

        action = action_resolver.resolve_action(mock_http_request,
                                                api=mock_api,
                                                url='foo')
        assert_that(action, equal_to(None))
示例#10
0
    def test_resolve_put_action_on_api(self):
        mock_http_request = MagicMock()
        mock_http_request.method = 'PUT'
        mock_api = MagicMock()
        mock_resource = MockResource()
        mock_api.resolve_resource.return_value = mock_resource
        mock_resource.create_or_update_detail = expected_action = MagicMock()

        action = action_resolver.resolve_action(mock_http_request, api=mock_api,
                                                url='foo/1')
        assert_that(action, equal_to(expected_action))
示例#11
0
    def test_resolve_view_action(self):
        mock_http_request = MagicMock()
        mock_http_request.method = 'GET'
        mock_api = MagicMock()
        mock_resource = MockViewResource()
        mock_api.resolve_resource.return_value = mock_resource
        mock_resource.read = expected_read_action = MagicMock()

        action = action_resolver.resolve_action(mock_http_request, api=mock_api,
                                                url='foo')
        assert_that(action, equal_to(expected_read_action))
示例#12
0
    def test_resolve_post_on_list_as_create_detail(self):
        mock_http_request = MagicMock()
        mock_http_request.method = 'POST'
        mock_api = MagicMock()
        mock_resource = MagicMock()
        mock_api.resolve_resource.return_value = mock_resource
        mock_resource.create_detail = expected_create_action = MagicMock()

        action = action_resolver.resolve_action(mock_http_request,
                                                api=mock_api,
                                                url='foo')
        assert_that(action, equal_to(expected_create_action))
示例#13
0
    def test_resolve_detail_action_on_api(self):
        mock_http_request = MagicMock()
        mock_http_request.method = 'DELETE'
        mock_api = MagicMock()
        mock_resource = MagicMock()
        mock_api.resolve_resource.return_value = mock_resource
        mock_resource.delete_detail = expected_delete_action = MagicMock()

        action = action_resolver.resolve_action(mock_http_request,
                                                api=mock_api,
                                                url='foo/1')
        assert_that(action, equal_to(expected_delete_action))