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)
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)
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_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)
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_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})
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})
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)
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)
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)