示例#1
0
    def test_get_async_response_connection_error(self, AsyncResult):
        """
        Test get_async_response connection error.
        """
        AsyncResult.side_effect = OperationalError
        self._publish_transportation_form_and_submit_instance()
        request = self.factory.post('/')
        request.user = self.user

        with self.assertRaises(ServiceUnavailable):
            get_async_response('job_uuid', request, self.xform)
示例#2
0
    def export_async(self, request, *args, **kwargs):
        job_uuid = request.query_params.get('job_uuid')
        export_type = request.query_params.get('format')
        query = request.query_params.get("query")
        xform = self.get_object()

        token = request.query_params.get('token')
        meta = request.query_params.get('meta')
        data_id = request.query_params.get('data_id')
        options = parse_request_export_options(request.query_params)

        options.update({
            'meta': meta,
            'token': token,
            'data_id': data_id,
        })
        if query:
            options.update({'query': query})

        if request.query_params.get('format') in ['csvzip', 'savzip']:
            # Overide renderer and mediatype because all response are
            # suppose to be in json
            # TODO: Avoid overiding the format query param for export type
            #  DRF uses format to select the renderer
            self.request.accepted_renderer = renderers.JSONRenderer()
            self.request.accepted_mediatype = 'application/json'

        if job_uuid:
            try:
                resp = get_async_response(job_uuid, request, xform)
            except Export.DoesNotExist:
                # if this does not exist retry it against the primary
                try:
                    with use_master:
                        resp = get_async_response(job_uuid, request, xform)
                except NameError:
                    resp = get_async_response(job_uuid, request, xform)
        else:
            resp = process_async_export(request, xform, export_type, options)

            if isinstance(resp, HttpResponseRedirect):
                payload = {
                    "details": _("Google authorization needed"),
                    "url": resp.url
                }
                return Response(data=payload,
                                status=status.HTTP_403_FORBIDDEN,
                                content_type="application/json")

        self.etag_data = '{}'.format(timezone.now())

        return Response(data=resp,
                        status=status.HTTP_202_ACCEPTED,
                        content_type="application/json")
示例#3
0
    def test_get_async_response_connection_error(self, AsyncResult):
        """
        Test get_async_response connection error.
        """
        AsyncResult.side_effect = OperationalError
        self._publish_transportation_form_and_submit_instance()
        request = self.factory.post('/')
        request.user = self.user

        with self.assertRaises(ServiceUnavailable):
            get_async_response('job_uuid', request, self.xform)
示例#4
0
    def test_get_async_response_connection_error(self, AsyncResult):
        """
        Test get_async_response connection error.
        """
        AsyncResult.side_effect = librabbitmq.ConnectionError
        settings.CELERY_TASK_ALWAYS_EAGER = True
        current_app.conf.CELERY_TASK_ALWAYS_EAGER = True
        self._publish_transportation_form_and_submit_instance()
        request = self.factory.post('/')
        request.user = self.user

        with self.assertRaises(ServiceUnavailable):
            get_async_response('job_uuid', request, self.xform)
示例#5
0
    def test_get_async_response_export_does_not_exist(self, AsyncResult):
        class MockAsyncResult(object):
            def __init__(self):
                self.state = 'SUCCESS'
                self.result = 1

        AsyncResult.return_value = MockAsyncResult()
        settings.CELERY_ALWAYS_EAGER = True
        current_app.conf.CELERY_ALWAYS_EAGER = True
        self._publish_transportation_form_and_submit_instance()
        request = self.factory.post('/')
        request.user = self.user

        with self.assertRaises(Http404):
            get_async_response('job_uuid', request, self.xform)
示例#6
0
    def test_get_async_response_when_result_changes_in_subsequent_calls(
            self, AsyncResult):
        """
        Test get_async_response export does not exist.
        """

        class MockAsyncResult(object):  # pylint: disable=R0903
            """Mock AsyncResult"""
            res = [1, {'PENDING': 'PENDING'}]

            def __init__(self):
                self.state = "PENDING"

            @property
            def result(self):
                """Return different states depending on when it's called"""
                return self.res.pop()

        AsyncResult.return_value = MockAsyncResult()
        self._publish_transportation_form_and_submit_instance()
        request = self.factory.post('/')
        request.user = self.user

        result = get_async_response('job_uuid', request, self.xform)
        self.assertEqual(result, {'job_status': 'PENDING', 'progress': '1'})
    def test_get_async_response_export_backlog_limit(self, AsyncResult):
        """
        Test get_async_response export backlog limit exceeded.
        """

        class MockAsyncResult(object):  # pylint: disable=R0903
            """Mock AsyncResult"""

            def __init__(self):
                pass

            @property
            def state(self):
                """Raise BacklogLimitExceeded"""
                raise BacklogLimitExceeded()

        AsyncResult.return_value = MockAsyncResult()
        settings.CELERY_ALWAYS_EAGER = True
        current_app.conf.CELERY_ALWAYS_EAGER = True
        self._publish_transportation_form_and_submit_instance()
        request = self.factory.post('/')
        request.user = self.user

        result = get_async_response('job_uuid', request, self.xform)
        self.assertEqual(result, {'job_status': 'PENDING'})
