def __init__(self, pool, request):
        """
        Creates a new query observer.

        :param pool: QueryObserverPool instance
        :param request: A `queryobserver.request.Request` instance
        """

        self.status = QueryObserver.STATUS_NEW
        self._pool = pool

        # Obtain a serializer by asking the viewset to provide one. We instantiate the
        # viewset with a fake request, so that the viewset methods work as expected.
        viewset = request.viewset_class()
        viewset.request = api_request.Request(request)
        viewset.request.method = request.method
        viewset.format_kwarg = None
        viewset.args = request.args
        viewset.kwargs = request.kwargs
        self._viewset = viewset
        self._request = request
        self._viewset_method = getattr(viewset, request.viewset_method)
        self._meta = Options(viewset, self._viewset_method)

        self._evaluating = 0
        self._last_evaluation = None
        self._last_results = collections.OrderedDict()
        self._subscribers = set()
        self._dependencies = set()
        self._initialization_future = None
        self.id = request.observe_id
    def request(self, viewset_class, **kwargs):
        request = observer_request.Request(
            viewset_class, 'list', api_request.Request(factory.get('/', kwargs))
        )

        # Simulate serialization.
        return pickle.loads(pickle.dumps(request))
Example #3
0
    def build_drf(params: Dict[str, Any]) -> drf.Request:
        """
        Builds rest_framework.request.Request.

        :param params: query params
        :return: built request
        """
        return drf.Request(build_django(params))
    def test_get_user_fails_no_authentication(self):
        http_request = http.HttpRequest()
        http_request.method = api_util.HTTPMethod.GET
        rest_request = request.Request(http_request)

        expected_permission = self.user_permissions.has_permission(
            request=rest_request)

        self.assertFalse(expected_permission)
    def test_create_new_user_has_permission(self):
        http_request = http.HttpRequest()
        http_request.method = api_util.HTTPMethod.POST.name
        rest_request = request.Request(http_request)

        expected_permission = self.user_permissions.has_permission(
            request=rest_request)

        self.assertTrue(expected_permission)
    def test_unauthorized_http_method(self):
        http_request = http.HttpRequest()
        http_request.method = api_util.HTTPMethod.PUT.name
        rest_request = request.Request(http_request)

        expected_permission = self.user_permissions.has_permission(
            request=rest_request)

        self.assertFalse(expected_permission)
    def test_search_no_permission(self):
        http_request = http.HttpRequest()
        http_request.method = api_util.HTTPMethod.POST.name
        rest_request = request.Request(http_request)

        expected_permission = self.search_permission.has_permission(
            request=rest_request)

        self.assertFalse(expected_permission)
    def test_update_user_no_authentication(self):
        http_request = http.HttpRequest()
        http_request.method = api_util.HTTPMethod.PUT.name

        self._create_test_user()
        rest_request = request.Request(http_request)

        expected_permission = self.user_permissions.has_permission(
            request=rest_request)

        self.assertFalse(expected_permission)
    def test_search_has_permission(self):
        http_request = http.HttpRequest()
        http_request.method = api_util.HTTPMethod.POST.name

        self._create_test_user()
        test.force_authenticate(http_request, user=models.User.objects.first())
        rest_request = request.Request(http_request)

        expected_permission = self.search_permission.has_permission(
            request=rest_request)

        self.assertTrue(expected_permission)
Example #10
0
    def test_staff_shown_instructor_files(self):
        get_request = request.Request(APIRequestFactory().get('path'))
        get_request.user = self.staff
        serializer = ag_serializers.ProjectSerializer(
            self.visible_public_project, context={'request': get_request})

        self.assertIn('instructor_files', serializer.data)

        serializer = ag_serializers.ProjectSerializer(
            self.all_projects, many=True, context={'request': get_request})

        for item in serializer.data:
            self.assertIn('instructor_files', item)
Example #11
0
    def test_admin_shown_closing_time(self):
        get_request = request.Request(APIRequestFactory().get('path'))
        get_request.user = self.admin
        serializer = ag_serializers.ProjectSerializer(
            self.visible_public_project, context={'request': get_request})

        self.assertIn('closing_time', serializer.data)

        serializer = ag_serializers.ProjectSerializer(
            self.all_projects, many=True, context={'request': get_request})

        for item in serializer.data:
            self.assertIn('closing_time', item)
