def kml_export(request, username, id_string): # read the locations from the database owner = get_object_or_404(User, username__iexact=username) xform = get_object_or_404(XForm, id_string__exact=id_string, user=owner) helper_auth_helper(request) if not has_permission(xform, owner, request): return HttpResponseForbidden(_(u'Not shared.')) data = {'data': kml_export_data(id_string, user=owner)} response = \ render(request, "survey.kml", data, content_type="application/vnd.google-earth.kml+xml") response['Content-Disposition'] = \ disposition_ext_and_date(id_string, 'kml') audit = {"xform": xform.id_string, "export_type": Export.KML_EXPORT} audit_log( Actions.EXPORT_CREATED, request.user, owner, _("Created KML export on '%(id_string)s'.") % { 'id_string': xform.id_string, }, audit, request) # log download as well audit_log( Actions.EXPORT_DOWNLOADED, request.user, owner, _("Downloaded KML export on '%(id_string)s'.") % { 'id_string': xform.id_string, }, audit, request) return response
def kml_export(request, username, id_string): # read the locations from the database owner = get_object_or_404(User, username__iexact=username) xform = get_object_or_404(XForm, id_string__exact=id_string, user=owner) helper_auth_helper(request) if not has_permission(xform, owner, request): return HttpResponseForbidden(_(u'Not shared.')) data = {'data': kml_export_data(id_string, user=owner)} response = \ render(request, "survey.kml", data, content_type="application/vnd.google-earth.kml+xml") response['Content-Disposition'] = \ disposition_ext_and_date(id_string, 'kml') audit = { "xform": xform.id_string, "export_type": Export.KML_EXPORT } audit_log( Actions.EXPORT_CREATED, request.user, owner, _("Created KML export on '%(id_string)s'.") % { 'id_string': xform.id_string, }, audit, request) # log download as well audit_log( Actions.EXPORT_DOWNLOADED, request.user, owner, _("Downloaded KML export on '%(id_string)s'.") % { 'id_string': xform.id_string, }, audit, request) return response
def test_kml_export_data(self): """ Test kml_export_data(id_string, user, xform=None). """ kml_md = """ | survey | | | type | name | label | | | geopoint | gps | GPS | | | select one fruits | fruit | Fruit | | choices | | | list name | name | label | | | fruits | orange | Orange | | | fruits | mango | Mango | """ xform1 = self._publish_markdown(kml_md, self.user, id_string='a') xform2 = self._publish_markdown(kml_md, self.user, id_string='b') xml = '<data id="a"><gps>-1.28 36.83</gps><fruit>orange</fruit></data>' Instance(xform=xform1, xml=xml).save() xml = '<data id="b"><gps>32.85 13.04</gps><fruit>mango</fruit></data>' Instance(xform=xform2, xml=xml).save() data = { 'xforms': [ "http://testserver/api/v1/forms/%s" % xform1.pk, "http://testserver/api/v1/forms/%s" % xform2.pk, ], 'name': 'Merged Dataset', 'project': "http://testserver/api/v1/projects/%s" % xform1.project.pk, } # yapf: disable request = self.factory.post('/') request.user = self.user serializer = MergedXFormSerializer(data=data, context={'request': request}) self.assertTrue(serializer.is_valid()) serializer.save() xform = XForm.objects.filter(pk__gt=xform2.pk, is_merged_dataset=True).first() expected_data = [{ 'name': u'a', 'image_urls': [], 'lat': -1.28, 'table': u'<table border="1"><a href="#"><img width="210" class="thumbnail" src="" alt=""></a><tr><td>GPS</td><td>-1.28 36.83</td></tr><tr><td>Fruit</td><td>orange</td></tr></table>', # noqa pylint: disable=C0301 'lng': 36.83, 'id': xform1.instances.all().first().pk }, { 'name': u'b', 'image_urls': [], 'lat': 32.85, 'table': u'<table border="1"><a href="#"><img width="210" class="thumbnail" src="" alt=""></a><tr><td>GPS</td><td>32.85 13.04</td></tr><tr><td>Fruit</td><td>mango</td></tr></table>', # noqa pylint: disable=C0301 'lng': 13.04, 'id': xform2.instances.all().first().pk }] # yapf: disable self.assertEqual(kml_export_data(xform.id_string, xform.user), expected_data)
def test_kml_export_data(self): """ Test kml_export_data(id_string, user, xform=None). """ kml_md = """ | survey | | | type | name | label | | | geopoint | gps | GPS | | | select one fruits | fruit | Fruit | | choices | | | list name | name | label | | | fruits | orange | Orange | | | fruits | mango | Mango | """ xform1 = self._publish_markdown(kml_md, self.user, id_string='a') xform2 = self._publish_markdown(kml_md, self.user, id_string='b') xml = '<data id="a"><gps>-1.28 36.83</gps><fruit>orange</fruit></data>' Instance(xform=xform1, xml=xml).save() xml = '<data id="b"><gps>32.85 13.04</gps><fruit>mango</fruit></data>' Instance(xform=xform2, xml=xml).save() data = { 'xforms': [ "http://testserver/api/v1/forms/%s" % xform1.pk, "http://testserver/api/v1/forms/%s" % xform2.pk, ], 'name': 'Merged Dataset', 'project': "http://testserver/api/v1/projects/%s" % xform1.project.pk, } # yapf: disable request = self.factory.post('/') request.user = self.user serializer = MergedXFormSerializer( data=data, context={'request': request}) self.assertTrue(serializer.is_valid()) serializer.save() xform = XForm.objects.filter( pk__gt=xform2.pk, is_merged_dataset=True).first() expected_data = [{ 'name': u'a', 'image_urls': [], 'lat': -1.28, 'table': u'<table border="1"><a href="#"><img width="210" class="thumbnail" src="" alt=""></a><tr><td>GPS</td><td>-1.28 36.83</td></tr><tr><td>Fruit</td><td>orange</td></tr></table>', # noqa pylint: disable=C0301 'lng': 36.83, 'id': xform1.instances.all().first().pk }, { 'name': u'b', 'image_urls': [], 'lat': 32.85, 'table': u'<table border="1"><a href="#"><img width="210" class="thumbnail" src="" alt=""></a><tr><td>GPS</td><td>32.85 13.04</td></tr><tr><td>Fruit</td><td>mango</td></tr></table>', # noqa pylint: disable=C0301 'lng': 13.04, 'id': xform2.instances.all().first().pk }] # yapf: disable self.assertEqual( kml_export_data(xform.id_string, xform.user), expected_data)