示例#8
0
    def export_async(self, request, *args, **kwargs):
        job_uuid = request.query_params.get('job_uuid')
        export_type = request.query_params.get('format')
        query = request.query_params.get("query")
        xform = self.get_object()

        token = request.query_params.get('token')
        meta = request.query_params.get('meta')
        data_id = request.query_params.get('data_id')
        options = parse_request_export_options(request.query_params)

        options.update({
            'meta': meta,
            'token': token,
            'data_id': data_id,
        })
        if query:
            options.update({'query': query})

        if job_uuid:
            try:
                resp = get_async_response(job_uuid, request, xform)
            except Export.DoesNotExist:
                # if this does not exist retry it against the primary
                try:
                    with use_master:
                        resp = get_async_response(job_uuid, request, xform)
                except NameError:
                    resp = get_async_response(job_uuid, request, xform)
        else:
            resp = process_async_export(request, xform, export_type, options)

            if isinstance(resp, HttpResponseRedirect):
                payload = {
                    "details": _("Google authorization needed"),
                    "url": resp.url
                }
                return Response(data=payload,
                                status=status.HTTP_403_FORBIDDEN,
                                content_type="application/json")

        self.etag_data = '{}'.format(timezone.now())

        return Response(data=resp,
                        status=status.HTTP_202_ACCEPTED,
                        content_type="application/json")
示例#9
0
    def test_get_async_response_export_does_not_exist(self, AsyncResult):
        """
        Test get_async_response export does not exist.
        """
        class MockAsyncResult(object):  # pylint: disable=R0903
            """Mock AsyncResult"""
            def __init__(self):
                self.state = 'SUCCESS'
                self.result = 1

        AsyncResult.return_value = MockAsyncResult()
        self._publish_transportation_form_and_submit_instance()
        request = self.factory.post('/')
        request.user = self.user

        with self.assertRaises(Http404):
            get_async_response('job_uuid', request, self.xform)
示例#10
0
    def export_async(self, request, *args, **kwargs):
        job_uuid = request.query_params.get('job_uuid')
        export_type = request.query_params.get('format')
        query = request.query_params.get("query")
        xform = self.get_object()

        token = request.query_params.get('token')
        meta = request.query_params.get('meta')
        data_id = request.query_params.get('data_id')
        options = parse_request_export_options(request.query_params)

        options.update({
            'meta': meta,
            'token': token,
            'data_id': data_id,
        })
        if query:
            options.update({'query': query})

        if job_uuid:
            try:
                resp = get_async_response(job_uuid, request, xform)
            except Export.DoesNotExist:
                # if this does not exist retry it against the primary
                try:
                    with use_master:
                        resp = get_async_response(job_uuid, request, xform)
                except NameError:
                    resp = get_async_response(job_uuid, request, xform)
        else:
            resp = process_async_export(request, xform, export_type, options)

            if isinstance(resp, HttpResponseRedirect):
                payload = {
                    "details": _("Google authorization needed"),
                    "url": resp.url
                }
                return Response(data=payload,
                                status=status.HTTP_403_FORBIDDEN,
                                content_type="application/json")

        self.etag_data = '{}'.format(timezone.now())

        return Response(data=resp,
                        status=status.HTTP_202_ACCEPTED,
                        content_type="application/json")
示例#11
0
    def test_get_async_response_export_does_not_exist(self, AsyncResult):
        """
        Test get_async_response export does not exist.
        """

        class MockAsyncResult(object):  # pylint: disable=R0903
            """Mock AsyncResult"""

            def __init__(self):
                self.state = 'SUCCESS'
                self.result = 1

        AsyncResult.return_value = MockAsyncResult()
        self._publish_transportation_form_and_submit_instance()
        request = self.factory.post('/')
        request.user = self.user

        with self.assertRaises(Http404):
            get_async_response('job_uuid', request, self.xform)
示例#12
0
    def test_get_async_response_export_backlog_limit(self, AsyncResult):
        """
        Test get_async_response export backlog limit exceeded.
        """

        class MockAsyncResult(object):  # pylint: disable=R0903
            """Mock AsyncResult"""

            def __init__(self):
                pass

            @property
            def state(self):
                """Raise BacklogLimitExceeded"""
                raise BacklogLimitExceeded()

        AsyncResult.return_value = MockAsyncResult()
        self._publish_transportation_form_and_submit_instance()
        request = self.factory.post('/')
        request.user = self.user

        result = get_async_response('job_uuid', request, self.xform)
        self.assertEqual(result, {'job_status': 'PENDING'})
示例#13
0
    def test_get_async_response_when_result_changes_in_subsequent_calls(
            self, AsyncResult):
        """
        Test get_async_response export does not exist.
        """
        class MockAsyncResult(object):  # pylint: disable=R0903
            """Mock AsyncResult"""
            res = [1, {'PENDING': 'PENDING'}]

            def __init__(self):
                self.state = "PENDING"

            @property
            def result(self):
                """Return different states depending on when it's called"""
                return self.res.pop()

        AsyncResult.return_value = MockAsyncResult()
        self._publish_transportation_form_and_submit_instance()
        request = self.factory.post('/')
        request.user = self.user

        result = get_async_response('job_uuid', request, self.xform)
        self.assertEqual(result, {'job_status': 'PENDING', 'progress': '1'})