Esempio n. 1
0
    def enketo(self, request, **kwargs):
        self.object = self.get_object()
        form_url = get_form_url(
            request, self.object.user.username, settings.ENKETO_PROTOCOL,
            xform_pk=self.object.pk)

        data = {'message': _(u"Enketo not properly configured.")}
        http_status = status.HTTP_400_BAD_REQUEST

        try:
            # pass default arguments to enketo_url to prepopulate form fields
            request_vars = request.GET
            defaults = generate_enketo_form_defaults(
                self.object, **request_vars)
            url = enketo_url(form_url, self.object.id_string, **defaults)
            preview_url = get_enketo_preview_url(request,
                                                 self.object.user.username,
                                                 self.object.id_string,
                                                 xform_pk=self.object.pk)
        except EnketoError as e:
            data = {'message': _(u"Enketo error: %s" % e)}
        else:
            if url and preview_url:
                http_status = status.HTTP_200_OK
                data = {"enketo_url": url, "enketo_preview_url": preview_url}

        return Response(data, http_status)
Esempio n. 2
0
    def test_get_enketo_defaults_with_multiple_params(self):
        """Test generate_enketo_form_defaults() with multiple params."""
        # create xform
        self._publish_transportation_form()
        # create kwargs with existing xform variable
        transportation_types = \
            'available_transportation_types_to_referral_facility'
        transportation_types_value = 'ambulance'

        frequency = 'frequency_to_referral_facility'
        frequency_value = 'daily'

        kwargs = {
            transportation_types: transportation_types_value,
            frequency: frequency_value
        }
        defaults = generate_enketo_form_defaults(self.xform, **kwargs)

        transportation_types_key = \
            "defaults[/data/transport/{}]".format(
                transportation_types)
        frequency_key = "defaults[/data/transport/"\
                        "loop_over_transport_types_frequency/"\
                        "{}/{}]".format(transportation_types_value, frequency)
        self.assertIn(transportation_types_key, defaults)
        self.assertIn(frequency_key, defaults)
Esempio n. 3
0
 def test_get_enketo_defaults_with_non_existent_field(self):
     # create xform
     self._publish_transportation_form()
     # create kwargs with NON-existing xform variable
     kwargs = {'name': 'bla'}
     defaults = generate_enketo_form_defaults(self.xform, **kwargs)
     self.assertEqual(defaults, {})
 def test_get_enketo_defaults_with_non_existent_field(self):
     # create xform
     self._publish_transportation_form()
     # create kwargs with NON-existing xform variable
     kwargs = {'name': 'bla'}
     defaults = generate_enketo_form_defaults(self.xform, **kwargs)
     self.assertEqual(defaults, {})
Esempio n. 5
0
    def test_get_enketo_defaults_with_multiple_params(self):
        """Test generate_enketo_form_defaults() with multiple params."""
        # create xform
        self._publish_transportation_form()
        # create kwargs with existing xform variable
        transportation_types = \
            'available_transportation_types_to_referral_facility'
        transportation_types_value = 'ambulance'

        frequency = 'frequency_to_referral_facility'
        frequency_value = 'daily'

        kwargs = {
            transportation_types: transportation_types_value,
            frequency: frequency_value
        }
        defaults = generate_enketo_form_defaults(self.xform, **kwargs)

        transportation_types_key = \
            "defaults[/transportation/transport/{}]".format(
                transportation_types)
        frequency_key = "defaults[/transportation/transport/"\
                        "loop_over_transport_types_frequency/"\
                        "{}/{}]".format(transportation_types_value, frequency)
        self.assertIn(transportation_types_key, defaults)
        self.assertIn(frequency_key, defaults)
Esempio n. 6
0
    def test_get_enketo_defaults_without_vars(self):
        # create xform
        self._publish_transportation_form()
        # create map without variables
        defaults = generate_enketo_form_defaults(self.xform)

        # should return empty default map
        self.assertEqual(defaults, {})
    def test_get_enketo_defaults_without_vars(self):
        # create xform
        self._publish_transportation_form()
        # create map without variables
        defaults = generate_enketo_form_defaults(self.xform)

        # should return empty default map
        self.assertEqual(defaults, {})
Esempio n. 8
0
    def test_get_enketo_defaults_with_right_xform(self):
        """Test generate_enketo_form_defaults() with xform vars."""
        # create xform
        self._publish_transportation_form()
        # create kwargs with existing xform variable
        xform_variable_name = \
            'available_transportation_types_to_referral_facility'
        xform_variable_value = 'ambulance'
        kwargs = {xform_variable_name: xform_variable_value}
        defaults = generate_enketo_form_defaults(self.xform, **kwargs)

        key = "defaults[/data/transport/{}]".format(xform_variable_name)
        self.assertEqual(defaults, {key: xform_variable_value})
