diff options
-rw-r--r-- | archaeological_operations/tests.py | 52 | ||||
-rw-r--r-- | ishtar_common/admin.py | 35 |
2 files changed, 54 insertions, 33 deletions
diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py index cc0a8cb1b..371857337 100644 --- a/archaeological_operations/tests.py +++ b/archaeological_operations/tests.py @@ -87,10 +87,8 @@ from ishtar_common.models import ( Document, ValueFormater, Regexp, - ApiUser, - ApiSearchModel, ) -from ishtar_common.models_imports import ImporterDefault, ImporterDefaultValues +from ishtar_common.models_rest import ApiUser, ApiSearchModel, ApiSheetFilter from archaeological_files.models import File, FileType from ishtar_common import forms_common @@ -4445,12 +4443,16 @@ class ApiTest(OperationInitTest, APITestCase): self.create_operation(self.user, self.orgas[0]) self.create_operation(self.user, self.orgas[0]) - keys = ("old-neolithic", "middle-neolithic", "recent-neolithic", - "final-neolithic") - old_neo = models.Period.objects.get(txt_idx='old-neolithic') - middle_neo = models.Period.objects.get(txt_idx='middle-neolithic') - recent_neo = models.Period.objects.get(txt_idx='recent-neolithic') - final_neo = models.Period.objects.get(txt_idx='final-neolithic') + keys = ( + "old-neolithic", + "middle-neolithic", + "recent-neolithic", + "final-neolithic", + ) + old_neo = models.Period.objects.get(txt_idx="old-neolithic") + middle_neo = models.Period.objects.get(txt_idx="middle-neolithic") + recent_neo = models.Period.objects.get(txt_idx="recent-neolithic") + final_neo = models.Period.objects.get(txt_idx="final-neolithic") self.operation_0 = models.Operation.objects.get(pk=self.operations[0].pk) self.operation_0.code_patriarche = "28123" self.operation_0.save() @@ -4769,10 +4771,7 @@ class ApiTest(OperationInitTest, APITestCase): def _mock_search(self, mock_get, model, url): _get_item = get_item( - model, - "get_" + model.SLUG, - model.SLUG, - no_permission_check=True + model, "get_" + model.SLUG, model.SLUG, no_permission_check=True ) mock_get.__call__ = _get_item @@ -4824,7 +4823,9 @@ class ApiTest(OperationInitTest, APITestCase): url = base_url + params self._mock_search(mock_get, models.Operation, "/get-operation/" + params) response = self.client.get( - url, format="json", HTTP_AUTHORIZATION=self.auth_token, + url, + format="json", + HTTP_AUTHORIZATION=self.auth_token, ) self.assertEqual(response.status_code, 200) j = json.loads(response.content.decode()) @@ -4839,7 +4840,9 @@ class ApiTest(OperationInitTest, APITestCase): url = base_url + params self._mock_search(mock_get, models.Operation, "/get-operation/" + params) response = self.client.get( - url, format="json", HTTP_AUTHORIZATION=self.auth_token, + url, + format="json", + HTTP_AUTHORIZATION=self.auth_token, ) self.assertEqual(response.status_code, 200) j = json.loads(response.content.decode()) @@ -4852,18 +4855,23 @@ class ApiTest(OperationInitTest, APITestCase): # test timeout pass - def test_distant_sheet_display(self): - # POV: local - # test query limitation - pass - def test_sheet_display(self): # POV: external api_search_model = self.create_api_search_model() url = reverse("api-get-operation", args=[self.operations[0].pk]) - data = {"submited": 1, "search_vector": "28"} response = self.client.get( - url, format="json", HTTP_AUTHORIZATION=self.auth_token, data=data + url, format="json", HTTP_AUTHORIZATION=self.auth_token + ) + self.assertEqual(response.status_code, 200) + j = json.loads(response.content.decode()) + self.assertIsNotNone(j.get("cached_label", None)) + # filter + ApiSheetFilter.objects.create( + api_search_model=api_search_model, key="cached_label" + ) + response = self.client.get( + url, format="json", HTTP_AUTHORIZATION=self.auth_token ) self.assertEqual(response.status_code, 200) j = json.loads(response.content.decode()) + self.assertIsNone(j.get("cached_label", None)) diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index 5c2f33aa1..b7de250c6 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -44,7 +44,7 @@ from django.contrib.gis.geos import GEOSGeometry, MultiPolygon from django.contrib.gis.gdal.error import GDALException from django.contrib.gis.geos.error import GEOSException from django.core.cache import cache -from django.core.exceptions import FieldError +from django.core.exceptions import FieldError, FieldDoesNotExist from django.core.serializers import serialize from django.db.models.fields import ( BooleanField, @@ -2186,14 +2186,15 @@ def update_types_from_source(modeladmin, request, queryset): send_error_message( request, str(_("Response of {} is not a valid JSON message.")).format(curl), - return_url, ) continue result = source.update_matches(content) if result.get("created", None): created += result['created'] if result.get("updated", None): - updated += result['updated'] + updated += result["updated"] + if result.get("deleted", None): + deleted += result["deleted"] if result.get("search_model do not exist", None): missing_models += result["search_model do not exist"] if result.get("type do not exist", None): @@ -2214,10 +2215,10 @@ def update_types_from_source(modeladmin, request, queryset): messages.add_message( request, messages.INFO, - str(_(f"{result['deleted']} matches deleted")), + str(_(f"{deleted} matches deleted")), ) if missing_models: - missing_models = ", ".join(missing_models) + missing_models = ", ".join(set(missing_models)) messages.add_message( request, messages.INFO, @@ -2228,7 +2229,7 @@ def update_types_from_source(modeladmin, request, queryset): ), ) if missing_types: - missing_types = ", ".join(result["type do not exist"]) + missing_types = ", ".join(set(missing_types)) messages.add_message( request, messages.INFO, @@ -2360,11 +2361,11 @@ class ApiSheetFilterForm(forms.ModelForm): models_rest.ApiSearchModel.objects, label=_("API - Remote access - Search model"), ) - key = forms.ChoiceField( + key = forms.CharField( label=_("Key"), initial="-", - choices=(("-", "-"),), help_text=_("Save first to choose a key"), + max_length=200, ) class Meta: @@ -2381,9 +2382,21 @@ class ApiSheetFilterForm(forms.ModelForm): query_dict._mutable = True query_dict.setlist("api_search_model", [instance.api_search_model.pk]) query_dict._mutable = False - self.fields["api_search_model"].widget.attrs = {'disabled': 'disabled'} - self.fields["key"].help_text = "" - self.fields["key"].choices = [(k, k) for k in instance.get_keys()] + self.fields["api_search_model"].widget.attrs = {"disabled": "disabled"} + keys = instance.get_keys() + model = instance.api_search_model.content_type.model_class() + help_text = [] + for key in keys: + try: + field = model._meta.get_field(key) + except FieldDoesNotExist: + field = None + if field and getattr(field, "verbose_name", None): + key += f" ({field.verbose_name})" + help_text.append(key) + self.fields["key"].help_text = str(_("Available keys: ")) + " ; ".join( + help_text + ) class ApiSheetFilterAdmin(admin.ModelAdmin): |