diff options
author | QuentinAndre <quentin.andre@imt-atlantique.net> | 2021-07-09 15:07:42 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-10-25 12:06:02 +0200 |
commit | b89cce3e4f05626765067d6f3d36c3b153dc74eb (patch) | |
tree | 71b10faa73f4b07cc5547e04d9a570e4d36a160d | |
parent | 12acfb841472df73f0dba0d6d3166d08689ec10d (diff) | |
download | Ishtar-b89cce3e4f05626765067d6f3d36c3b153dc74eb.tar.bz2 Ishtar-b89cce3e4f05626765067d6f3d36c3b153dc74eb.zip |
add of get_geo_items in API + test
-rw-r--r-- | archaeological_finds/tests.py | 31 | ||||
-rw-r--r-- | archaeological_finds/urls.py | 5 | ||||
-rw-r--r-- | archaeological_finds/views.py | 128 |
3 files changed, 94 insertions, 70 deletions
diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py index 48f0749b9..2a98ef381 100644 --- a/archaeological_finds/tests.py +++ b/archaeological_finds/tests.py @@ -2203,11 +2203,13 @@ class GeomaticTest(FindInit, TestCase): def setUp(self): self.create_finds(data_base={"label": "Find 1"}, force=True) - - def test_point_precision(self): - self.username = "myuser" self.password = "mypassword" + self.username = "myuser" User.objects.create_superuser(self.username, "myemail@test.com", self.password) + self.client = Client() + self.client.login(username=self.username, password=self.password) + + def test_point_precision(self): profile, created = IshtarSiteProfile.objects.get_or_create( slug="default", active=True ) @@ -2223,14 +2225,13 @@ class GeomaticTest(FindInit, TestCase): base_find.save() find = base_find.find.all()[0] - c = Client() - c.login(username=self.username, password=self.password) - response = c.get(reverse("show-find", kwargs={"pk": find.pk})) + response = self.client.get(reverse("show-find", kwargs={"pk": find.pk})) self.assertIn(b"33.12999", response.content) + profile.point_precision = 2 profile.save() - response = c.get(reverse("show-find", kwargs={"pk": find.pk})) + response = self.client.get(reverse("show-find", kwargs={"pk": find.pk})) self.assertIn(b"33.13", response.content) def test_update_container_localisation_on_warehouse_update(self): @@ -2553,6 +2554,12 @@ class GeomaticTest(FindInit, TestCase): res = base_find.get_geo_items(get_polygons=False) self.assertEqual(dic, res) + # test API + find = base_find.find.all()[0] + response = self.client.get(reverse("api-get-geo-items", kwargs={"pk": find.pk})) + self.assertEqual(response.status_code, 200) + self.assertIn(json.dumps(dic).encode('utf-8'), response.content) + # with multi-polygon base_find = models.BaseFind.objects.get(pk=base_find.pk) limit = ( @@ -2593,6 +2600,16 @@ class GeomaticTest(FindInit, TestCase): res_centroid = base_find.get_geo_items(get_polygons=False) self.assertEqual(dict_centroid, res_centroid) + # test API + response = self.client.get(reverse("api-get-geo-items", kwargs={"pk": base_find.pk, "get_polygons": True})) + self.assertEqual(response.status_code, 200) + self.assertIn(json.dumps(dict_poly).encode('utf-8'), response.content) + response = self.client.get(reverse("api-get-geo-items", kwargs={"pk": base_find.pk, "get_polygons": False})) + self.assertEqual(response.status_code, 200) + self.assertIn(json.dumps(dict_centroid).encode('utf-8'), response.content) + + + class AutocompleteTest(AutocompleteTestBase, TestCase): fixtures = FIND_FIXTURES models = [ diff --git a/archaeological_finds/urls.py b/archaeological_finds/urls.py index 631d587e6..73fa1d4a7 100644 --- a/archaeological_finds/urls.py +++ b/archaeological_finds/urls.py @@ -572,6 +572,11 @@ urlpatterns = [ name="autocomplete-findbasket-write", ), url(r"api/public/find/$", views.PublicFindAPI.as_view(), name="api-public-find"), + url(r"api/ishtar/finds/geo/(?P<pk>.+)/(?P<get_polygons>.+)?$", + check_rights(["view_find", "view_own_find"])( + views.get_geo_items, + ), + name="api-get-geo-items"), ] urlpatterns += get_urls_for_model(models.Find, views, own=True, autocomplete=True) diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py index dc2edfcac..3e1ffc574 100644 --- a/archaeological_finds/views.py +++ b/archaeological_finds/views.py @@ -97,7 +97,6 @@ get_find_for_ope = get_item( models.Find, "get_find", "find", own_table_cols=get_table_cols_for_ope() ) - get_find_for_cr = get_item( models.Find, "get_find", "find", own_table_cols=get_table_cols_for_cr() ) @@ -121,7 +120,6 @@ get_find_inside_container = get_item( autocomplete_find = get_autocomplete_item(model=models.Find) - show_treatment = show_item(models.Treatment, "treatment") revert_treatment = revert_item(models.Treatment) get_treatment = get_item( @@ -157,13 +155,13 @@ get_administrativeacttreatmentfile = get_item( def autocomplete_treatmentfile(request): if ( - not request.user.has_perm("ishtar_common.view_treatment", models.Treatment) - and not request.user.has_perm( - "ishtar_common.view_own_treatment", models.Treatment - ) - and not request.user.ishtaruser.has_right( - "treatmentfile_search", session=request.session - ) + not request.user.has_perm("ishtar_common.view_treatment", models.Treatment) + and not request.user.has_perm( + "ishtar_common.view_own_treatment", models.Treatment + ) + and not request.user.ishtaruser.has_right( + "treatmentfile_search", session=request.session + ) ): return HttpResponse(content_type="text/plain") if not request.GET.get("term"): @@ -173,9 +171,9 @@ def autocomplete_treatmentfile(request): for q1 in q.split(" "): for q in q1.split(" "): extra = ( - Q(internal_reference__icontains=q) - | Q(external_id__icontains=q) - | Q(name__icontains=q) + Q(internal_reference__icontains=q) + | Q(external_id__icontains=q) + | Q(name__icontains=q) ) try: int(q) @@ -203,10 +201,10 @@ def show_find_extra(request, find): user = request.user.ishtaruser q = ( models.FindBasket.objects.filter(items__pk=find.pk) - .filter( + .filter( Q(user=user) | Q(shared_with__pk=user.pk) | Q(shared_write_with__pk=user.pk) ) - .distinct() + .distinct() ) return {"baskets": [(basket.pk, basket.full_label) for basket in q.all()]} @@ -316,7 +314,6 @@ findbasket_deletion_steps = [ ("final-find_basket_deletion", FinalForm), ] - basket_delete_wizard = wizards.FindBasketDeletionWizard.as_view( findbasket_deletion_steps, label=_("Basket deletion"), @@ -492,8 +489,8 @@ class OwnBasket(object): models.FindBasket.objects.filter( Q(user=user) | Q(shared_with=user) | Q(shared_write_with=user) ) - .distinct() - .get(pk=pk) + .distinct() + .get(pk=pk) ) except models.FindBasket.DoesNotExist: raise PermissionDenied @@ -590,9 +587,9 @@ class FindBasketDeleteItemView( basket = self.get_basket(user=ishtaruser, pk=self.kwargs["basket"]) if ( - not user.is_superuser - and not ishtaruser.has_right("view_find") - and not (ishtaruser.has_right("view_own_find") and find.is_own(user)) + not user.is_superuser + and not ishtaruser.has_right("view_find") + and not (ishtaruser.has_right("view_own_find") and find.is_own(user)) ): raise PermissionDenied basket.items.remove(find) @@ -614,7 +611,6 @@ treatment_wizard_steps = [ ("final-treatment_creation", FinalForm), ] - treatment_search_wizard = wizards.TreatmentSearch.as_view( [("general-treatment_search", forms.TreatmentFormSelection)], label=_("Treatment search"), @@ -669,7 +665,7 @@ treatment_modification_wizard = wizards.TreatmentModificationWizard.as_view( def treatment_modify(request, pk): if not wizard_is_available( - treatment_modification_wizard, request, models.Treatment, pk + treatment_modification_wizard, request, models.Treatment, pk ): return HttpResponseRedirect("/") wizards.TreatmentModificationWizard.session_set_value( @@ -837,7 +833,7 @@ treatment_deletion_wizard = wizards.TreatmentDeletionWizard.as_view( def treatment_delete(request, pk): if not wizard_is_available( - treatment_deletion_wizard, request, models.Treatment, pk + treatment_deletion_wizard, request, models.Treatment, pk ): return HttpResponseRedirect("/") wizards.TreatmentDeletionWizard.session_set_value( @@ -893,7 +889,7 @@ treatment_administrativeact_modification_wizard = ( def treatment_administrativeacttreatment_modify(request, pk): if not wizard_is_available( - treatment_administrativeact_modification_wizard, request, AdministrativeAct, pk + treatment_administrativeact_modification_wizard, request, AdministrativeAct, pk ): return HttpResponseRedirect("/") wizards.TreatmentEditAdministrativeActWizard.session_set_value( @@ -922,7 +918,7 @@ treatment_admacttreatment_deletion_wizard = AdministrativeActDeletionWizard.as_v def treatment_administrativeacttreatment_delete(request, pk): if not wizard_is_available( - treatment_admacttreatment_deletion_wizard, request, AdministrativeAct, pk + treatment_admacttreatment_deletion_wizard, request, AdministrativeAct, pk ): return HttpResponseRedirect("/") wizard_url = "treatment_admacttreatment_deletion" @@ -963,7 +959,6 @@ treatmentfile_wizard_steps = [ ("final-treatmentfile_creation", FinalForm), ] - treatmentfile_creation_wizard = wizards.TreatmentFileWizard.as_view( treatmentfile_wizard_steps, label=_("New treatment request"), @@ -983,7 +978,7 @@ treatmentfile_modification_wizard = wizards.TreatmentFileModificationWizard.as_v def treatmentfile_modify(request, pk): if not wizard_is_available( - treatmentfile_modification_wizard, request, models.TreatmentFile, pk + treatmentfile_modification_wizard, request, models.TreatmentFile, pk ): return HttpResponseRedirect("/") wizards.TreatmentFileModificationWizard.session_set_value( @@ -1026,7 +1021,7 @@ treatmentfile_deletion_wizard = wizards.TreatmentFileDeletionWizard.as_view( def treatmentfile_delete(request, pk): if not wizard_is_available( - treatmentfile_deletion_wizard, request, models.TreatmentFile, pk + treatmentfile_deletion_wizard, request, models.TreatmentFile, pk ): return HttpResponseRedirect("/") wizard_url = "treatmentfile_deletion" @@ -1047,7 +1042,6 @@ treatmentfile_admacttreatmentfile_search_wizard = wizards.SearchWizard.as_view( url_name="treatmentfle_admacttreatmentfle_search", ) - treatmentfile_admacttreatmentfile_wizard = ( wizards.TreatmentFileAdministrativeActWizard.as_view( [ @@ -1084,10 +1078,10 @@ treatmentfile_admacttreatmentfile_modification_wizard = ( def treatmentfile_administrativeacttreatmentfile_modify(request, pk): if not wizard_is_available( - treatmentfile_admacttreatmentfile_modification_wizard, - request, - AdministrativeAct, - pk, + treatmentfile_admacttreatmentfile_modification_wizard, + request, + AdministrativeAct, + pk, ): return HttpResponseRedirect("/") wizards.TreatmentFileEditAdministrativeActWizard.session_set_value( @@ -1143,10 +1137,10 @@ treatmentfile_admacttreatmentfile_deletion_wizard = ( def treatmentfile_administrativeacttreatmentfile_delete(request, pk): if not wizard_is_available( - treatmentfile_admacttreatmentfile_deletion_wizard, - request, - AdministrativeAct, - pk, + treatmentfile_admacttreatmentfile_deletion_wizard, + request, + AdministrativeAct, + pk, ): return HttpResponseRedirect("/") wizard_url = "treatmentfle_admacttreatmentfle_deletion" @@ -1158,30 +1152,30 @@ def treatmentfile_administrativeacttreatmentfile_delete(request, pk): def reset_wizards(request): for wizard_class, url_name in ( - (wizards.FindWizard, "find_creation"), - (wizards.FindModificationWizard, "find_modification"), - (wizards.FindDeletionWizard, "find_deletion"), - (wizards.TreatmentWizard, "treatement_creation"), - (wizards.TreatmentModificationWizard, "treatment_modification"), - (wizards.TreatmentDeletionWizard, "treatment_deletion"), - (wizards.TreatmentAdministrativeActWizard, "treatment_admacttreatment"), - ( - wizards.TreatmentEditAdministrativeActWizard, - "treatment_admacttreatment_modification", - ), - (wizards.TreatmentDeletionWizard, "treatment_admacttreatment_deletion"), - (wizards.TreatmentFileWizard, "treatmentfile_creation"), - (wizards.TreatmentFileModificationWizard, "treatmentfile_modification"), - (wizards.TreatmentFileDeletionWizard, "treatmentfile_deletion"), - ( - wizards.TreatmentFileAdministrativeActWizard, - "treatmentfle_admacttreatmentfle", - ), - ( - wizards.TreatmentFileEditAdministrativeActWizard, - "treatmentfle_admacttreatmentfle_modification", - ), - (AdministrativeActDeletionWizard, "treatmentfle_admacttreatmentfle_deletion"), + (wizards.FindWizard, "find_creation"), + (wizards.FindModificationWizard, "find_modification"), + (wizards.FindDeletionWizard, "find_deletion"), + (wizards.TreatmentWizard, "treatement_creation"), + (wizards.TreatmentModificationWizard, "treatment_modification"), + (wizards.TreatmentDeletionWizard, "treatment_deletion"), + (wizards.TreatmentAdministrativeActWizard, "treatment_admacttreatment"), + ( + wizards.TreatmentEditAdministrativeActWizard, + "treatment_admacttreatment_modification", + ), + (wizards.TreatmentDeletionWizard, "treatment_admacttreatment_deletion"), + (wizards.TreatmentFileWizard, "treatmentfile_creation"), + (wizards.TreatmentFileModificationWizard, "treatmentfile_modification"), + (wizards.TreatmentFileDeletionWizard, "treatmentfile_deletion"), + ( + wizards.TreatmentFileAdministrativeActWizard, + "treatmentfle_admacttreatmentfle", + ), + ( + wizards.TreatmentFileEditAdministrativeActWizard, + "treatmentfle_admacttreatmentfle_modification", + ), + (AdministrativeActDeletionWizard, "treatmentfle_admacttreatmentfle_deletion"), ): wizard_class.session_reset(request, url_name) @@ -1306,8 +1300,8 @@ class PublicFindAPI(APIView): return empty q = ( models.FindBasket.items.through.objects.filter(findbasket_id=basket.id) - .values("find_id") - .order_by("id") + .values("find_id") + .order_by("id") ) id_list = [bi["find_id"] for bi in q] clauses = " ".join( @@ -1322,3 +1316,11 @@ class PublicFindAPI(APIView): def get(self, request, format=None): serializer = PublicSerializer(self.get_queryset(), many=True) return Response(serializer.data) + + +def get_geo_items(request, pk, get_polygons, current_right=None): + base_find = models.BaseFind.objects.get(pk=pk) + if not base_find: + return Http404() + dic = base_find.get_geo_items(get_polygons=(get_polygons == "True")) + return HttpResponse(json.dumps(dic).encode('utf-8')) |