diff options
| -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 8a2a30d2c..0dc04b4f9 100644 --- a/archaeological_finds/urls.py +++ b/archaeological_finds/urls.py @@ -573,6 +573,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 80a92ac2b..957b1952c 100644 --- a/archaeological_finds/views.py +++ b/archaeological_finds/views.py @@ -98,7 +98,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()  ) @@ -122,7 +121,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( @@ -158,13 +156,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"): @@ -174,9 +172,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) @@ -204,10 +202,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()]} @@ -317,7 +315,6 @@ findbasket_deletion_steps = [      ("final-find_basket_deletion", FinalForm),  ] -  basket_delete_wizard = wizards.FindBasketDeletionWizard.as_view(      findbasket_deletion_steps,      label=_("Basket deletion"), @@ -512,8 +509,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 @@ -610,9 +607,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) @@ -634,7 +631,6 @@ treatment_wizard_steps = [      ("final-treatment_creation", FinalForm),  ] -  treatment_search_wizard = wizards.TreatmentSearch.as_view(      [("general-treatment_search", forms.TreatmentFormSelection)],      label=_("Treatment search"), @@ -689,7 +685,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( @@ -857,7 +853,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( @@ -913,7 +909,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( @@ -942,7 +938,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" @@ -983,7 +979,6 @@ treatmentfile_wizard_steps = [      ("final-treatmentfile_creation", FinalForm),  ] -  treatmentfile_creation_wizard = wizards.TreatmentFileWizard.as_view(      treatmentfile_wizard_steps,      label=_("New treatment request"), @@ -1003,7 +998,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( @@ -1046,7 +1041,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" @@ -1067,7 +1062,6 @@ treatmentfile_admacttreatmentfile_search_wizard = wizards.SearchWizard.as_view(      url_name="treatmentfle_admacttreatmentfle_search",  ) -  treatmentfile_admacttreatmentfile_wizard = (      wizards.TreatmentFileAdministrativeActWizard.as_view(          [ @@ -1104,10 +1098,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( @@ -1163,10 +1157,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" @@ -1178,30 +1172,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) @@ -1326,8 +1320,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( @@ -1342,3 +1336,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')) | 
