diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-10-20 17:34:56 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-10-20 17:34:56 +0200 | 
| commit | e5366396850d269e91be1d794c5465e0ce4acce3 (patch) | |
| tree | 0ad4209416bb5b8c920a889d975ab1a0664ae4f4 | |
| parent | ac4627c0895bc0aa2c355af675e8e440b3f3f711 (diff) | |
| parent | 62912cc4ec70bf5ec9dc3183ce83e85ad72373fb (diff) | |
| download | Ishtar-e5366396850d269e91be1d794c5465e0ce4acce3.tar.bz2 Ishtar-e5366396850d269e91be1d794c5465e0ce4acce3.zip | |
Merge branch 'develop' into develop-bootstrap
| -rw-r--r-- | archaeological_context_records/admin.py | 2 | ||||
| -rw-r--r-- | archaeological_files/admin.py | 4 | ||||
| -rw-r--r-- | archaeological_finds/admin.py | 9 | ||||
| -rw-r--r-- | archaeological_operations/admin.py | 9 | ||||
| -rw-r--r-- | archaeological_warehouse/admin.py | 7 | ||||
| -rw-r--r-- | ishtar_common/admin.py | 18 | ||||
| -rw-r--r-- | ishtar_common/tests.py | 36 | 
7 files changed, 60 insertions, 25 deletions
| diff --git a/archaeological_context_records/admin.py b/archaeological_context_records/admin.py index 2733fa2ff..d5e4d09b9 100644 --- a/archaeological_context_records/admin.py +++ b/archaeological_context_records/admin.py @@ -62,7 +62,7 @@ class ContextRecordAdmin(HistorizedObjectAdmin):      model = models.ContextRecord      form = AdminContextRecordForm      readonly_fields = HistorizedObjectAdmin.readonly_fields + [ -        'imports', 'cached_label', 'datings' +        'cached_label', 'datings'      ]  admin_site.register(models.ContextRecord, ContextRecordAdmin) diff --git a/archaeological_files/admin.py b/archaeological_files/admin.py index 525f7e840..4dca1afa9 100644 --- a/archaeological_files/admin.py +++ b/archaeological_files/admin.py @@ -48,13 +48,15 @@ class FileAdmin(HistorizedObjectAdmin):                        'related_file': 'file'                        })      readonly_fields = HistorizedObjectAdmin.readonly_fields + [ -        'raw_general_contractor', 'raw_town_planning_service', 'imports', +        'raw_general_contractor', 'raw_town_planning_service',          'cached_label', 'imported_line'      ]      model = models.File +  admin_site.register(models.File, FileAdmin) +  general_models = [models.FileType, models.PermitType]  if settings.COUNTRY == 'fr':      general_models.append(models.SaisineType) diff --git a/archaeological_finds/admin.py b/archaeological_finds/admin.py index 6b925e41c..6f32365b9 100644 --- a/archaeological_finds/admin.py +++ b/archaeological_finds/admin.py @@ -51,7 +51,7 @@ class BaseFindAdmin(HistorizedObjectAdmin):      model = models.BaseFind      form = AdminBaseFindForm      readonly_fields = HistorizedObjectAdmin.readonly_fields + [ -        'cache_short_id', 'cache_complete_id', 'imports' +        'cache_short_id', 'cache_complete_id',      ]  admin_site.register(models.BaseFind, BaseFindAdmin) @@ -69,7 +69,7 @@ class FindAdmin(HistorizedObjectAdmin):          'container': 'container'      })      readonly_fields = HistorizedObjectAdmin.readonly_fields + [ -        'imports', 'datings', 'cached_label' +        'datings', 'cached_label'      ]  admin_site.register(models.Find, FindAdmin) @@ -97,7 +97,7 @@ class PropertyAdmin(HistorizedObjectAdmin):          'person': 'person',      })      readonly_fields = HistorizedObjectAdmin.readonly_fields + [ -        'administrative_act', 'imports', ] +        'administrative_act']      def has_add_permission(self, request):          return False @@ -118,7 +118,7 @@ class TreatmentAdmin(HistorizedObjectAdmin):          'container': 'container',      })      readonly_fields = HistorizedObjectAdmin.readonly_fields + [ -        'imports', 'cached_label', 'downstream_lbl', 'upstream_lbl' +        'cached_label', 'downstream_lbl', 'upstream_lbl'      ]      def has_add_permission(self, request): @@ -140,7 +140,6 @@ class TreatmentFileAdmin(HistorizedObjectAdmin):          'applicant': 'person',          'applicant_organisation': 'organization',      }) -    exclude = ['imports']      readonly_fields = HistorizedObjectAdmin.readonly_fields + [          'cached_label',      ] diff --git a/archaeological_operations/admin.py b/archaeological_operations/admin.py index f1deac188..bf1415989 100644 --- a/archaeological_operations/admin.py +++ b/archaeological_operations/admin.py @@ -40,7 +40,7 @@ class AdministrativeActAdmin(HistorizedObjectAdmin):      search_fields = ('year', 'index')      readonly_fields = HistorizedObjectAdmin.readonly_fields + [          'in_charge', 'operator', 'scientist', 'signatory', 'associated_file', -        'imports', 'departments_label', 'towns_label'] +        'departments_label', 'towns_label']      model = models.AdministrativeAct      form = make_ajax_form(          models.AdministrativeAct, {'operation': 'operation'} @@ -69,7 +69,6 @@ class ArchaeologicalSiteAdmin(HistorizedObjectAdmin):      list_display = ('name', 'reference')      search_fields = ('name', 'reference')      model = models.ArchaeologicalSite -    readonly_fields = HistorizedObjectAdmin.readonly_fields + ['imports']      inlines = [OperationInline]  admin_site.register(models.ArchaeologicalSite, ArchaeologicalSiteAdmin) @@ -112,7 +111,7 @@ class OperationAdmin(HistorizedObjectAdmin):          search_fields += ['code_patriarche']      model = models.Operation      readonly_fields = HistorizedObjectAdmin.readonly_fields + [ -        'imports', 'cached_label'] +        'cached_label']      form = AdminOperationForm      inlines = [ArchaeologicalSiteInline] @@ -144,7 +143,7 @@ class ParcelAdmin(HistorizedObjectAdmin):                  'town': 'town'}      )      readonly_fields = HistorizedObjectAdmin.readonly_fields + [ -        'imports', 'history_date' +        'history_date'      ]  admin_site.register(models.Parcel, ParcelAdmin) @@ -196,7 +195,7 @@ class ParcelOwnerAdmin(HistorizedObjectAdmin):                  'parcel': 'parcel'}      )      readonly_fields = HistorizedObjectAdmin.readonly_fields + [ -        'imports', 'history_date' +        'history_date'      ]  admin_site.register(models.ParcelOwner, ParcelOwnerAdmin) diff --git a/archaeological_warehouse/admin.py b/archaeological_warehouse/admin.py index deaffde94..f2b44fcf0 100644 --- a/archaeological_warehouse/admin.py +++ b/archaeological_warehouse/admin.py @@ -36,9 +36,7 @@ class WarehouseAdmin(HistorizedObjectAdmin):          'town': 'town',          'person_in_charge': 'person'      }) -    readonly_fields = HistorizedObjectAdmin.readonly_fields + [ -        'imports' -    ] +  admin_site.register(models.Warehouse, WarehouseAdmin) @@ -48,6 +46,7 @@ class ContainerTypeAdmin(admin.ModelAdmin):                      'volume')      model = models.ContainerType +  admin_site.register(models.ContainerType, ContainerTypeAdmin) @@ -56,7 +55,7 @@ class ContainerAdmin(HistorizedObjectAdmin):      list_filter = ("container_type",)      model = models.Container      readonly_fields = HistorizedObjectAdmin.readonly_fields + [ -        'imports', 'history_date' +        'history_date'      ]      form = make_ajax_form(model, {          'location': 'warehouse', diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index 7cb02e1b3..2df910ffd 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -123,6 +123,16 @@ class HistorizedObjectAdmin(admin.ModelAdmin):          obj.history_modifier = request.user          obj.save() +    def get_readonly_fields(self, request, obj=None): +        if obj:  # editing an existing object +            return tuple(self.readonly_fields or []) + tuple(['imports']) +        return self.readonly_fields + +    def get_exclude(self, request, obj=None): +        if not obj: +            return tuple(self.exclude or []) + tuple(['imports']) +        return self.exclude +  class MyGroupAdmin(GroupAdmin):      class Media: @@ -156,7 +166,6 @@ class OrganizationAdmin(HistorizedObjectAdmin):      list_filter = ("organization_type",)      search_fields = ('name',)      exclude = ('merge_key', 'merge_exclusion', 'merge_candidate', ) -    readonly_fields = HistorizedObjectAdmin.readonly_fields + ['imports']      model = models.Organization  admin_site.register(models.Organization, OrganizationAdmin) @@ -167,7 +176,6 @@ class PersonAdmin(HistorizedObjectAdmin):      list_filter = ("person_types",)      search_fields = ('name', 'surname', 'email', 'raw_name')      exclude = ('merge_key', 'merge_exclusion', 'merge_candidate', ) -    readonly_fields = HistorizedObjectAdmin.readonly_fields + ['imports']      form = make_ajax_form(models.Person, {'attached_to': 'organization'})      model = models.Person @@ -185,7 +193,7 @@ class AdminRelatedTownForm(forms.ModelForm):  class AdminTownForm(forms.ModelForm):      class Meta:          model = models.Town -        exclude = [] +        exclude = ['imports']      center = PointField(label=_(u"center"), required=False,                          widget=OSMWidget)      children = AutoCompleteSelectMultipleField('town', required=False, @@ -202,14 +210,14 @@ class TownParentInline(admin.TabularInline):  class TownAdmin(admin.ModelAdmin): +    model = models.Town      list_display = ['name', ]      search_fields = ['name'] +    readonly_fields = ['cached_label']      if settings.COUNTRY == 'fr':          list_display += ['numero_insee', 'departement', ]          search_fields += ['numero_insee', 'departement__label', ]          list_filter = ("departement",) -    readonly_fields = ['cached_label', 'imports'] -    model = models.Town      form = AdminTownForm      inlines = [TownParentInline] diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py index 8a951b29a..bbb449fe3 100644 --- a/ishtar_common/tests.py +++ b/ishtar_common/tests.py @@ -23,6 +23,8 @@ import os  import shutil  from StringIO import StringIO +from django.apps import apps +  from django.conf import settings  from django.contrib.auth.models import User  from django.contrib.contenttypes.models import ContentType @@ -38,6 +40,7 @@ from django.test.runner import DiscoverRunner  from ishtar_common import models  from ishtar_common import views +from ishtar_common.apps import admin_site  from ishtar_common.utils import post_save_point @@ -347,6 +350,13 @@ class AdminGenTypeTest(TestCase):      models_with_data = gen_models + [models.ImporterModel]      models = models_with_data      module_name = 'ishtar_common' +    ishtar_apps = [ +        'ishtar_common', 'archaeological_files', 'archaeological_operations', +        'archaeological_context_records', 'archaeological_warehouse', +        'archaeological_finds' +    ] +    readonly_models = ['archaeological_finds.Property', +                       'archaeological_finds.Treatment']      def setUp(self):          self.password = 'mypassword' @@ -359,16 +369,34 @@ class AdminGenTypeTest(TestCase):          self.client.login(username=self.username, password=self.password)      def test_listing_and_detail(self): -        for model in self.models: +        models = [] +        for app in self.ishtar_apps: +            app_models = apps.get_app_config(app).get_models() +            for model in app_models: +                if model in admin_site._registry: +                    models.append((app, model)) +        for app, model in models:              # quick test to verify basic access to listing -            base_url = '/admin/{}/{}/'.format(self.module_name, -                                              model.__name__.lower()) +            base_url = '/admin/{}/{}/'.format(app, model.__name__.lower())              url = base_url              response = self.client.get(url)              self.assertEqual(                  response.status_code, 200,                  msg="Can not access admin list for {}.".format(model)) -            if model in self.models_with_data: +            nb = model.objects.count() +            url = base_url + "add/" +            response = self.client.get(url) +            if app + "." + model.__name__ in self.readonly_models: +                continue +            self.assertEqual( +                response.status_code, 200, +                msg="Can not access admin add page for {}.".format(model)) +            self.assertEqual( +                nb, model.objects.count(), +                msg="A ghost object have been created on access to add page " +                    "for {}.".format(model)) + +            if nb:                  url = base_url + "{}/change/".format(model.objects.all()[0].pk)                  response = self.client.get(url)                  self.assertEqual( | 