Example #12
0
    def test_non_admin_not_shown_closing_time(self):
        for user in self.staff, self.enrolled, self.nobody:
            get_request = request.Request(APIRequestFactory().get('path'))
            get_request.user = user
            serializer = ag_serializers.ProjectSerializer(
                self.visible_public_project, context={'request': get_request})

            self.assertNotIn('closing_time', serializer.data)

            serializer = ag_serializers.ProjectSerializer(
                self.all_projects, many=True, context={'request': get_request})

            for item in serializer.data:
                self.assertNotIn('closing_time', item)
    def test_get_user_fails_accesses_unauthorized_account(self):
        http_request = http.HttpRequest()
        http_request.method = api_util.HTTPMethod.GET

        self._create_test_user()
        test.force_authenticate(http_request, user=models.User.objects.first())
        rest_request = request.Request(http_request)
        rest_request.context = {
            'kwargs': {
                'user_id': models.User.objects.first().id + 1,
            }
        }

        expected_permission = self.user_permissions.has_permission(
            request=rest_request)

        self.assertFalse(expected_permission)
    def test_update_user_has_permission(self):
        http_request = http.HttpRequest()
        http_request.method = api_util.HTTPMethod.PUT.name

        self._create_test_user()
        test.force_authenticate(http_request, user=models.User.objects.first())
        rest_request = request.Request(http_request)
        rest_request.context = {
            'kwargs': {
                'user_id': models.User.objects.first().id
            }
        }

        expected_permission = self.user_permissions.has_permission(
            request=rest_request)

        self.assertTrue(expected_permission)
    def __init__(self, request):
        """Create new query observer.

        :param request: A `queryobserver.request.Request` instance
        """

        # Obtain a serializer by asking the viewset to provide one. We instantiate the
        # viewset with a fake request, so that the viewset methods work as expected.
        viewset = request.viewset_class()
        viewset.request = api_request.Request(request)
        viewset.request.method = request.method
        viewset.format_kwarg = None
        viewset.args = request.args
        viewset.kwargs = request.kwargs
        self._viewset = viewset
        self._request = request
        self._viewset_method = getattr(viewset, request.viewset_method)
        self._meta = Options(viewset, self._viewset_method)
Example #16
0
    def test_browsable_renderer_put_render(self):
        """
        Test, that PUT method works with BrowsableAPIRenderer
        This was not working in the past, because of `_get_serializer`
        didn't allow `instance parameter.
        """
        data = {'blah': 'blah'}
        method = 'PUT'
        request = rest_request.Request(APIRequestFactory().get('blah'))
        input_view = (api_view([method]))(self._dummy_view)
        output_view = self.decorator(input_view)
        wrapper_cls = output_view.cls
        test_view_instance = wrapper_cls()

        renderer = renderers.BrowsableAPIRenderer()
        renderer.accepted_media_type = None
        renderer.renderer_context = {}
        response = renderer.get_raw_data_form(
            data, test_view_instance, method, request,
        )
        self.assertEqual(response.data, {})
Example #17
0
def test_browsable_renderer_put_render(input_put_view, decorator):
    """
    Test, that PUT method works with BrowsableAPIRenderer
    This was not working in the past, because of `_get_serializer`
    didn't allow `instance parameter.
    """
    data = {'blah': 'blah'}
    method = 'PUT'
    request = rest_request.Request(APIRequestFactory().get('blah'))
    output_view = decorator(input_put_view)
    wrapper_cls = _get_view_class(output_view)
    test_view_instance = wrapper_cls()

    renderer = renderers.BrowsableAPIRenderer()
    renderer.accepted_media_type = None
    renderer.renderer_context = {}
    response = renderer.get_raw_data_form(
        data,
        test_view_instance,
        method,
        request,
    )
    assert response.data == {}
Example #18
0
 def test_get_for_viewset_with_drf_request(self):
     req = request.Request(self.request)
     resp = utils.inline_render('GET', '/test-vs/', req)
     assert resp.data == {'data': 'test-vs'}
def create_request(viewset_class, **kwargs):
    request = observer_request.Request(
        viewset_class, 'list', api_request.Request(factory.get('/', kwargs))
    )

    return request