Esempio n. 9
0
    def test_get_enketo_defaults_with_right_xform(self):
        """Test generate_enketo_form_defaults() with xform vars."""
        # create xform
        self._publish_transportation_form()
        # create kwargs with existing xform variable
        xform_variable_name = \
            'available_transportation_types_to_referral_facility'
        xform_variable_value = 'ambulance'
        kwargs = {xform_variable_name: xform_variable_value}
        defaults = generate_enketo_form_defaults(self.xform, **kwargs)

        key = "defaults[/transportation/transport/{}]".format(
            xform_variable_name)
        self.assertEqual(defaults, {key: xform_variable_value})
Esempio n. 10
0
    def enketo(self, request, **kwargs):
        """Expose enketo urls."""
        survey_type = self.kwargs.get('survey_type') or \
            request.GET.get('survey_type')
        self.object = self.get_object()
        form_url = get_form_url(request,
                                self.object.user.username,
                                protocol=settings.ENKETO_PROTOCOL,
                                xform_pk=self.object.pk,
                                generate_consistent_urls=True)

        data = {'message': _(u"Enketo not properly configured.")}
        http_status = status.HTTP_400_BAD_REQUEST

        try:
            # pass default arguments to enketo_url to prepopulate form fields
            request_vars = request.GET
            defaults = generate_enketo_form_defaults(self.object,
                                                     **request_vars)
            url = enketo_url(form_url, self.object.id_string, **defaults)
            preview_url = get_enketo_preview_url(request,
                                                 self.object.user.username,
                                                 self.object.id_string,
                                                 xform_pk=self.object.pk)
        except EnketoError as e:
            data = {'message': _(u"Enketo error: %s" % e)}
        else:
            if survey_type == 'single':
                single_submit_url = get_enketo_single_submit_url(
                    request,
                    self.object.user.username,
                    self.object.id_string,
                    xform_pk=self.object.pk)
                data = {"single_submit_url": single_submit_url}
            elif url and preview_url:
                http_status = status.HTTP_200_OK
                data = {"enketo_url": url, "enketo_preview_url": preview_url}

        return Response(data, http_status)
Esempio n. 11
0
    def enketo(self, request, **kwargs):
        """Expose enketo urls."""
        survey_type = self.kwargs.get('survey_type') or \
            request.GET.get('survey_type')
        self.object = self.get_object()
        form_url = get_form_url(
            request, self.object.user.username, settings.ENKETO_PROTOCOL,
            xform_pk=self.object.pk)

        data = {'message': _(u"Enketo not properly configured.")}
        http_status = status.HTTP_400_BAD_REQUEST

        try:
            # pass default arguments to enketo_url to prepopulate form fields
            request_vars = request.GET
            defaults = generate_enketo_form_defaults(
                self.object, **request_vars)
            url = enketo_url(
                form_url, self.object.id_string, **defaults)
            preview_url = get_enketo_preview_url(request,
                                                 self.object.user.username,
                                                 self.object.id_string,
                                                 xform_pk=self.object.pk)
        except EnketoError as e:
            data = {'message': _(u"Enketo error: %s" % e)}
        else:
            if survey_type == 'single':
                single_submit_url = get_enketo_single_submit_url(
                    request, self.object.user.username, self.object.id_string,
                    xform_pk=self.object.pk)
                data = {"single_submit_url": single_submit_url}
            elif url and preview_url:
                http_status = status.HTTP_200_OK
                data = {"enketo_url": url,
                        "enketo_preview_url": preview_url}

        return Response(data, http_status)
Esempio n. 12
0
    def enketo(self, request, **kwargs):
        self.object = self.get_object()
        form_url = _get_form_url(request, self.object.user.username)

        data = {'message': _(u"Enketo not properly configured.")}
        http_status = status.HTTP_400_BAD_REQUEST

        try:
            # pass default arguments to enketo_url to prepopulate form fields
            request_vars = request.GET
            defaults = generate_enketo_form_defaults(
                self.object, **request_vars)
            url = enketo_url(form_url, self.object.id_string, **defaults)
            preview_url = get_enketo_preview_url(request,
                                                 request.user.username,
                                                 self.object.id_string)
        except EnketoError:
            pass
        else:
            if url and preview_url:
                http_status = status.HTTP_200_OK
                data = {"enketo_url": url, "enketo_preview_url": preview_url}

        return Response(data, http_status)