diff options
Diffstat (limited to 'archaeological_finds/tests.py')
| -rw-r--r-- | archaeological_finds/tests.py | 1733 | 
1 files changed, 911 insertions, 822 deletions
| diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py index 61caca858..bb249e2ea 100644 --- a/archaeological_finds/tests.py +++ b/archaeological_finds/tests.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3  # -*- coding: utf-8 -*-  # Copyright (C) 2015-2017 Étienne Loks  <etienne.loks_AT_peacefrogsDOTnet> @@ -35,27 +35,63 @@ from django.core.files.uploadedfile import SimpleUploadedFile  from django.core.urlresolvers import reverse  from django.test import tag  from django.test.client import Client -from ishtar_common.models import ImporterType, IshtarUser, ImporterColumn,\ -    FormaterType, ImportTarget, IshtarSiteProfile, ProfileType, ImporterModel, \ -    DocumentTemplate +from ishtar_common.models import ( +    ImporterType, +    IshtarUser, +    ImporterColumn, +    FormaterType, +    ImportTarget, +    IshtarSiteProfile, +    ProfileType, +    ImporterModel, +    DocumentTemplate, +)  from django.utils.text import slugify  from django.utils.translation import pgettext_lazy, gettext_lazy as _ -from ishtar_common.models import Person, get_current_profile, UserProfile, \ -    Town, Area, Document, SpatialReferenceSystem -from archaeological_context_records.models import Period, Dating, \ -    ContextRecord, DatingType, DatingQuality +from ishtar_common.models import ( +    Person, +    get_current_profile, +    UserProfile, +    Town, +    Area, +    Document, +    SpatialReferenceSystem, +) +from archaeological_context_records.models import ( +    Period, +    Dating, +    ContextRecord, +    DatingType, +    DatingQuality, +)  from archaeological_finds import models, views -from archaeological_warehouse.models import Warehouse, WarehouseType, \ -    ContainerType, Container, WarehouseDivisionLink +from archaeological_warehouse.models import ( +    Warehouse, +    WarehouseType, +    ContainerType, +    Container, +    WarehouseDivisionLink, +)  from archaeological_operations.models import Operation, OperationType  from ishtar_common import forms_common -from ishtar_common.tests import WizardTest, WizardTestFormData as FormData, \ -    TestCase, create_user, create_superuser, AutocompleteTestBase, AcItem, \ -    FIND_FIXTURES, FIND_TOWNS_FIXTURES, WAREHOUSE_FIXTURES, \ -    COMMON_FIXTURES, GenericSerializationTest, SearchText +from ishtar_common.tests import ( +    WizardTest, +    WizardTestFormData as FormData, +    TestCase, +    create_user, +    create_superuser, +    AutocompleteTestBase, +    AcItem, +    FIND_FIXTURES, +    FIND_TOWNS_FIXTURES, +    WAREHOUSE_FIXTURES, +    COMMON_FIXTURES, +    GenericSerializationTest, +    SearchText, +)  from archaeological_operations.tests import ImportTest, create_operation  from archaeological_context_records.tests import ContextRecordInit @@ -72,22 +108,25 @@ class FindInit(ContextRecordInit):              data_base = {}          if not data:              data = {} -        if not getattr(self, 'finds', None): +        if not getattr(self, "finds", None):              self.finds = [] -        if not getattr(self, 'base_finds', None): +        if not getattr(self, "base_finds", None):              self.base_finds = [] -        default = {'label': "Base find"} +        default = {"label": "Base find"}          if user: -            data_base['history_modifier'] = user -        elif not data_base.get('history_modifier') or not data_base[ -            'history_modifier'].pk: +            data_base["history_modifier"] = user +        elif ( +            not data_base.get("history_modifier") +            or not data_base["history_modifier"].pk +        ):              user = self.get_default_user()              user.save() -            data_base['history_modifier'] = user -        if force or not data_base.get('context_record'): -            data_base['context_record'] = self.get_default_context_record( -                force=force, user=user) +            data_base["history_modifier"] = user +        if force or not data_base.get("context_record"): +            data_base["context_record"] = self.get_default_context_record( +                force=force, user=user +            )          default.update(data_base)          base_find = models.BaseFind.objects.create(**default)          self.base_finds.append(base_find) @@ -106,14 +145,14 @@ class FindInit(ContextRecordInit):      def tearDown(self):          super(FindInit, self).tearDown() -        if hasattr(self, 'finds'): +        if hasattr(self, "finds"):              for f in self.finds:                  try:                      f.delete()                  except:                      pass              self.finds = [] -        if hasattr(self, 'base_finds'): +        if hasattr(self, "base_finds"):              for f in self.base_finds:                  try:                      f.delete() @@ -128,12 +167,8 @@ class SerializationTest(GenericSerializationTest, FindInit, TestCase):      def setUp(self):          ope1 = self.create_operation()[0]          ope2 = self.create_operation()[1] -        cr = self.create_context_record( -            data={"label": "CR 1", "operation": ope1} -        )[0] -        cr2 = self.create_context_record( -            data={"label": "CR 2", "operation": ope2} -        )[1] +        cr = self.create_context_record(data={"label": "CR 1", "operation": ope1})[0] +        cr2 = self.create_context_record(data={"label": "CR 2", "operation": ope2})[1]          self.create_finds(data_base={"context_record": cr})[0]          self.create_finds(data_base={"context_record": cr2})[1]          # basket = models.FindBasket.objects.create(label="Hophop") @@ -142,164 +177,145 @@ class SerializationTest(GenericSerializationTest, FindInit, TestCase):      def test_serialization(self):          res = self.generic_serialization_test(serializers.find_serialization) -        find_json = json.loads( -            res[('finds', 'archaeological_finds__Find')] -        ) +        find_json = json.loads(res[("finds", "archaeological_finds__Find")])          self.assertEqual(len(find_json), 2) -        bfind_json = json.loads( -            res[('finds', 'archaeological_finds__BaseFind')] -        ) +        bfind_json = json.loads(res[("finds", "archaeological_finds__BaseFind")])          self.assertEqual(len(bfind_json), 2)          result_queryset = Operation.objects.filter(uuid=self.operations[0].uuid)          res = self.generic_serialization_test( -            serializers.find_serialization, no_test=True, -            kwargs={"operation_queryset": result_queryset} -        ) -        find_json = json.loads( -            res[('finds', 'archaeological_finds__Find')] +            serializers.find_serialization, +            no_test=True, +            kwargs={"operation_queryset": result_queryset},          ) +        find_json = json.loads(res[("finds", "archaeological_finds__Find")])          self.assertEqual(len(find_json), 1) -        bfind_json = json.loads( -            res[('finds', 'archaeological_finds__BaseFind')] -        ) +        bfind_json = json.loads(res[("finds", "archaeological_finds__BaseFind")])          self.assertEqual(len(bfind_json), 1)          result_queryset = ContextRecord.objects.filter( -            uuid=self.context_records[0].uuid) -        res = self.generic_serialization_test( -            serializers.find_serialization, no_test=True, -            kwargs={"cr_queryset": result_queryset} +            uuid=self.context_records[0].uuid          ) -        find_json = json.loads( -            res[('finds', 'archaeological_finds__Find')] +        res = self.generic_serialization_test( +            serializers.find_serialization, +            no_test=True, +            kwargs={"cr_queryset": result_queryset},          ) +        find_json = json.loads(res[("finds", "archaeological_finds__Find")])          self.assertEqual(len(find_json), 1) -        bfind_json = json.loads( -            res[('finds', 'archaeological_finds__BaseFind')] -        ) +        bfind_json = json.loads(res[("finds", "archaeological_finds__BaseFind")])          self.assertEqual(len(bfind_json), 1) -        result_queryset = models.Find.objects.filter( -            uuid=self.finds[0].uuid) +        result_queryset = models.Find.objects.filter(uuid=self.finds[0].uuid)          res = self.generic_serialization_test( -            serializers.find_serialization, no_test=True, -            kwargs={"find_queryset": result_queryset} -        ) -        find_json = json.loads( -            res[('finds', 'archaeological_finds__Find')] +            serializers.find_serialization, +            no_test=True, +            kwargs={"find_queryset": result_queryset},          ) +        find_json = json.loads(res[("finds", "archaeological_finds__Find")])          self.assertEqual(len(find_json), 1) -        bfind_json = json.loads( -            res[('finds', 'archaeological_finds__BaseFind')] -        ) +        bfind_json = json.loads(res[("finds", "archaeological_finds__BaseFind")])          self.assertEqual(len(bfind_json), 1)      def test_ope_serialization_with_find_filter(self):          res = self.generic_serialization_test( -            operation_serialization, no_test=True, +            operation_serialization, +            no_test=True,          )          ope_json = json.loads( -            res[('operations', 'archaeological_operations__Operation')] +            res[("operations", "archaeological_operations__Operation")]          )          self.assertEqual(len(ope_json), 2) -        result_queryset = models.Find.objects.filter( -            uuid=self.finds[0].uuid) +        result_queryset = models.Find.objects.filter(uuid=self.finds[0].uuid)          res = self.generic_serialization_test( -            operation_serialization, no_test=True, -            kwargs={"find_queryset": result_queryset} +            operation_serialization, +            no_test=True, +            kwargs={"find_queryset": result_queryset},          )          ope_json = json.loads( -            res[('operations', 'archaeological_operations__Operation')] +            res[("operations", "archaeological_operations__Operation")]          )          self.assertEqual(len(ope_json), 1)      def test_cr_serialization_with_find_filter(self):          res = self.generic_serialization_test( -            cr_serialization, no_test=True, +            cr_serialization, +            no_test=True,          )          cr_json = json.loads( -            res[('context_records', -                 'archaeological_context_records__ContextRecord')] +            res[("context_records", "archaeological_context_records__ContextRecord")]          )          self.assertEqual(len(cr_json), 2) -        result_queryset = models.Find.objects.filter( -            uuid=self.finds[0].uuid) +        result_queryset = models.Find.objects.filter(uuid=self.finds[0].uuid)          res = self.generic_serialization_test( -            cr_serialization, no_test=True, -            kwargs={"find_queryset": result_queryset} +            cr_serialization, no_test=True, kwargs={"find_queryset": result_queryset}          )          cr_json = json.loads( -            res[('context_records', -                 'archaeological_context_records__ContextRecord')] +            res[("context_records", "archaeological_context_records__ContextRecord")]          )          self.assertEqual(len(cr_json), 1)      def test_restore(self):          current_number, zip_filename = self.generic_restore_test_genzip( -            serializers.FIND_MODEL_LIST, -            serializers.find_serialization) -        self.generic_restore_test(zip_filename, current_number, -                                  serializers.FIND_MODEL_LIST) +            serializers.FIND_MODEL_LIST, serializers.find_serialization +        ) +        self.generic_restore_test( +            zip_filename, current_number, serializers.FIND_MODEL_LIST +        )  class FindWizardCreationTest(WizardTest, FindInit, TestCase):      fixtures = WAREHOUSE_FIXTURES -    url_name = 'find_creation' -    wizard_name = 'find_wizard' +    url_name = "find_creation" +    wizard_name = "find_wizard"      steps = views.find_creation_steps -    redirect_url = "/find_modification/selec-find_modification?open_item="\ -                   "{last_id}" +    redirect_url = "/find_modification/selec-find_modification?open_item=" "{last_id}"      model = models.Find      form_datas = [          FormData( -            'Find creation', +            "Find creation",              form_datas={ -                'selecrecord-find_creation': {'pk': 1}, -                'find-find_creation': { -                    'label': 'hop', -                    'checked': 'NC', -                    'check_date': '2016-01-01' +                "selecrecord-find_creation": {"pk": 1}, +                "find-find_creation": { +                    "label": "hop", +                    "checked": "NC", +                    "check_date": "2016-01-01",                  }, -                'dating-find_creation': [ +                "dating-find_creation": [                      { -                        'period': None, -                        'start_date': '0', -                        'end_date': '200', +                        "period": None, +                        "start_date": "0", +                        "end_date": "200",                      },                      { -                        'period': None, -                        'start_date': '0', -                        'end_date': '200', -                    } -                ] +                        "period": None, +                        "start_date": "0", +                        "end_date": "200", +                    }, +                ],              }, -            ignored=['preservation-find_creation'] +            ignored=["preservation-find_creation"],          )      ]      def pre_wizard(self):          cr = self.create_context_record( -            data={'parcel': self.create_parcel()[-1]}, force=True)[-1] +            data={"parcel": self.create_parcel()[-1]}, force=True +        )[-1] -        self.form_datas[0].form_datas['selecrecord-find_creation']['pk'] = \ -            cr.pk +        self.form_datas[0].form_datas["selecrecord-find_creation"]["pk"] = cr.pk          period = Period.objects.all()[0].pk -        self.form_datas[0].form_datas['dating-find_creation'][0]['period'] = \ -            period -        self.form_datas[0].form_datas['dating-find_creation'][1]['period'] = \ -            period +        self.form_datas[0].form_datas["dating-find_creation"][0]["period"] = period +        self.form_datas[0].form_datas["dating-find_creation"][1]["period"] = period          self.find_number = models.Find.objects.count()          self.basefind_number = models.BaseFind.objects.count()          super(FindWizardCreationTest, self).pre_wizard()      def post_wizard(self): -        self.assertEqual(models.BaseFind.objects.count(), -                         self.basefind_number + 1) -        self.assertEqual(models.Find.objects.count(), -                         self.find_number + 1) +        self.assertEqual(models.BaseFind.objects.count(), self.basefind_number + 1) +        self.assertEqual(models.Find.objects.count(), self.find_number + 1)          # identical datings, only one should be finaly save          f = models.Find.objects.order_by("-pk").all()[0]          self.assertEqual(f.datings.count(), 1) @@ -307,42 +323,44 @@ class FindWizardCreationTest(WizardTest, FindInit, TestCase):  class FindWizardModificationTest(WizardTest, FindInit, TestCase):      fixtures = WAREHOUSE_FIXTURES -    url_name = 'find_modification' -    wizard_name = url_name + '_wizard' +    url_name = "find_modification" +    wizard_name = url_name + "_wizard"      steps = views.find_modification_steps -    redirect_url = "/find_modification/selec-find_modification?open_item=" \ -                   "{last_id}" +    redirect_url = "/find_modification/selec-find_modification?open_item=" "{last_id}"      model = models.Find      form_datas = [          FormData( -            'Find modification', +            "Find modification",              form_datas={ -                'selec-find_modification': {'pk': ''}, -                'selecrecord-find_modification': { +                "selec-find_modification": {"pk": ""}, +                "selecrecord-find_modification": {                      "get_first_base_find__context_record": ""                  }, -                'find-find_modification': { -                    'label': 'hop', -                    'checked': 'NC', -                    'check_date': '2016-01-01' +                "find-find_modification": { +                    "label": "hop", +                    "checked": "NC", +                    "check_date": "2016-01-01",                  }, -                'dating-find_modification': [ +                "dating-find_modification": [                      { -                        'period': None, -                        'start_date': '', -                        'end_date': '', +                        "period": None, +                        "start_date": "", +                        "end_date": "",                      }, -                ] +                ],              }, -            ignored=['preservation-find_modification', -                     'selecw-find_modification', -                     'simplefind-find_modification'] +            ignored=[ +                "preservation-find_modification", +                "selecw-find_modification", +                "simplefind-find_modification", +            ],          )      ]      def pre_wizard(self):          profile, created = IshtarSiteProfile.objects.get_or_create( -            slug='default', active=True) +            slug="default", active=True +        )          profile.warehouse = False          profile.save()          find, __ = self.get_default_find(force=True) @@ -352,29 +370,28 @@ class FindWizardModificationTest(WizardTest, FindInit, TestCase):          find.save()          data = self.form_datas[0].form_datas -        data['selec-find_modification']['pk'] = find.pk -        data['selecrecord-find_modification'][ -            'get_first_base_find__context_record'] = \ -            find.base_finds.all()[0].context_record.pk +        data["selec-find_modification"]["pk"] = find.pk +        data["selecrecord-find_modification"][ +            "get_first_base_find__context_record" +        ] = find.base_finds.all()[0].context_record.pk          self.period = Period.objects.all()[0]          self.period2 = Period.objects.all()[1] -        find.datings.add(Dating.objects.create( -            period=self.period, start_date='0', end_date='200')) +        find.datings.add( +            Dating.objects.create(period=self.period, start_date="0", end_date="200") +        )          find.datings.add(Dating.objects.create(period=self.period2)) -        data['dating-find_modification'][0]['period'] = self.period.pk +        data["dating-find_modification"][0]["period"] = self.period.pk          self.find_number = models.Find.objects.count()          self.basefind_number = models.BaseFind.objects.count()          super(FindWizardModificationTest, self).pre_wizard()      def post_wizard(self):          # no creation -        self.assertEqual(models.BaseFind.objects.count(), -                         self.basefind_number) -        self.assertEqual(models.Find.objects.count(), -                         self.find_number) +        self.assertEqual(models.BaseFind.objects.count(), self.basefind_number) +        self.assertEqual(models.Find.objects.count(), self.find_number)          f = models.Find.objects.get(pk=self.find.pk)          self.assertEqual(f.datings.count(), 1)          dating = f.datings.all()[0] @@ -385,109 +402,109 @@ class FindWizardModificationTest(WizardTest, FindInit, TestCase):  class FindWizardDeletionWithWarehouseModTest(WizardTest, FindInit, TestCase):      fixtures = WAREHOUSE_FIXTURES -    url_name = 'find_deletion' -    wizard_name = 'find_deletion_wizard' +    url_name = "find_deletion" +    wizard_name = "find_deletion_wizard"      steps = views.find_deletion_steps      redirect_url = "/{}/selecw-{}".format(url_name, url_name)      form_datas = [          FormData( -            'Find deletion', +            "Find deletion",              form_datas={ -                'selecw': {}, +                "selecw": {},              }, -            ignored=['selec-find_deletion'] +            ignored=["selec-find_deletion"],          )      ]      def pre_wizard(self):          profile, created = IshtarSiteProfile.objects.get_or_create( -            slug='default', active=True) +            slug="default", active=True +        )          profile.warehouse = True          profile.save()          find, bf = self.get_default_find(force=True) -        self.form_datas[0].set('selecw', 'pks', find.pk) +        self.form_datas[0].set("selecw", "pks", find.pk)          self.find_number = models.Find.objects.count()          super(FindWizardDeletionWithWarehouseModTest, self).pre_wizard()      def post_wizard(self): -        self.assertEqual(models.Find.objects.count(), -                         self.find_number - 1) +        self.assertEqual(models.Find.objects.count(), self.find_number - 1)  class TreatmentWizardCreationTest(WizardTest, FindInit, TestCase):      fixtures = WAREHOUSE_FIXTURES -    url_name = 'treatment_creation' -    wizard_name = 'treatment_wizard' +    url_name = "treatment_creation" +    wizard_name = "treatment_wizard"      steps = views.treatment_wizard_steps -    redirect_url = "/treatment_search/general-treatment_search?" \ -                   "open_item={last_id}" +    redirect_url = "/treatment_search/general-treatment_search?" "open_item={last_id}"      model = models.Treatment      form_datas = [          FormData( -            'Move treatment (planned)', +            "Move treatment (planned)",              form_datas={ -                'file': {}, -                'basetreatment': { -                    'treatment_type': None, -                    'person': 1,  # doer -                    'location': 1,  # associated warehouse -                    'year': 2016, -                    'container': None, +                "file": {}, +                "basetreatment": { +                    "treatment_type": None, +                    "person": 1,  # doer +                    "location": 1,  # associated warehouse +                    "year": 2016, +                    "container": None,                  }, -                'selecfind': { -                    'pk': 1, -                    'resulting_pk': 1 -                } +                "selecfind": {"pk": 1, "resulting_pk": 1},              }, -            ignored=('resultfind-treatment_creation', -                     'selecbasket-treatment_creation', -                     'resultfinds-treatment_creation')), +            ignored=( +                "resultfind-treatment_creation", +                "selecbasket-treatment_creation", +                "resultfinds-treatment_creation", +            ), +        ),          FormData( -            'Move treatment (done)', +            "Move treatment (done)",              form_datas={ -                'file': {}, -                'basetreatment': { -                    'treatment_type': None, -                    'person': 1,  # doer -                    'location': 1,  # associated warehouse -                    'year': 2016, -                    'container': None, +                "file": {}, +                "basetreatment": { +                    "treatment_type": None, +                    "person": 1,  # doer +                    "location": 1,  # associated warehouse +                    "year": 2016, +                    "container": None,                  }, -                'selecfind': { -                    'pk': 1, -                    'resulting_pk': 1 -                } +                "selecfind": {"pk": 1, "resulting_pk": 1},              }, -            ignored=('resultfind-treatment_creation', -                     'selecbasket-treatment_creation', -                     'resultfinds-treatment_creation')), +            ignored=( +                "resultfind-treatment_creation", +                "selecbasket-treatment_creation", +                "resultfinds-treatment_creation", +            ), +        ),          FormData( -            'Loan treatment (done)', +            "Loan treatment (done)",              form_datas={ -                'file': {}, -                'basetreatment': { -                    'treatment_type': None, -                    'person': 1,  # doer -                    'location': 1,  # associated warehouse -                    'year': 2016, -                    'container': None, +                "file": {}, +                "basetreatment": { +                    "treatment_type": None, +                    "person": 1,  # doer +                    "location": 1,  # associated warehouse +                    "year": 2016, +                    "container": None,                  }, -                'selecfind': { -                    'pk': 1, -                    'resulting_pk': 1 -                } +                "selecfind": {"pk": 1, "resulting_pk": 1},              }, -            ignored=('resultfind-treatment_creation', -                     'selecbasket-treatment_creation', -                     'resultfinds-treatment_creation')), +            ignored=( +                "resultfind-treatment_creation", +                "selecbasket-treatment_creation", +                "resultfinds-treatment_creation", +            ), +        ),      ]      def pre_wizard(self):          q = Warehouse.objects.filter(pk=1)          if not q.count():              warehouse = Warehouse.objects.create( -                name="default", warehouse_type=WarehouseType.objects.all()[0]) +                name="default", warehouse_type=WarehouseType.objects.all()[0] +            )              warehouse.id = 1              warehouse.save()          else: @@ -501,19 +518,19 @@ class TreatmentWizardCreationTest(WizardTest, FindInit, TestCase):          self.container_ref = Container.objects.create(              location=warehouse,              responsible=warehouse, -            container_type=ContainerType.objects.all()[0] +            container_type=ContainerType.objects.all()[0],          )          self.container1 = Container.objects.create(              location=warehouse,              responsible=warehouse, -            container_type=ContainerType.objects.all()[0] +            container_type=ContainerType.objects.all()[0],          )          self.container2 = Container.objects.create(              location=warehouse,              responsible=warehouse, -            container_type=ContainerType.objects.all()[0] +            container_type=ContainerType.objects.all()[0],          )          self.find, base_find = self.get_default_find(force=True) @@ -521,50 +538,44 @@ class TreatmentWizardCreationTest(WizardTest, FindInit, TestCase):          self.find.container = self.container_ref          self.find.save()          for idx in (0, 1): -            self.form_datas[idx].form_datas['selecfind']["pk"] = self.find.pk -            self.form_datas[idx].form_datas['selecfind']["resulting_pk"] = \ -                self.find.pk -            self.form_datas[idx].set('basetreatment', 'container', -                                     self.container1.pk) +            self.form_datas[idx].form_datas["selecfind"]["pk"] = self.find.pk +            self.form_datas[idx].form_datas["selecfind"]["resulting_pk"] = self.find.pk +            self.form_datas[idx].set("basetreatment", "container", self.container1.pk)          self.find_2, base_find = self.get_default_find(force=True)          self.find_2.container_ref = self.container_ref          self.find_2.container = self.container_ref          self.find_2.save() -        self.form_datas[2].form_datas['selecfind']["pk"] = self.find_2.pk -        self.form_datas[2].form_datas['selecfind']["resulting_pk"] = \ -            self.find_2.pk -        self.form_datas[2].set('basetreatment', 'container', self.container2.pk) +        self.form_datas[2].form_datas["selecfind"]["pk"] = self.find_2.pk +        self.form_datas[2].form_datas["selecfind"]["resulting_pk"] = self.find_2.pk +        self.form_datas[2].set("basetreatment", "container", self.container2.pk) -        moving = models.TreatmentType.objects.get(txt_idx='moving') +        moving = models.TreatmentType.objects.get(txt_idx="moving")          moving.change_reference_location = True          moving.change_current_location = True          moving.save() -        self.form_datas[0].set('basetreatment', 'treatment_type', -                               moving.pk) -        self.form_datas[1].set('basetreatment', 'treatment_type', -                               moving.pk) -        loan = models.TreatmentType.objects.get(txt_idx='loan') +        self.form_datas[0].set("basetreatment", "treatment_type", moving.pk) +        self.form_datas[1].set("basetreatment", "treatment_type", moving.pk) +        loan = models.TreatmentType.objects.get(txt_idx="loan")          loan.change_reference_location = False          loan.change_current_location = True          loan.save() -        self.form_datas[2].set('basetreatment', 'treatment_type', -                               loan.pk) +        self.form_datas[2].set("basetreatment", "treatment_type", loan.pk)          planned, __ = models.TreatmentState.objects.get_or_create( -            txt_idx='planned', defaults={"executed": False, "label": "Planned"} +            txt_idx="planned", defaults={"executed": False, "label": "Planned"}          )          planned.executed = False          planned.save() -        self.form_datas[0].set('basetreatment', 'treatment_state', planned.pk) +        self.form_datas[0].set("basetreatment", "treatment_state", planned.pk)          completed, created = models.TreatmentState.objects.get_or_create( -            txt_idx='completed', defaults={"executed": True, "label": "Done"} +            txt_idx="completed", defaults={"executed": True, "label": "Done"}          )          completed.executed = True          completed.save() -        self.form_datas[1].set('basetreatment', 'treatment_state', completed.pk) -        self.form_datas[2].set('basetreatment', 'treatment_state', completed.pk) +        self.form_datas[1].set("basetreatment", "treatment_state", completed.pk) +        self.form_datas[2].set("basetreatment", "treatment_state", completed.pk)          self.treatment_number = models.Treatment.objects.count() @@ -572,8 +583,8 @@ class TreatmentWizardCreationTest(WizardTest, FindInit, TestCase):              # treatment planned - no changes              find = models.Find.objects.get(pk=test_object.find.pk)              test_object.assertEqual(find.container, test_object.container_ref) -            test_object.assertEqual(find.container_ref, -                                    test_object.container_ref) +            test_object.assertEqual(find.container_ref, test_object.container_ref) +          self.form_datas[0].extra_tests = [post_first_wizard]          def post_second_wizard(test_object, final_step_response): @@ -581,21 +592,21 @@ class TreatmentWizardCreationTest(WizardTest, FindInit, TestCase):              find = models.Find.objects.get(pk=test_object.find.pk)              test_object.assertEqual(find.container, test_object.container1)              test_object.assertEqual(find.container_ref, test_object.container1) +          self.form_datas[1].extra_tests = [post_second_wizard]          def post_third_wizard(test_object, final_step_response):              # loan done              find = models.Find.objects.get(pk=test_object.find_2.pk) -            test_object.assertEqual(find.container_ref, -                                    test_object.container_ref) +            test_object.assertEqual(find.container_ref, test_object.container_ref)              test_object.assertEqual(find.container, test_object.container2) +          self.form_datas[2].extra_tests = [post_third_wizard]          super(TreatmentWizardCreationTest, self).pre_wizard()      def post_wizard(self): -        self.assertEqual(models.Treatment.objects.count(), -                         self.treatment_number + 3) +        self.assertEqual(models.Treatment.objects.count(), self.treatment_number + 3)          self.find = models.Find.objects.get(pk=self.find.pk)          self.assertEqual(self.find.treatments.count(), 2)          self.find_2 = models.Find.objects.get(pk=self.find_2.pk) @@ -608,8 +619,7 @@ class TreatmentWizardCreationTest(WizardTest, FindInit, TestCase):  class ImportFindTest(ImportTest, FindInit, TestCase):      fixtures = FIND_TOWNS_FIXTURES + [ -        settings.ROOT_PATH + -        '../archaeological_finds/tests/import_loca_test.json', +        settings.ROOT_PATH + "../archaeological_finds/tests/import_loca_test.json",      ]      def setUp(self): @@ -623,38 +633,42 @@ class ImportFindTest(ImportTest, FindInit, TestCase):          old_nb_find = models.Find.objects.count()          MCC = ImporterType.objects.get(name="MCC - Mobilier") -        col = ImporterColumn.objects.create(col_number=25, -                                            importer_type_id=MCC.pk) -        formater = FormaterType.objects.filter( -            formater_type='FileFormater').all()[0] -        ImportTarget.objects.create(target='documents__image', -                                    formater_type_id=formater.pk, -                                    column_id=col.pk) +        col = ImporterColumn.objects.create(col_number=25, importer_type_id=MCC.pk) +        formater = FormaterType.objects.filter(formater_type="FileFormater").all()[0] +        ImportTarget.objects.create( +            target="documents__image", formater_type_id=formater.pk, column_id=col.pk +        )          mcc_file = open( -            settings.ROOT_PATH + -            '../archaeological_finds/tests/MCC-finds-example.csv', 'rb') +            settings.ROOT_PATH + "../archaeological_finds/tests/MCC-finds-example.csv", +            "rb", +        )          mcc_images = open( -            settings.ROOT_PATH + -            '../archaeological_finds/tests/images.zip', 'rb') -        file_dict = {'imported_file': SimpleUploadedFile(mcc_file.name, -                                                         mcc_file.read()), -                     'imported_images': SimpleUploadedFile(mcc_images.name, -                                                           mcc_images.read())} -        post_dict = {'importer_type': MCC.pk, 'skip_lines': 1, -                     "encoding": 'utf-8', "name": 'init_find_import', -                     "csv_sep": ","} -        form = forms_common.NewImportForm(data=post_dict, files=file_dict, -                                          user=self.user) +            settings.ROOT_PATH + "../archaeological_finds/tests/images.zip", "rb" +        ) +        file_dict = { +            "imported_file": SimpleUploadedFile(mcc_file.name, mcc_file.read()), +            "imported_images": SimpleUploadedFile(mcc_images.name, mcc_images.read()), +        } +        post_dict = { +            "importer_type": MCC.pk, +            "skip_lines": 1, +            "encoding": "utf-8", +            "name": "init_find_import", +            "csv_sep": ",", +        } +        form = forms_common.NewImportForm( +            data=post_dict, files=file_dict, user=self.user +        )          form.is_valid()          self.assertTrue(form.is_valid())          impt = form.save(self.ishtar_user)          impt.initialize()          # doing manual connections -        ceram = models.MaterialType.objects.get(txt_idx='ceramic').pk -        glass = models.MaterialType.objects.get(txt_idx='glass').pk -        self.set_target_key('material_types', 'terre-cuite', ceram) -        self.set_target_key('material_types', 'verre', glass) +        ceram = models.MaterialType.objects.get(txt_idx="ceramic").pk +        glass = models.MaterialType.objects.get(txt_idx="glass").pk +        self.set_target_key("material_types", "terre-cuite", ceram) +        self.set_target_key("material_types", "verre", glass)          impt.importation()          # new finds has now been imported          current_nb = models.BaseFind.objects.count() @@ -662,9 +676,11 @@ class ImportFindTest(ImportTest, FindInit, TestCase):          current_nb = models.Find.objects.count()          self.assertEqual(current_nb, (old_nb_find + 4))          self.assertEqual( -            models.Find.objects.filter(material_types__pk=ceram).count(), 4) +            models.Find.objects.filter(material_types__pk=ceram).count(), 4 +        )          self.assertEqual( -            models.Find.objects.filter(material_types__pk=glass).count(), 1) +            models.Find.objects.filter(material_types__pk=glass).count(), 1 +        )          images = []          for find in models.Find.objects.all():              images += [1 for im in find.images.all() if im.image.name] @@ -676,15 +692,19 @@ class ImportFindTest(ImportTest, FindInit, TestCase):              bf = bfs[idx]              expected_index = 4 - idx              self.assertEqual( -                bf.index, expected_index, +                bf.index, +                expected_index,                  "Bad index for imported base find: {} where {} is " -                "expected".format(bf.index, expected_index)) +                "expected".format(bf.index, expected_index), +            )              f = bf.find.all()[0]              self.assertEqual( -                f.index, expected_index, +                f.index, +                expected_index,                  "Bad index for imported find: {} where {} is expected".format(                      f.index, expected_index -                )) +                ), +            )      def test_import_locations(self):          self.create_finds() @@ -701,8 +721,7 @@ class ImportFindTest(ImportTest, FindInit, TestCase):          warehouse, __ = Warehouse.objects.get_or_create(              external_id="warehouse-test", -            defaults={"name": "Warehouse test", -                      "warehouse_type": wt} +            defaults={"name": "Warehouse test", "warehouse_type": wt},          )          container_types = [] @@ -717,7 +736,7 @@ class ImportFindTest(ImportTest, FindInit, TestCase):              WarehouseDivisionLink.objects.get_or_create(                  warehouse=warehouse,                  container_type=container_types[idx], -                order=(idx + 1) * 10 +                order=(idx + 1) * 10,              )          old_nb = models.BaseFind.objects.count() @@ -730,29 +749,56 @@ class ImportFindTest(ImportTest, FindInit, TestCase):          with open(imp_filename, "w") as impfile:              w = csv.writer(impfile) -            w.writerow(['External ID', "Warehouse", "Ref.", -                        "Container type", "Localisation 1", "Localisation 2", -                        "Localisation 3"]) +            w.writerow( +                [ +                    "External ID", +                    "Warehouse", +                    "Ref.", +                    "Container type", +                    "Localisation 1", +                    "Localisation 2", +                    "Localisation 3", +                ] +            )              for idx, ext_id in enumerate(external_ids):                  if idx < 2: -                    w.writerow([ext_id, "warehouse-test", -                                "Réf. {}".format((idx + 1) * 10), -                                container_types[-1].name, -                                "A", "42", idx + 1]) +                    w.writerow( +                        [ +                            ext_id, +                            "warehouse-test", +                            "Réf. {}".format((idx + 1) * 10), +                            container_types[-1].name, +                            "A", +                            "42", +                            idx + 1, +                        ] +                    )                  else: -                    w.writerow([ext_id, "warehouse-test", -                                "Réf. {}".format((idx + 1) * 10), -                                container_types[-1].name, -                                "A", 43]) +                    w.writerow( +                        [ +                            ext_id, +                            "warehouse-test", +                            "Réf. {}".format((idx + 1) * 10), +                            container_types[-1].name, +                            "A", +                            43, +                        ] +                    )          imp_file = open(imp_filename, "rb") -        file_dict = {'imported_file': SimpleUploadedFile(imp_file.name, -                                                         imp_file.read())} -        post_dict = {'importer_type': importer_type.pk, 'skip_lines': 1, -                     "encoding": 'utf-8', "name": 'init_find_import', -                     "csv_sep": ","} -        form = forms_common.NewImportForm(data=post_dict, files=file_dict, -                                          user=self.user) +        file_dict = { +            "imported_file": SimpleUploadedFile(imp_file.name, imp_file.read()) +        } +        post_dict = { +            "importer_type": importer_type.pk, +            "skip_lines": 1, +            "encoding": "utf-8", +            "name": "init_find_import", +            "csv_sep": ",", +        } +        form = forms_common.NewImportForm( +            data=post_dict, files=file_dict, user=self.user +        )          form.is_valid()          self.assertTrue(form.is_valid())          impt = form.save(self.ishtar_user) @@ -807,12 +853,15 @@ class ImportFindTest(ImportTest, FindInit, TestCase):              self.assertIn(box.parent_id, [s.pk for s in areas])          importer_type = ImporterType.objects.get(slug="importeur-test") -        cols = list(ImporterColumn.objects.filter( -            importer_type=importer_type, -            col_number__gte=5).values_list("id", flat=True)) +        cols = list( +            ImporterColumn.objects.filter( +                importer_type=importer_type, col_number__gte=5 +            ).values_list("id", flat=True) +        )          for target in ImportTarget.objects.filter(column_id__in=cols): -            target.target = target.target.replace("set_localisation", -                                                  "set_static_localisation") +            target.target = target.target.replace( +                "set_localisation", "set_static_localisation" +            )              target.save()          # delete area 43 and all boxes @@ -826,9 +875,9 @@ class ImportFindTest(ImportTest, FindInit, TestCase):          self.assertEqual(len(impt.errors), 2)          for error in impt.errors:              self.assertEqual( -                error['error'], -                "The division Area 43 do not exist for the location Warehouse " -                "test.") +                error["error"], +                "The division Area 43 do not exist for the location Warehouse " "test.", +            )      def tearDown(self):          self.tmpdir.cleanup() @@ -840,10 +889,9 @@ class FindTest(FindInit, TestCase):      def setUp(self):          self.create_finds(force=True) -        self.password = 'mypassword' -        self.username = 'myuser' -        User.objects.create_superuser(self.username, 'myemail@test.com', -                                      self.password) +        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) @@ -853,21 +901,20 @@ class FindTest(FindInit, TestCase):          self.assertEqual(              find.external_id,              "{}-{}".format( -                find.get_first_base_find().context_record.external_id, -                find.label)) +                find.get_first_base_find().context_record.external_id, find.label +            ), +        )          self.assertEqual(              base_find.external_id, -            "{}-{}".format( -                base_find.context_record.external_id, -                base_find.label)) +            "{}-{}".format(base_find.context_record.external_id, base_find.label), +        )          base_find.label = "New label"          base_find.save()          base_find = models.BaseFind.objects.get(pk=base_find.pk)          self.assertEqual(              base_find.external_id, -            "{}-{}".format( -                base_find.context_record.external_id, -                "New label")) +            "{}-{}".format(base_find.context_record.external_id, "New label"), +        )          cr = ContextRecord.objects.get(pk=base_find.context_record.pk)          cr.label = "new-label-too"          cr.skip_history_when_saving = True @@ -893,22 +940,21 @@ class FindTest(FindInit, TestCase):          # default: {get_first_base_find__context_record__external_id}-{label}          self.assertEqual(find.external_id, "PAT-12345-A1-new-label-too-hop")          profile = get_current_profile(force=True) -        profile.find_external_id = \ -            "{get_first_base_find__context_record__external_id}-{label}-"\ -            "{label}" +        profile.find_external_id = ( +            "{get_first_base_find__context_record__external_id}-{label}-" "{label}" +        )          profile.save()          find.save()          find = models.Find.objects.get(pk=find.pk) -        self.assertEqual(find.external_id, -                         "PAT-12345-A1-new-label-too-hop-hop") -        profile.find_external_id = \ -            "{get_first_base_find__context_record__external_id}-{label}-" \ +        self.assertEqual(find.external_id, "PAT-12345-A1-new-label-too-hop-hop") +        profile.find_external_id = ( +            "{get_first_base_find__context_record__external_id}-{label}-"              "{label}||lower||deduplicate" +        )          profile.save()          find.save()          find = models.Find.objects.get(pk=find.pk) -        self.assertEqual(find.external_id, -                         "pat-12345-a1-new-label-too-hop") +        self.assertEqual(find.external_id, "pat-12345-a1-new-label-too-hop")      def testIndex(self):          profile = get_current_profile() @@ -918,26 +964,29 @@ class FindTest(FindInit, TestCase):          op1 = self.create_operation()[-1]          op2 = self.create_operation()[-1] -        op1_cr1 = self.create_context_record(data={'label': "CR1", -                                                   'operation': op1})[-1] -        op1_cr2 = self.create_context_record(data={'label': "CR2", -                                                   'operation': op1})[-1] -        op2_cr1 = self.create_context_record(data={'label': "CR3", -                                                   'operation': op2})[-1] -        self.create_finds(data_base={'context_record': op1_cr1}) +        op1_cr1 = self.create_context_record(data={"label": "CR1", "operation": op1})[ +            -1 +        ] +        op1_cr2 = self.create_context_record(data={"label": "CR2", "operation": op1})[ +            -1 +        ] +        op2_cr1 = self.create_context_record(data={"label": "CR3", "operation": op2})[ +            -1 +        ] +        self.create_finds(data_base={"context_record": op1_cr1})          find_1 = self.finds[-1]          bf_1 = models.BaseFind.objects.get(pk=self.base_finds[-1].pk)          self.assertEqual(find_1.index, 1)          self.assertEqual(bf_1.index, 1)          # index is based on operations -        self.create_finds(data_base={'context_record': op1_cr2}) +        self.create_finds(data_base={"context_record": op1_cr2})          find_2 = self.finds[-1]          bf_2 = models.BaseFind.objects.get(pk=self.base_finds[-1].pk)          self.assertEqual(find_2.index, 2)          self.assertEqual(bf_2.index, 2) -        self.create_finds(data_base={'context_record': op2_cr1}) +        self.create_finds(data_base={"context_record": op2_cr1})          find_3 = self.finds[-1]          bf_3 = models.BaseFind.objects.get(pk=self.base_finds[-1].pk)          self.assertEqual(find_3.index, 1) @@ -949,24 +998,26 @@ class FindTest(FindInit, TestCase):          profile = get_current_profile(force=True)          op3 = self.create_operation()[-1] -        op3_cr1 = self.create_context_record(data={'label': "CR1", -                                                   'operation': op3})[-1] -        op3_cr2 = self.create_context_record(data={'label': "CR2", -                                                   'operation': op3})[-1] -        self.create_finds(data_base={'context_record': op3_cr1}) +        op3_cr1 = self.create_context_record(data={"label": "CR1", "operation": op3})[ +            -1 +        ] +        op3_cr2 = self.create_context_record(data={"label": "CR2", "operation": op3})[ +            -1 +        ] +        self.create_finds(data_base={"context_record": op3_cr1})          find_1b = self.finds[-1]          bf_1b = models.BaseFind.objects.get(pk=self.base_finds[-1].pk)          self.assertEqual(find_1b.index, 1)          self.assertEqual(bf_1b.index, 1)          # index now based on context records -        self.create_finds(data_base={'context_record': op3_cr2}) +        self.create_finds(data_base={"context_record": op3_cr2})          find_2b = self.finds[-1]          bf_2b = models.BaseFind.objects.get(pk=self.base_finds[-1].pk)          self.assertEqual(find_2b.index, 1)          self.assertEqual(bf_2b.index, 1) -        self.create_finds(data_base={'context_record': op3_cr2}) +        self.create_finds(data_base={"context_record": op3_cr2})          find_3b = self.finds[-1]          bf_3b = models.BaseFind.objects.get(pk=self.base_finds[-1].pk)          self.assertEqual(find_3b.index, 2) @@ -974,17 +1025,18 @@ class FindTest(FindInit, TestCase):      def test_show(self):          obj = self.finds[0] -        response = self.client.get(reverse('display-find', args=[obj.pk])) +        response = self.client.get(reverse("display-find", args=[obj.pk]))          self.assertEqual(response.status_code, 200) -        self.assertIn('load_window("/show-find/{}/");'.format(obj.pk), -                      response.content.decode()) +        self.assertIn( +            'load_window("/show-find/{}/");'.format(obj.pk), response.content.decode() +        )          c = Client() -        response = c.get(reverse('show-find', kwargs={'pk': obj.pk})) +        response = c.get(reverse("show-find", kwargs={"pk": obj.pk}))          # empty content when not allowed          self.assertRedirects(response, "/")          c.login(username=self.username, password=self.password) -        response = self.client.get(reverse('show-find', kwargs={'pk': obj.pk})) +        response = self.client.get(reverse("show-find", kwargs={"pk": obj.pk}))          self.assertEqual(response.status_code, 200)          self.assertIn(b'class="card sheet"', response.content) @@ -996,11 +1048,13 @@ class FindTest(FindInit, TestCase):          self.finds[0].delete()          # on delete the selected base find is not deleted if another find          # is related to it -        self.assertEqual(models.BaseFind.objects.filter( -            pk=self.base_finds[0].pk).count(), 1) +        self.assertEqual( +            models.BaseFind.objects.filter(pk=self.base_finds[0].pk).count(), 1 +        )          self.finds[1].delete() -        self.assertEqual(models.BaseFind.objects.filter( -            pk=self.base_finds[0].pk).count(), 0) +        self.assertEqual( +            models.BaseFind.objects.filter(pk=self.base_finds[0].pk).count(), 0 +        )      def test_get_material_types(self):          mat0 = models.MaterialType.objects.all()[0] @@ -1014,71 +1068,68 @@ class FindTest(FindInit, TestCase):          find0.material_types.add(mat1)          self.assertEqual( -            find0.get_material_types(), -            ", ".join(sorted([mat0.label, mat1.label]))) +            find0.get_material_types(), ", ".join(sorted([mat0.label, mat1.label])) +        )          self.assertEqual( -            find0.get_material_types_code(), -            "|".join(sorted([mat0.code, mat1.code]))) +            find0.get_material_types_code(), "|".join(sorted([mat0.code, mat1.code])) +        )  class FindSearchTest(FindInit, TestCase, SearchText):      fixtures = WAREHOUSE_FIXTURES      model = models.Find -    SEARCH_URL = 'get-find' +    SEARCH_URL = "get-find"      def setUp(self):          self.create_finds(force=True)          self.create_finds(force=True) -        self.username = 'myuser' -        self.password = 'mypassword' -        User.objects.create_superuser(self.username, 'myemail@test.com', -                                      self.password) +        self.username = "myuser" +        self.password = "mypassword" +        User.objects.create_superuser(self.username, "myemail@test.com", self.password)          self.client = Client()      def test_material_type_hierarchic_search(self):          find = self.finds[0]          c = Client() -        metal = models.MaterialType.objects.get(txt_idx='metal') -        iron_metal = models.MaterialType.objects.get(txt_idx='iron_metal') -        not_iron_metal = models.MaterialType.objects.get( -            txt_idx='not_iron_metal') +        metal = models.MaterialType.objects.get(txt_idx="metal") +        iron_metal = models.MaterialType.objects.get(txt_idx="iron_metal") +        not_iron_metal = models.MaterialType.objects.get(txt_idx="not_iron_metal")          find.material_types.add(iron_metal)          find = models.Find.objects.get(pk=find.pk)          find.save() -        search = {'material_types': iron_metal.pk} +        search = {"material_types": iron_metal.pk}          # no result when no authentication -        response = c.get(reverse('get-find'), search) +        response = c.get(reverse("get-find"), search)          self.assertRedirects(response, "/")          c.login(username=self.username, password=self.password)          # one result for exact search -        response = c.get(reverse('get-find'), search) +        response = c.get(reverse("get-find"), search)          self.assertEqual(response.status_code, 200)          content = response.content.decode()          res = json.loads(content) -        self.assertEqual(res['recordsTotal'], 1) -        self.assertEqual(res["rows"][0]["cached_materials"], -                         str(iron_metal)) +        self.assertEqual(res["recordsTotal"], 1) +        self.assertEqual(res["rows"][0]["cached_materials"], str(iron_metal))          # no result for the brother -        search = {'material_types': not_iron_metal.pk} -        response = c.get(reverse('get-find'), search) +        search = {"material_types": not_iron_metal.pk} +        response = c.get(reverse("get-find"), search)          self.assertEqual(response.status_code, 200)          content = response.content.decode() -        self.assertEqual(json.loads(content)['recordsTotal'], 0) +        self.assertEqual(json.loads(content)["recordsTotal"], 0)          # one result for the father -        search = {'material_types': metal.pk} -        response = c.get(reverse('get-find'), search) +        search = {"material_types": metal.pk} +        response = c.get(reverse("get-find"), search)          self.assertEqual(response.status_code, 200)          content = response.content.decode() -        self.assertEqual(json.loads(content)['recordsTotal'], 1) +        self.assertEqual(json.loads(content)["recordsTotal"], 1)          # test on text search -        material_key = str(pgettext_lazy("key for text search", 'material')) +        material_key = str(pgettext_lazy("key for text search", "material"))          result = [              ('{}="{}"'.format(material_key, str(iron_metal)), 1),              ('{}="{}"'.format(material_key, str(not_iron_metal)), 0), @@ -1093,67 +1144,67 @@ class FindSearchTest(FindInit, TestCase, SearchText):          # operation with no associated find          operation = create_operation(self.user, values={"year": 2017})          c.get(reverse("pin", args=["operation", operation.pk])) -        response = c.get(reverse('get-find'), {})  # empty search -> check pined +        response = c.get(reverse("get-find"), {})  # empty search -> check pined          self.assertEqual(response.status_code, 200)          content = response.content.decode() -        self.assertEqual(json.loads(content)['recordsTotal'], 0) +        self.assertEqual(json.loads(content)["recordsTotal"], 0)          # pinned operation with current find          find = self.finds[0] -        c.get(reverse( -            "pin", -            args=["operation", -                  find.get_first_base_find().context_record.operation.pk])) -        response = c.get(reverse('get-find'), {})  # empty search -> check pined +        c.get( +            reverse( +                "pin", +                args=[ +                    "operation", +                    find.get_first_base_find().context_record.operation.pk, +                ], +            ) +        ) +        response = c.get(reverse("get-find"), {})  # empty search -> check pined          self.assertEqual(response.status_code, 200)          content = response.content.decode() -        self.assertEqual(json.loads(content)['recordsTotal'], 1) +        self.assertEqual(json.loads(content)["recordsTotal"], 1)      def test_period_hierarchic_search(self):          find = self.finds[0]          c = Client() -        neo = Period.objects.get(txt_idx='neolithic') -        final_neo = Period.objects.get(txt_idx='final-neolithic') -        recent_neo = Period.objects.get(txt_idx='recent-neolithic') -        dating = Dating.objects.create( -            period=final_neo -        ) +        neo = Period.objects.get(txt_idx="neolithic") +        final_neo = Period.objects.get(txt_idx="final-neolithic") +        recent_neo = Period.objects.get(txt_idx="recent-neolithic") +        dating = Dating.objects.create(period=final_neo)          find.datings.add(dating)          find = models.Find.objects.get(pk=find.pk)          find.save() -        search = {'datings__period': final_neo.pk} +        search = {"datings__period": final_neo.pk}          # no result when no authentication -        response = c.get(reverse('get-find'), search) +        response = c.get(reverse("get-find"), search)          self.assertRedirects(response, "/")          # one result for exact search          c.login(username=self.username, password=self.password) -        response = c.get(reverse('get-find'), search) +        response = c.get(reverse("get-find"), search)          self.assertEqual(response.status_code, 200)          res = json.loads(response.content.decode()) -        self.assertEqual(res['recordsTotal'], 1) -        self.assertEqual(res["rows"][0]["cached_periods"], -                         str(final_neo)) +        self.assertEqual(res["recordsTotal"], 1) +        self.assertEqual(res["rows"][0]["cached_periods"], str(final_neo))          # no result for the brother -        search = {'datings__period': recent_neo.pk} -        response = c.get(reverse('get-find'), search) +        search = {"datings__period": recent_neo.pk} +        response = c.get(reverse("get-find"), search)          self.assertEqual(response.status_code, 200) -        self.assertEqual( -            json.loads(response.content.decode())['recordsTotal'], 0) +        self.assertEqual(json.loads(response.content.decode())["recordsTotal"], 0)          # one result for the father -        search = {'datings__period': neo.pk} -        response = c.get(reverse('get-find'), search) +        search = {"datings__period": neo.pk} +        response = c.get(reverse("get-find"), search)          self.assertEqual(response.status_code, 200) -        self.assertEqual( -            json.loads(response.content.decode())['recordsTotal'], 1) +        self.assertEqual(json.loads(response.content.decode())["recordsTotal"], 1)          # test on text search -        period_key = str(pgettext_lazy("key for text search", 'datings-period')) +        period_key = str(pgettext_lazy("key for text search", "datings-period"))          result = [              ('{}="{}"'.format(period_key, str(final_neo)), 1),              ('{}="{}"'.format(period_key, str(recent_neo)), 0), @@ -1176,36 +1227,36 @@ class FindSearchTest(FindInit, TestCase, SearchText):          find.conservatory_state = cs2          find.save() -        search = {'search_vector': f'conservatory="{cs2.name}"'} +        search = {"search_vector": f'conservatory="{cs2.name}"'}          # no result when no authentication -        response = c.get(reverse('get-find'), search) +        response = c.get(reverse("get-find"), search)          self.assertRedirects(response, "/")          c.login(username=self.username, password=self.password)          # one result for exact search -        response = c.get(reverse('get-find'), search) +        response = c.get(reverse("get-find"), search)          self.assertEqual(response.status_code, 200)          content = response.content.decode() -        self.assertEqual(json.loads(content)['recordsTotal'], 1) +        self.assertEqual(json.loads(content)["recordsTotal"], 1)          # no result for the brother -        search = {'search_vector': f'conservatory="{cs3.name}"'} -        response = c.get(reverse('get-find'), search) +        search = {"search_vector": f'conservatory="{cs3.name}"'} +        response = c.get(reverse("get-find"), search)          self.assertEqual(response.status_code, 200)          content = response.content.decode() -        self.assertEqual(json.loads(content)['recordsTotal'], 0) +        self.assertEqual(json.loads(content)["recordsTotal"], 0)          # one result for the father -        search = {'search_vector': f'conservatory="{cs1.name}"'} -        response = c.get(reverse('get-find'), search) +        search = {"search_vector": f'conservatory="{cs1.name}"'} +        response = c.get(reverse("get-find"), search)          self.assertEqual(response.status_code, 200)          content = response.content.decode() -        self.assertEqual(json.loads(content)['recordsTotal'], 1) +        self.assertEqual(json.loads(content)["recordsTotal"], 1)          # test on text search -        key = str(pgettext_lazy("key for text search", 'conservatory')) +        key = str(pgettext_lazy("key for text search", "conservatory"))          result = [              ('{}="{}"'.format(key, str(cs2)), 1),              ('{}="{}"'.format(key, str(cs3)), 0), @@ -1216,27 +1267,30 @@ class FindSearchTest(FindInit, TestCase, SearchText):      def test_image_search(self):          c = Client()          c.login(username=self.username, password=self.password) -        search = {'documents__image__isnull': 2}  # 2 for nullboolfield is None -        response = c.get(reverse('get-find'), search) +        search = {"documents__image__isnull": 2}  # 2 for nullboolfield is None +        response = c.get(reverse("get-find"), search)          self.assertEqual(response.status_code, 200)          res = json.loads(response.content.decode()) -        self.assertEqual(res['recordsTotal'], 0) +        self.assertEqual(res["recordsTotal"], 0)          # add an image to the first find          document = Document.objects.create(title="Image!") -        image_path = settings.ROOT_PATH + \ -              '../ishtar_common/static/media/images/ishtar-bg.jpg' +        image_path = ( +            settings.ROOT_PATH + "../ishtar_common/static/media/images/ishtar-bg.jpg" +        )          document.image = SimpleUploadedFile( -            name='ishtar-bg.jpg', content=open(image_path, 'rb').read(), -            content_type='image/jpeg') +            name="ishtar-bg.jpg", +            content=open(image_path, "rb").read(), +            content_type="image/jpeg", +        )          document.save()          self.finds[0].documents.add(document)          self.finds[0].save() -        response = c.get(reverse('get-find'), search) +        response = c.get(reverse("get-find"), search)          self.assertEqual(response.status_code, 200)          res = json.loads(response.content.decode()) -        self.assertEqual(res['recordsTotal'], 1) +        self.assertEqual(res["recordsTotal"], 1)      def test_search_with_callable(self):          find = self.finds[0] @@ -1244,21 +1298,21 @@ class FindSearchTest(FindInit, TestCase, SearchText):          c = Client()          c.login(username=self.username, password=self.password) -        loan_key = str(pgettext_lazy("key for text search", 'loan')) +        loan_key = str(pgettext_lazy("key for text search", "loan"))          result = [              ('{}="{}"'.format(loan_key, str(_("Yes"))), 0),              ('{}="{}"'.format(loan_key, str(_("No"))), 0), -            ] +        ]          self._test_search(c, result, context="No container defined")          warehouse = Warehouse.objects.create( -            name="Lambda warehouse", -            warehouse_type=WarehouseType.objects.all()[0]) +            name="Lambda warehouse", warehouse_type=WarehouseType.objects.all()[0] +        )          container = Container.objects.create(              location=warehouse,              responsible=warehouse, -            container_type=ContainerType.objects.all()[0] +            container_type=ContainerType.objects.all()[0],          )          find.container_ref = container          find.container = container @@ -1266,7 +1320,7 @@ class FindSearchTest(FindInit, TestCase, SearchText):          container2 = Container.objects.create(              location=warehouse,              responsible=warehouse, -            container_type=ContainerType.objects.all()[0] +            container_type=ContainerType.objects.all()[0],          )          find2.container_ref = container2          find2.container = container2 @@ -1276,8 +1330,9 @@ class FindSearchTest(FindInit, TestCase, SearchText):              ('{}="{}"'.format(loan_key, str(_("Yes"))), 0),              ('{}="{}"'.format(loan_key, str(_("No"))), 2),          ] -        self._test_search(c, result, context="All container in their " -                                             "reference location") +        self._test_search( +            c, result, context="All container in their " "reference location" +        )          find2.container = container          find2.save() @@ -1285,8 +1340,9 @@ class FindSearchTest(FindInit, TestCase, SearchText):              ('{}="{}"'.format(loan_key, str(_("Yes"))), 1),              ('{}="{}"'.format(loan_key, str(_("No"))), 1),          ] -        self._test_search(c, result, context="One container in his " -                                             "reference location") +        self._test_search( +            c, result, context="One container in his " "reference location" +        )  class FindAutocompleteTest(FindInit, TestCase): @@ -1298,10 +1354,9 @@ class FindAutocompleteTest(FindInit, TestCase):          self.create_finds(force=True)          self.create_finds(force=True)          self.create_finds(force=True) -        self.username = 'myuser' -        self.password = 'mypassword' -        User.objects.create_superuser(self.username, 'myemail@test.com', -                                      self.password) +        self.username = "myuser" +        self.password = "mypassword" +        User.objects.create_superuser(self.username, "myemail@test.com", self.password)          self.client = Client()      def test_autocomplete(self): @@ -1319,14 +1374,14 @@ class FindAutocompleteTest(FindInit, TestCase):          find4.save()          c = Client()          c.login(username=self.username, password=self.password) -        response = c.get(reverse('autocomplete-find') + "?term=12") +        response = c.get(reverse("autocomplete-find") + "?term=12")          self.assertEqual(response.status_code, 200)          content = response.content.decode()          res = json.loads(content)          self.assertEqual(len(res), 3) -        self.assertEqual(res[0]['id'], find2.pk)  # " 12" - startswith -        self.assertEqual(res[1]['id'], find.pk)  # 12 - endswith -        self.assertEqual(res[2]['id'], find4.pk)  # 12 - contains +        self.assertEqual(res[0]["id"], find2.pk)  # " 12" - startswith +        self.assertEqual(res[1]["id"], find.pk)  # 12 - endswith +        self.assertEqual(res[2]["id"], find4.pk)  # 12 - contains  class FindPermissionTest(FindInit, TestCase): @@ -1336,23 +1391,26 @@ class FindPermissionTest(FindInit, TestCase):      def setUp(self):          self.username, self.password, self.user = create_superuser()          self.alt_username, self.alt_password, self.alt_user = create_user() -        ct_find = ContentType.objects.get(app_label='archaeological_finds', -                                          model='find') -        self.alt_user.user_permissions.add(Permission.objects.get( -            codename='view_own_find', content_type=ct_find)) -        self.alt_user.user_permissions.add(Permission.objects.get( -            codename='change_own_find', content_type=ct_find)) +        ct_find = ContentType.objects.get( +            app_label="archaeological_finds", model="find" +        ) +        self.alt_user.user_permissions.add( +            Permission.objects.get(codename="view_own_find", content_type=ct_find) +        ) +        self.alt_user.user_permissions.add( +            Permission.objects.get(codename="change_own_find", content_type=ct_find) +        )          self.alt_username2, self.alt_password2, self.alt_user2 = create_user( -            username='luke', password='iamyourfather' +            username="luke", password="iamyourfather"          )          profile = UserProfile.objects.create( -            profile_type=ProfileType.objects.get(txt_idx='collaborator'), +            profile_type=ProfileType.objects.get(txt_idx="collaborator"),              person=self.alt_user2.ishtaruser.person, -            current=True +            current=True,          ) -        town = Town.objects.create(name='Tatouine', numero_insee='66000') -        area = Area.objects.create(label='Galaxie', txt_idx='galaxie') +        town = Town.objects.create(name="Tatouine", numero_insee="66000") +        area = Area.objects.create(label="Galaxie", txt_idx="galaxie")          area.towns.add(town)          profile.areas.add(area) @@ -1361,18 +1419,20 @@ class FindPermissionTest(FindInit, TestCase):          self.create_operation(self.alt_user, self.orgas[0])          self.create_context_record( -            user=self.user, -            data={"label": "CR 1", "operation": self.operations[0]}) +            user=self.user, data={"label": "CR 1", "operation": self.operations[0]} +        )          self.create_context_record( -            user=self.alt_user, -            data={"label": "CR 2", "operation": self.operations[1]}) +            user=self.alt_user, data={"label": "CR 2", "operation": self.operations[1]} +        )          self.cr_1 = self.context_records[-2]          self.cr_2 = self.context_records[-1] -        self.create_finds(data_base={'context_record': self.cr_1}, -                          user=self.user, force=True) -        self.create_finds(data_base={'context_record': self.cr_2}, -                          user=self.alt_user, force=True) +        self.create_finds( +            data_base={"context_record": self.cr_1}, user=self.user, force=True +        ) +        self.create_finds( +            data_base={"context_record": self.cr_2}, user=self.alt_user, force=True +        )          self.find_1 = self.finds[-2]          self.find_2 = self.finds[-1] @@ -1381,27 +1441,26 @@ class FindPermissionTest(FindInit, TestCase):      def test_own_search(self):          # no result when no authentification          c = Client() -        response = c.get(reverse('get-find')) -        self.assertTrue(not response.content or -                        not json.loads(response.content)) +        response = c.get(reverse("get-find")) +        self.assertTrue(not response.content or not json.loads(response.content))          # possession          c = Client()          c.login(username=self.alt_username, password=self.alt_password) -        response = c.get(reverse('get-find')) +        response = c.get(reverse("get-find"))          # only one "own" context record available          content = response.content.decode()          self.assertTrue(json.loads(content)) -        self.assertEqual(json.loads(content)['recordsTotal'], 1) +        self.assertEqual(json.loads(content)["recordsTotal"], 1)          # area filter          c = Client()          c.login(username=self.alt_username2, password=self.alt_password2) -        response = c.get(reverse('get-find')) +        response = c.get(reverse("get-find"))          # only one "own" operation available          content = response.content.decode()          self.assertTrue(json.loads(content)) -        self.assertEqual(json.loads(content)['recordsTotal'], 1) +        self.assertEqual(json.loads(content)["recordsTotal"], 1)  class FindQATest(FindInit, TestCase): @@ -1413,17 +1472,16 @@ class FindQATest(FindInit, TestCase):          self.create_finds(data_base={"label": "Find 2"}, force=True)          self.username, self.password, self.user = create_superuser()          self.alt_username, self.alt_password, self.alt_user = create_user() -        self.alt_user.user_permissions.add(Permission.objects.get( -            codename='change_find')) +        self.alt_user.user_permissions.add( +            Permission.objects.get(codename="change_find") +        )      def test_duplicate(self):          t1, __ = models.Treatment.objects.get_or_create( -            label="Treatment 1", -            treatment_state=models.TreatmentState.objects.all()[0] +            label="Treatment 1", treatment_state=models.TreatmentState.objects.all()[0]          )          t2, __ = models.Treatment.objects.get_or_create( -            label="Treatment 1", -            treatment_state=models.TreatmentState.objects.all()[0] +            label="Treatment 1", treatment_state=models.TreatmentState.objects.all()[0]          )          find = self.finds[0]          default_desc = "Description for duplicate" @@ -1435,9 +1493,9 @@ class FindQATest(FindInit, TestCase):          find.treatments.add(t2)          c = Client() -        url = reverse('find-qa-duplicate', args=[find.pk]) +        url = reverse("find-qa-duplicate", args=[find.pk])          response = c.get(url) -        self.assertRedirects(response, '/') +        self.assertRedirects(response, "/")          c = Client()          c.login(username=self.username, password=self.password) @@ -1449,19 +1507,16 @@ class FindQATest(FindInit, TestCase):          response = c.get(url)          self.assertEqual(response.status_code, 200) -        data = { -            "denomination": "clone", -            "label": "clone - free id" -        } +        data = {"denomination": "clone", "label": "clone - free id"}          nb_find = models.Find.objects.count()          nb_bf = models.BaseFind.objects.count()          response = c.post(url, data)          self.assertEqual(response.status_code, 302)  # success redirect          self.assertEqual(models.Find.objects.count(), nb_find + 1)          self.assertEqual(models.BaseFind.objects.count(), nb_bf + 1) -        new = models.Find.objects.order_by('-pk').all()[0] +        new = models.Find.objects.order_by("-pk").all()[0]          self.assertEqual(new.description, default_desc) -        new_bf = models.BaseFind.objects.order_by('-pk').all()[0] +        new_bf = models.BaseFind.objects.order_by("-pk").all()[0]          base_bf = find.get_first_base_find()          self.assertEqual(new_bf.context_record, base_bf.context_record)          self.assertNotIn(d, list(new.documents.all())) @@ -1473,17 +1528,17 @@ class FindQATest(FindInit, TestCase):      def test_bulk_update(self):          c = Client()          pks = "{}-{}".format(self.finds[0].pk, self.finds[1].pk) -        response = c.get(reverse('find-qa-bulk-update', args=[pks])) -        self.assertRedirects(response, '/') +        response = c.get(reverse("find-qa-bulk-update", args=[pks])) +        self.assertRedirects(response, "/")          c = Client()          c.login(username=self.username, password=self.password) -        response = c.get(reverse('find-qa-bulk-update', args=[pks])) +        response = c.get(reverse("find-qa-bulk-update", args=[pks]))          self.assertEqual(response.status_code, 200)          c = Client()          c.login(username=self.alt_username, password=self.alt_password) -        response = c.get(reverse('find-qa-bulk-update', args=[pks])) +        response = c.get(reverse("find-qa-bulk-update", args=[pks]))          self.assertEqual(response.status_code, 200)          find_0 = self.finds[0] @@ -1496,51 +1551,45 @@ class FindQATest(FindInit, TestCase):          find_1.save()          period = Period.objects.all()[0].pk -        self.assertNotIn(period, -                         [dating.period.pk for dating in find_0.datings.all()]) -        self.assertNotIn(period, -                         [dating.period.pk for dating in find_1.datings.all()]) +        self.assertNotIn(period, [dating.period.pk for dating in find_0.datings.all()]) +        self.assertNotIn(period, [dating.period.pk for dating in find_1.datings.all()])          extra_desc = "Extra description"          response = c.post( -            reverse('find-qa-bulk-update-confirm', args=[pks]), -            {'qa_period': period, 'qa_description': extra_desc} +            reverse("find-qa-bulk-update-confirm", args=[pks]), +            {"qa_period": period, "qa_description": extra_desc},          )          if response.status_code != 200: -            self.assertRedirects(response, '/success/') -        self.assertIn(period, -                      [dating.period.pk for dating in find_0.datings.all()]) -        self.assertIn(period, -                      [dating.period.pk for dating in find_1.datings.all()]) -        self.assertEqual(models.Find.objects.get(pk=find_0.pk).description, -                         base_desc_0 + "\n" + extra_desc) -        self.assertEqual(models.Find.objects.get(pk=find_1.pk).description, -                         base_desc_1 + "\n" + extra_desc) +            self.assertRedirects(response, "/success/") +        self.assertIn(period, [dating.period.pk for dating in find_0.datings.all()]) +        self.assertIn(period, [dating.period.pk for dating in find_1.datings.all()]) +        self.assertEqual( +            models.Find.objects.get(pk=find_0.pk).description, +            base_desc_0 + "\n" + extra_desc, +        ) +        self.assertEqual( +            models.Find.objects.get(pk=find_1.pk).description, +            base_desc_1 + "\n" + extra_desc, +        )      def test_basket(self):          find_0 = self.finds[0]          find_1 = self.finds[1]          nb_basket = models.FindBasket.objects.count() -        url = reverse('find-qa-basket', args=[find_0.pk]) +        url = reverse("find-qa-basket", args=[find_0.pk])          c = Client()          response = c.get(url) -        self.assertRedirects(response, '/') +        self.assertRedirects(response, "/")          c.login(username=self.username, password=self.password)          response = c.get(url)          self.assertEqual(response.status_code, 200)          label = "Test - basket" -        data = { -            "qa_bf_create_or_update": "create", -            "qa_bf_label": label -        } +        data = {"qa_bf_create_or_update": "create", "qa_bf_label": label}          response = c.post(url, data)          if response.status_code != 200: -            self.assertRedirects(response, '/success/') -        self.assertEqual( -            nb_basket + 1, -            models.FindBasket.objects.count()) -        q = models.FindBasket.objects.filter( -            user=self.user.ishtaruser, label=label) +            self.assertRedirects(response, "/success/") +        self.assertEqual(nb_basket + 1, models.FindBasket.objects.count()) +        q = models.FindBasket.objects.filter(user=self.user.ishtaruser, label=label)          self.assertEqual(q.count(), 1)          # no duplicate with same user, same name          c.post(url, data) @@ -1549,12 +1598,9 @@ class FindQATest(FindInit, TestCase):          self.assertEqual(basket.items.count(), 1)          # update -        url = reverse('find-qa-basket', args=[find_1.pk]) +        url = reverse("find-qa-basket", args=[find_1.pk])          self.assertEqual(basket.items.count(), 1) -        data = { -            "qa_bf_create_or_update": "update", -            "qa_bf_basket": basket.pk -        } +        data = {"qa_bf_create_or_update": "update", "qa_bf_basket": basket.pk}          c.post(url, data)          self.assertEqual(basket.items.count(), 2)          self.assertIn(find_1, list(basket.items.all())) @@ -1578,11 +1624,12 @@ class FindQATest(FindInit, TestCase):          find_0 = self.finds[0]          find_1 = self.finds[1]          pks = "{}-{}".format(find_0.pk, find_1.pk) -        url = reverse('find-qa-packaging', args=[pks]) +        url = reverse("find-qa-packaging", args=[pks])          response = c.get(url) -        self.assertRedirects(response, '/') +        self.assertRedirects(response, "/")          profile, created = IshtarSiteProfile.objects.get_or_create( -            slug='default', active=True) +            slug="default", active=True +        )          profile.warehouse = False          profile.save() @@ -1603,60 +1650,61 @@ class FindQATest(FindInit, TestCase):          self.assertEqual(response.status_code, 200)          main_warehouse = Warehouse.objects.create( -            name="Main", -            warehouse_type=WarehouseType.objects.all()[0] +            name="Main", warehouse_type=WarehouseType.objects.all()[0]          )          container = Container.objects.create( -            reference="Test", responsible=main_warehouse, +            reference="Test", +            responsible=main_warehouse,              location=main_warehouse, -            container_type=ContainerType.objects.all()[0] +            container_type=ContainerType.objects.all()[0],          )          container2 = Container.objects.create( -            reference="Test2", responsible=main_warehouse, +            reference="Test2", +            responsible=main_warehouse,              location=main_warehouse, -            container_type=ContainerType.objects.all()[0] +            container_type=ContainerType.objects.all()[0],          ) -        packaging = models.TreatmentType.objects.get(txt_idx='packaging') +        packaging = models.TreatmentType.objects.get(txt_idx="packaging")          packaging.change_reference_location = True          packaging.save()          data_check_lst = [ -            ({ -                 'qa-packaging-container': container.pk, -                 'qa-packaging-container_to_change': 'reference', -             }, -             { -                 'container_ref': container, -                 'container': None -             }, 0), -            ({ -                 'qa-packaging-container': container2.pk, -                 'qa-packaging-container_to_change': 'current', -             }, -             { -                 'container_ref': None, -                 'container': container2 -             }, 0), -            ({ -                 'qa-packaging-container': container.pk, -                 'qa-packaging-container_to_change': 'current-and-reference', -             }, -             { -                 'container_ref': container, -                 'container': container -             }, 0), -            ({ -                 'qa-packaging-container': container2.pk, -                 'qa-packaging-container_to_change': 'reference', -                 'qa-packaging-create_treatment': True, -                 'qa-packaging-year': 2019, -                 'qa-packaging-treatment_type': packaging.pk -             }, -             { -                 'container_ref': container2, -                 'container': None -             }, 1), +            ( +                { +                    "qa-packaging-container": container.pk, +                    "qa-packaging-container_to_change": "reference", +                }, +                {"container_ref": container, "container": None}, +                0, +            ), +            ( +                { +                    "qa-packaging-container": container2.pk, +                    "qa-packaging-container_to_change": "current", +                }, +                {"container_ref": None, "container": container2}, +                0, +            ), +            ( +                { +                    "qa-packaging-container": container.pk, +                    "qa-packaging-container_to_change": "current-and-reference", +                }, +                {"container_ref": container, "container": container}, +                0, +            ), +            ( +                { +                    "qa-packaging-container": container2.pk, +                    "qa-packaging-container_to_change": "reference", +                    "qa-packaging-create_treatment": True, +                    "qa-packaging-year": 2019, +                    "qa-packaging-treatment_type": packaging.pk, +                }, +                {"container_ref": container2, "container": None}, +                1, +            ),          ]          for data, check, nb_treat in data_check_lst: @@ -1670,10 +1718,8 @@ class FindQATest(FindInit, TestCase):              init_nb_treat = models.Treatment.objects.count() -            response = c.post( -                reverse('find-qa-packaging', args=[pks]), -                data) -            self.assertRedirects(response, '/success/') +            response = c.post(reverse("find-qa-packaging", args=[pks]), data) +            self.assertRedirects(response, "/success/")              for k in check:                  find = models.Find.objects.get(pk=find_0.pk)                  self.assertEqual(getattr(find, k), check[k]) @@ -1696,31 +1742,29 @@ class FindHistoryTest(FindInit, TestCase):      def _add_datings(self, find):          d1_attrs = { -            "period": Period.objects.get(txt_idx='neolithic'), +            "period": Period.objects.get(txt_idx="neolithic"),              "start_date": 5000, -            'end_date': 5001, -            'dating_type': DatingType.objects.get( -                txt_idx='from_absolute_dating'), -            "quality": DatingQuality.objects.get(txt_idx='sure'), -            "precise_dating": "Blah !!!" +            "end_date": 5001, +            "dating_type": DatingType.objects.get(txt_idx="from_absolute_dating"), +            "quality": DatingQuality.objects.get(txt_idx="sure"), +            "precise_dating": "Blah !!!",          }          d1 = Dating.objects.create(**d1_attrs)          d2_attrs = { -            "period": Period.objects.get(txt_idx='paleolithic'), +            "period": Period.objects.get(txt_idx="paleolithic"),          }          d2 = Dating.objects.create(**d2_attrs)          d1_dct, d2_dct = {}, {}          for k in Dating.HISTORY_ATTR: -            for dct, attr in ((d1_dct, d1_attrs) , -                              (d2_dct, d2_attrs)): +            for dct, attr in ((d1_dct, d1_attrs), (d2_dct, d2_attrs)):                  if k in attr: -                    if hasattr(attr[k], 'txt_idx'): +                    if hasattr(attr[k], "txt_idx"):                          dct[k] = attr[k].txt_idx                      else:                          dct[k] = str(attr[k])                  else: -                    dct[k] = '' +                    dct[k] = ""          find.datings.add(d1)          find.datings.add(d2) @@ -1730,8 +1774,8 @@ class FindHistoryTest(FindInit, TestCase):          find = self.finds[0]          user = self.get_default_user() -        ceram = models.MaterialType.objects.get(txt_idx='ceramic').pk -        glass = models.MaterialType.objects.get(txt_idx='glass').pk +        ceram = models.MaterialType.objects.get(txt_idx="ceramic").pk +        glass = models.MaterialType.objects.get(txt_idx="glass").pk          find = models.Find.objects.get(pk=find.pk)          nb_hist = find.history.count() @@ -1745,49 +1789,50 @@ class FindHistoryTest(FindInit, TestCase):          find = models.Find.objects.get(pk=find.pk)          self.assertIsNotNone(find.history_m2m) -        self.assertIn('material_types', find.history_m2m) +        self.assertIn("material_types", find.history_m2m)          self.assertIn( -            find.history_m2m['material_types'], -            [['ceramic', 'glass'],   # order do not -             ['glass', 'ceramic']])  # matter -        self.assertIn('datings', find.history_m2m) +            find.history_m2m["material_types"], +            [["ceramic", "glass"], ["glass", "ceramic"]],  # order do not +        )  # matter +        self.assertIn("datings", find.history_m2m)          self.assertIn( -            find.history_m2m['datings'], -            [[d1_txt, d2_txt],   # order do not -             [d2_txt, d1_txt]])  # matter +            find.history_m2m["datings"], +            [[d1_txt, d2_txt], [d2_txt, d1_txt]],  # order do not +        )  # matter          self.assertEqual(find.history.count(), nb_hist + 1) -        historical_material_types = find.history_m2m['material_types'] +        historical_material_types = find.history_m2m["material_types"]          find = models.Find.objects.get(pk=find.pk)          find.label = "hop hop hop2"          find.history_modifier = user -        if hasattr(find, 'skip_history_when_saving'): -            delattr(find, 'skip_history_when_saving') +        if hasattr(find, "skip_history_when_saving"): +            delattr(find, "skip_history_when_saving")          find._force_history = True          find.save()          find.material_types.remove(ceram)          find.datings.clear()          find = models.Find.objects.get(pk=find.pk) -        self.assertEqual(find.history_m2m['material_types'], ['glass']) -        self.assertEqual(find.history_m2m['datings'], []) +        self.assertEqual(find.history_m2m["material_types"], ["glass"]) +        self.assertEqual(find.history_m2m["datings"], [])          self.assertEqual(find.history.count(), nb_hist + 2) -        self.assertEqual(find.history.all()[1].history_m2m['material_types'], -                         historical_material_types) -        self.assertEqual(find.history.all()[0].history_m2m['material_types'], -                         ["glass"]) +        self.assertEqual( +            find.history.all()[1].history_m2m["material_types"], +            historical_material_types, +        ) +        self.assertEqual(find.history.all()[0].history_m2m["material_types"], ["glass"])      def _init_m2m(self, find, user): -        ceram = models.MaterialType.objects.get(txt_idx='ceramic').pk -        glass = models.MaterialType.objects.get(txt_idx='glass').pk +        ceram = models.MaterialType.objects.get(txt_idx="ceramic").pk +        glass = models.MaterialType.objects.get(txt_idx="glass").pk          find = models.Find.objects.get(pk=find.pk)          find.history_modifier = user          find.label = "hop hop hop1"          find._force_history = True -        if hasattr(find, 'skip_history_when_saving'): -            delattr(find, 'skip_history_when_saving') +        if hasattr(find, "skip_history_when_saving"): +            delattr(find, "skip_history_when_saving")          find.save()          find.material_types.add(ceram)          find.material_types.add(glass) @@ -1797,8 +1842,8 @@ class FindHistoryTest(FindInit, TestCase):          find.history_modifier = user          find.label = "hop hop hop2"          find._force_history = True -        if hasattr(find, 'skip_history_when_saving'): -            delattr(find, 'skip_history_when_saving') +        if hasattr(find, "skip_history_when_saving"): +            delattr(find, "skip_history_when_saving")          find.save()          find.datings.clear()          find.material_types.remove(ceram) @@ -1810,32 +1855,35 @@ class FindHistoryTest(FindInit, TestCase):          self._init_m2m(find, user)          find = models.Find.objects.get(pk=find.pk) -        history_date = find.history.order_by('-history_date').all()[ -            1].history_date.strftime('%Y-%m-%dT%H:%M:%S.%f') +        history_date = ( +            find.history.order_by("-history_date") +            .all()[1] +            .history_date.strftime("%Y-%m-%dT%H:%M:%S.%f") +        )          c.login(username=self.username, password=self.password) -        response = c.get(reverse('show-find', -                                 kwargs={'pk': find.pk})) +        response = c.get(reverse("show-find", kwargs={"pk": find.pk}))          self.assertEqual(response.status_code, 200)          self.assertIn(b'class="card sheet"', response.content) -        content = response.content.decode('utf-8') -        self.assertNotIn( -            Period.objects.get(txt_idx='neolithic').label, content) +        content = response.content.decode("utf-8") +        self.assertNotIn(Period.objects.get(txt_idx="neolithic").label, content)          self.assertNotIn("5001", content) -        response = c.get(reverse('show-historized-find', -                                 kwargs={'pk': find.pk, -                                         'date': history_date})) +        response = c.get( +            reverse( +                "show-historized-find", kwargs={"pk": find.pk, "date": history_date} +            ) +        )          self.assertEqual(response.status_code, 200) -        content = response.content.decode('utf-8') +        content = response.content.decode("utf-8")          self.assertIn('class="card sheet"', content)          self.assertIn( -            models.MaterialType.objects.get(txt_idx='ceramic').label, content, -            msg="ceramic not found in historical sheet") -        self.assertIn("5001", content, msg="5001 not found in historical " -                                           "sheet") -        self.assertIn( -            Period.objects.get(txt_idx='neolithic').label, content) +            models.MaterialType.objects.get(txt_idx="ceramic").label, +            content, +            msg="ceramic not found in historical sheet", +        ) +        self.assertIn("5001", content, msg="5001 not found in historical " "sheet") +        self.assertIn(Period.objects.get(txt_idx="neolithic").label, content)      def test_m2m_history_restore(self):          user = self.get_default_user() @@ -1843,16 +1891,15 @@ class FindHistoryTest(FindInit, TestCase):          self._init_m2m(find, user)          find = models.Find.objects.get(pk=find.pk) -        ceram = models.MaterialType.objects.get(txt_idx='ceramic') -        glass = models.MaterialType.objects.get(txt_idx='glass') +        ceram = models.MaterialType.objects.get(txt_idx="ceramic") +        glass = models.MaterialType.objects.get(txt_idx="glass")          materials = list(find.material_types.all())          self.assertNotIn(ceram, materials)          self.assertIn(glass, materials)          self.assertEqual(list(find.datings.all()), []) -        history_date = find.history.order_by('-history_date').all()[ -            1].history_date +        history_date = find.history.order_by("-history_date").all()[1].history_date          find.rollback(history_date)          find = models.Find.objects.get(pk=find.pk) @@ -1865,10 +1912,10 @@ class FindHistoryTest(FindInit, TestCase):              dating_dct = {}              for k in self.d1_dct.keys():                  if not getattr(dating, k): -                    dating_dct[k] = '' +                    dating_dct[k] = ""                      continue                  dating_dct[k] = getattr(dating, k) -                if hasattr(dating_dct[k], 'txt_idx'): +                if hasattr(dating_dct[k], "txt_idx"):                      dating_dct[k] = dating_dct[k].txt_idx                  dating_dct[k] = str(dating_dct[k]) @@ -1883,31 +1930,34 @@ class TreatmentTest(FindInit, TestCase):      model = models.Find      def setUp(self): -        base_img = settings.ROOT_PATH + \ -            '../ishtar_common/static/media/images/ishtar-bg.jpg' +        base_img = ( +            settings.ROOT_PATH + "../ishtar_common/static/media/images/ishtar-bg.jpg" +        )          temp_dir = tempfile.gettempdir() -        img = os.path.join(temp_dir, 'ishtar-bg.jpg') +        img = os.path.join(temp_dir, "ishtar-bg.jpg")          shutil.copy2(base_img, img)          self.create_finds(data_base={"label": "Find 1"}, force=True)          self.create_finds(data_base={"label": "Find 2"}, force=True)          image = Document.objects.create(title="Image!") -        image.image.save('ishtar-bg.jpg', File(open(img, "rb"))) +        image.image.save("ishtar-bg.jpg", File(open(img, "rb")))          self.finds[0].documents.add(image)          self.finds[0].save()          self.basket = models.FindBasket.objects.create( -            label="My basket", user=IshtarUser.objects.get( -                pk=self.get_default_user().pk)) +            label="My basket", +            user=IshtarUser.objects.get(pk=self.get_default_user().pk), +        )          self.other_basket = models.FindBasket.objects.create( -            label="My other basket", user=IshtarUser.objects.get( -                pk=self.get_default_user().pk)) +            label="My other basket", +            user=IshtarUser.objects.get(pk=self.get_default_user().pk), +        )          for find in self.finds:              self.basket.items.add(find)              self.other_basket.items.add(find)      def test_packaging_with_new_find_creation(self): -        treatment_type = models.TreatmentType.objects.get(txt_idx='packaging') +        treatment_type = models.TreatmentType.objects.get(txt_idx="packaging")          # make packaging a treatment with a new version of the find created          treatment_type.create_new_find = True          treatment_type.save() @@ -1918,45 +1968,52 @@ class TreatmentTest(FindInit, TestCase):          first_find = self.finds[0]          completed, created = models.TreatmentState.objects.get_or_create( -            txt_idx='completed', defaults={"executed": True, "label": "Done"} +            txt_idx="completed", defaults={"executed": True, "label": "Done"}          )          completed.executed = True          completed.save()          treatment.treatment_state = completed          treatment.save( -            user=self.get_default_user(), items=self.basket, +            user=self.get_default_user(), +            items=self.basket,              treatment_type_list=[treatment_type],          )          treatment.treatment_types.add(treatment_type) -        self.assertEqual(items_nb + self.basket.items.count(), -                         models.Find.objects.count(), -                         msg="Packaging doesn't generate enough new finds") +        self.assertEqual( +            items_nb + self.basket.items.count(), +            models.Find.objects.count(), +            msg="Packaging doesn't generate enough new finds", +        )          resulting_find = models.Find.objects.get(              upstream_treatment__upstream=first_find, -            base_finds__pk=first_find.base_finds.all()[0].pk +            base_finds__pk=first_find.base_finds.all()[0].pk,          )          # image names used to be altered on save: check for this bug          self.assertEqual(              resulting_find.documents.all()[0].title, -            models.Find.objects.get(pk=first_find.pk).documents.all()[0].title +            models.Find.objects.get(pk=first_find.pk).documents.all()[0].title,          )          # new version of the find is in the basket          for item in self.basket.items.all():              self.assertNotIn( -                item, self.finds, -                msg="Original basket have not been upgraded after packaging") +                item, +                self.finds, +                msg="Original basket have not been upgraded after packaging", +            )          for item in self.other_basket.items.all():              self.assertNotIn( -                item, self.finds, -                msg="Other basket have not been upgraded after packaging") +                item, +                self.finds, +                msg="Other basket have not been upgraded after packaging", +            )      def test_simple_delete(self): -        treatment_type = models.TreatmentType.objects.get(txt_idx='packaging') +        treatment_type = models.TreatmentType.objects.get(txt_idx="packaging")          treatment_type.create_new_find = False          treatment_type.save() @@ -1966,14 +2023,15 @@ class TreatmentTest(FindInit, TestCase):          initial_find = self.finds[0]          completed, created = models.TreatmentState.objects.get_or_create( -            txt_idx='completed', defaults={"executed": True, "label": "Done"} +            txt_idx="completed", defaults={"executed": True, "label": "Done"}          )          completed.executed = True          completed.save()          treatment.treatment_state = completed          treatment.save( -            user=self.get_default_user(), items=self.basket, +            user=self.get_default_user(), +            items=self.basket,              treatment_type_list=[treatment_type],          )          treatment.treatment_types.add(treatment_type) @@ -1981,8 +2039,7 @@ class TreatmentTest(FindInit, TestCase):          self.assertEqual(nb_find, models.Find.objects.count())          treatment.delete() -        self.assertEqual( -            models.Treatment.objects.filter(pk=treatment.pk).count(), 0) +        self.assertEqual(models.Treatment.objects.filter(pk=treatment.pk).count(), 0)          q = models.Find.objects.filter(pk=initial_find.pk)          # initial find not deleted @@ -1991,7 +2048,7 @@ class TreatmentTest(FindInit, TestCase):          self.assertEqual(initial_find.upstream_treatment, None)      def test_upstream_find_delete(self): -        treatment_type = models.TreatmentType.objects.get(txt_idx='packaging') +        treatment_type = models.TreatmentType.objects.get(txt_idx="packaging")          # make packaging a treatment with a new version of the find created          treatment_type.create_new_find = True          treatment_type.save() @@ -2002,30 +2059,29 @@ class TreatmentTest(FindInit, TestCase):          initial_find = self.finds[0]          completed, created = models.TreatmentState.objects.get_or_create( -            txt_idx='completed', defaults={"executed": True, "label": "Done"} +            txt_idx="completed", defaults={"executed": True, "label": "Done"}          )          completed.executed = True          completed.save()          treatment.treatment_state = completed          treatment.save( -            user=self.get_default_user(), items=self.basket, +            user=self.get_default_user(), +            items=self.basket,              treatment_type_list=[treatment_type],          )          treatment.treatment_types.add(treatment_type)          nb_b = self.basket.items.count() -        self.assertEqual( -            nb_find + nb_b, models.Find.objects.count()) +        self.assertEqual(nb_find + nb_b, models.Find.objects.count())          resulting_find = models.Find.objects.get(              upstream_treatment__upstream=initial_find, -            base_finds__pk=initial_find.base_finds.all()[0].pk +            base_finds__pk=initial_find.base_finds.all()[0].pk,          )          resulting_find.delete() -        self.assertEqual( -            models.Treatment.objects.filter(pk=treatment.pk).count(), 0) +        self.assertEqual(models.Treatment.objects.filter(pk=treatment.pk).count(), 0)          q = models.Find.objects.filter(pk=initial_find.pk)          # initial find not deleted          self.assertEqual(q.count(), 1) @@ -2033,7 +2089,7 @@ class TreatmentTest(FindInit, TestCase):          self.assertEqual(initial_find.upstream_treatment, None)      def test_treatment_delete(self): -        treatment_type = models.TreatmentType.objects.get(txt_idx='packaging') +        treatment_type = models.TreatmentType.objects.get(txt_idx="packaging")          treatment_type.create_new_find = True          treatment_type.save() @@ -2043,28 +2099,27 @@ class TreatmentTest(FindInit, TestCase):          initial_find = self.finds[0]          completed, created = models.TreatmentState.objects.get_or_create( -            txt_idx='completed', defaults={"executed": True, "label": "Done"} +            txt_idx="completed", defaults={"executed": True, "label": "Done"}          )          completed.executed = True          completed.save()          treatment.treatment_state = completed          treatment.save( -            user=self.get_default_user(), items=self.basket, +            user=self.get_default_user(), +            items=self.basket,              treatment_type_list=[treatment_type],          )          treatment.treatment_types.add(treatment_type)          nb_b = self.basket.items.count() -        self.assertEqual( -            nb_find + nb_b, models.Find.objects.count()) +        self.assertEqual(nb_find + nb_b, models.Find.objects.count())          treatment.delete()          self.assertEqual(nb_find, models.Find.objects.count()) -        self.assertEqual( -            models.Treatment.objects.filter(pk=treatment.pk).count(), 0) +        self.assertEqual(models.Treatment.objects.filter(pk=treatment.pk).count(), 0)          q = models.Find.objects.filter(pk=initial_find.pk)          # initial find not deleted          self.assertEqual(q.count(), 1) @@ -2081,12 +2136,12 @@ class GeomaticTest(FindInit, TestCase):          self.create_finds(data_base={"label": "Find 1"}, force=True)      def test_point_precision(self): -        self.username = 'myuser' -        self.password = 'mypassword' -        User.objects.create_superuser(self.username, 'myemail@test.com', -                                      self.password) +        self.username = "myuser" +        self.password = "mypassword" +        User.objects.create_superuser(self.username, "myemail@test.com", self.password)          profile, created = IshtarSiteProfile.objects.get_or_create( -            slug='default', active=True) +            slug="default", active=True +        )          profile.mapping = True          profile.save()          wgs84 = SpatialReferenceSystem.objects.get(srid=4326) @@ -2101,19 +2156,18 @@ class GeomaticTest(FindInit, TestCase):          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})) -        self.assertIn(b'33.12999', response.content) +        response = c.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})) -        self.assertIn(b'33.13', response.content) +        response = c.get(reverse("show-find", kwargs={"pk": find.pk})) +        self.assertIn(b"33.13", response.content)      def test_update_container_localisation_on_warehouse_update(self):          profile, created = IshtarSiteProfile.objects.get_or_create( -            slug='default', active=True) +            slug="default", active=True +        )          profile.mapping = True          profile.save()          wgs84 = SpatialReferenceSystem.objects.get(srid=4326) @@ -2122,17 +2176,15 @@ class GeomaticTest(FindInit, TestCase):          base_find = find.base_finds.all()[0]          self.assertEqual(base_find.x, None) -        operation = Operation.objects.get( -            pk=base_find.context_record.operation.pk -        ) +        operation = Operation.objects.get(pk=base_find.context_record.operation.pk)          operation.x, operation.y = 33, 42          operation.spatial_reference_system = wgs84          operation.save()          # an update is pending for the linked context record          q = ContextRecord.objects.filter( -            pk=base_find.context_record.pk, -            need_update=True) +            pk=base_find.context_record.pk, need_update=True +        )          self.assertEqual(q.count(), 1)          # process pending update @@ -2163,15 +2215,15 @@ class GeomaticTest(FindInit, TestCase):          base_find = find.base_finds.all()[0]          srs, __ = SpatialReferenceSystem.objects.get_or_create( -            txt_idx='wgs84', defaults={"srid": 4326, "label": 'WGS84', -                                       'auth_name': 'EPSG'} +            txt_idx="wgs84", +            defaults={"srid": 4326, "label": "WGS84", "auth_name": "EPSG"},          )          profile = get_current_profile()          profile.mapping = True          profile.save()          # db source -        geom = GEOSGeometry('POINT({} {} {})'.format(2, 43, 1), srid=4326) +        geom = GEOSGeometry("POINT({} {} {})".format(2, 43, 1), srid=4326)          base_find.point = geom          base_find.save()          base_find = models.BaseFind.objects.get(pk=base_find.pk) @@ -2180,9 +2232,10 @@ class GeomaticTest(FindInit, TestCase):          self.assertIsNotNone(base_find.x)          self.assertIsNotNone(base_find.y)          self.assertIsNotNone(base_find.z) -        self.assertEqual(base_find.point_source, 'P')  # precise -        self.assertEqual(base_find.point_source_item, -                         str(models.BaseFind._meta.verbose_name)) +        self.assertEqual(base_find.point_source, "P")  # precise +        self.assertEqual( +            base_find.point_source_item, str(models.BaseFind._meta.verbose_name) +        )          # re-save do not change sources          base_find.save() @@ -2192,9 +2245,10 @@ class GeomaticTest(FindInit, TestCase):          self.assertIsNotNone(base_find.x)          self.assertIsNotNone(base_find.y)          self.assertIsNotNone(base_find.z) -        self.assertEqual(base_find.point_source, 'P')  # precise -        self.assertEqual(base_find.point_source_item, -                         str(models.BaseFind._meta.verbose_name)) +        self.assertEqual(base_find.point_source, "P")  # precise +        self.assertEqual( +            base_find.point_source_item, str(models.BaseFind._meta.verbose_name) +        )          # form input          base_find.x = 2 @@ -2205,17 +2259,19 @@ class GeomaticTest(FindInit, TestCase):          base_find = models.BaseFind.objects.get(pk=base_find.pk)          self.assertIsNotNone(base_find.point_2d)          self.assertIsNotNone(base_find.point) -        self.assertEqual(base_find.point_source, 'P')  # precise -        self.assertEqual(base_find.point_source_item, -                         str(models.BaseFind._meta.verbose_name)) +        self.assertEqual(base_find.point_source, "P")  # precise +        self.assertEqual( +            base_find.point_source_item, str(models.BaseFind._meta.verbose_name) +        )          # re-save do not change sources          base_find.save()          base_find = models.BaseFind.objects.get(pk=base_find.pk)          self.assertIsNotNone(base_find.point_2d)          self.assertIsNotNone(base_find.point) -        self.assertEqual(base_find.point_source, 'P')  # precise -        self.assertEqual(base_find.point_source_item, -                         str(models.BaseFind._meta.verbose_name)) +        self.assertEqual(base_find.point_source, "P")  # precise +        self.assertEqual( +            base_find.point_source_item, str(models.BaseFind._meta.verbose_name) +        )          # reinit          base_find.x = None @@ -2229,18 +2285,21 @@ class GeomaticTest(FindInit, TestCase):          self.assertEqual(base_find.point_source_item, None)          profile, created = IshtarSiteProfile.objects.get_or_create( -            slug='default', active=True) +            slug="default", active=True +        )          profile.use_town_for_geo = True          profile.save()          # geom from context record town -        center = 'POINT(6 10)' -        limit = 'MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2)),'\ -                '((6 3,9 2,9 4,6 3)))' +        center = "POINT(6 10)" +        limit = ( +            "MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2))," +            "((6 3,9 2,9 4,6 3)))" +        )          cr = ContextRecord.objects.get(pk=base_find.context_record.pk)          t = cr.town -        t.center = 'SRID=4326;' + center -        t.limit = 'SRID=4326;' + limit +        t.center = "SRID=4326;" + center +        t.limit = "SRID=4326;" + limit          t.save()          cr = ContextRecord.objects.get(pk=base_find.context_record.pk)          base_find = models.BaseFind.objects.get(pk=base_find.pk) @@ -2252,9 +2311,10 @@ class GeomaticTest(FindInit, TestCase):          tp.transform(4326)          self.assertLess(bfp.distance(tp), 0.0001)          self.assertEqual(base_find.multi_polygon, cr.town.limit) -        self.assertEqual(base_find.point_source, 'T')  # town -        self.assertEqual(base_find.point_source_item, -                         str(ContextRecord._meta.verbose_name)) +        self.assertEqual(base_find.point_source, "T")  # town +        self.assertEqual( +            base_find.point_source_item, str(ContextRecord._meta.verbose_name) +        )          # re-save do not change sources          base_find.save()          base_find = models.BaseFind.objects.get(pk=base_find.pk) @@ -2264,15 +2324,16 @@ class GeomaticTest(FindInit, TestCase):          tp.transform(4326)          self.assertTrue(bfp.distance(tp) < 0.0001)          self.assertEqual(base_find.multi_polygon, cr.town.limit) -        self.assertEqual(base_find.point_source, 'T')  # town -        self.assertEqual(base_find.point_source_item, -                         str(ContextRecord._meta.verbose_name)) +        self.assertEqual(base_find.point_source, "T")  # town +        self.assertEqual( +            base_find.point_source_item, str(ContextRecord._meta.verbose_name) +        )          # geom from context record -        center = 'POINT(8 6)' +        center = "POINT(8 6)"          cr = ContextRecord.objects.get(pk=base_find.context_record.pk) -        cr.point_2d = 'SRID=4326;' + center -        cr.point_source = 'P' +        cr.point_2d = "SRID=4326;" + center +        cr.point_source = "P"          cr.point_source_item = str(ContextRecord._meta.verbose_name)          cr.save()          cr = ContextRecord.objects.get(pk=base_find.context_record.pk) @@ -2289,9 +2350,10 @@ class GeomaticTest(FindInit, TestCase):          tp.transform(4326)          self.assertTrue(bfp.distance(tp) < 0.0001)          self.assertEqual(base_find.multi_polygon, cr.multi_polygon) -        self.assertEqual(base_find.point_source, 'P')  # precise -        self.assertEqual(base_find.point_source_item, -                         str(ContextRecord._meta.verbose_name)) +        self.assertEqual(base_find.point_source, "P")  # precise +        self.assertEqual( +            base_find.point_source_item, str(ContextRecord._meta.verbose_name) +        )          # overload of coordinates by form          base_find = models.BaseFind.objects.get(pk=base_find.pk) @@ -2304,19 +2366,21 @@ class GeomaticTest(FindInit, TestCase):          base_find = models.BaseFind.objects.get(pk=base_find.pk)          self.assertIsNotNone(base_find.point_2d)          self.assertIsNotNone(base_find.point) -        self.assertEqual(base_find.point_2d.wkt, 'POINT (5 6)') -        self.assertEqual(base_find.point_source, 'P')  # precise -        self.assertEqual(base_find.point_source_item, -                         str(models.BaseFind._meta.verbose_name)) +        self.assertEqual(base_find.point_2d.wkt, "POINT (5 6)") +        self.assertEqual(base_find.point_source, "P")  # precise +        self.assertEqual( +            base_find.point_source_item, str(models.BaseFind._meta.verbose_name) +        )          # re-save do not change sources          base_find.save()          base_find = models.BaseFind.objects.get(pk=base_find.pk)          self.assertIsNotNone(base_find.point_2d)          self.assertIsNotNone(base_find.point) -        self.assertEqual(base_find.point_2d.wkt, 'POINT (5 6)') -        self.assertEqual(base_find.point_source, 'P')  # precise -        self.assertEqual(base_find.point_source_item, -                         str(models.BaseFind._meta.verbose_name)) +        self.assertEqual(base_find.point_2d.wkt, "POINT (5 6)") +        self.assertEqual(base_find.point_source, "P")  # precise +        self.assertEqual( +            base_find.point_source_item, str(models.BaseFind._meta.verbose_name) +        )      def test_post_save_polygon(self):          profile = get_current_profile() @@ -2326,16 +2390,18 @@ class GeomaticTest(FindInit, TestCase):          find = self.finds[0]          base_find = find.base_finds.all()[0]          srs, __ = SpatialReferenceSystem.objects.get_or_create( -            txt_idx='wgs84', defaults={"srid": 4326, "label": 'WGS84', -                                       'auth_name': 'EPSG'} +            txt_idx="wgs84", +            defaults={"srid": 4326, "label": "WGS84", "auth_name": "EPSG"},          )          base_find = models.BaseFind.objects.get(pk=base_find.pk)          # get centroid geom from poly -        limit = 'MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2)),' \ -                '((6 3,9 2,9 4,6 3)))' -        base_find.multi_polygon = 'SRID=4326;' + limit +        limit = ( +            "MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2))," +            "((6 3,9 2,9 4,6 3)))" +        ) +        base_find.multi_polygon = "SRID=4326;" + limit          base_find.point_source = None          base_find.point_2d = None          base_find.point = None @@ -2343,19 +2409,21 @@ class GeomaticTest(FindInit, TestCase):          base_find = models.BaseFind.objects.get(pk=base_find.pk)          self.assertIsNotNone(base_find.point_2d) -        self.assertEqual(base_find.point_source, 'M')  # from multi polygon +        self.assertEqual(base_find.point_source, "M")  # from multi polygon          # resaving do not change source          base_find.save()          base_find = models.BaseFind.objects.get(pk=base_find.pk)          self.assertIsNotNone(base_find.point_2d) -        self.assertEqual(base_find.point_source, 'M')  # from multi polygon +        self.assertEqual(base_find.point_source, "M")  # from multi polygon          # geom from context record -        limit = 'MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2)),' \ -                '((6 3,9 2,9 4,6 3)))' +        limit = ( +            "MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2))," +            "((6 3,9 2,9 4,6 3)))" +        )          cr = ContextRecord.objects.get(pk=base_find.context_record.pk) -        cr.multi_polygon = 'SRID=4326;' + limit -        cr.multi_polygon_source = 'P' +        cr.multi_polygon = "SRID=4326;" + limit +        cr.multi_polygon_source = "P"          cr.multi_polygon_source_item = str(ContextRecord._meta.verbose_name)          cr.save()          cr = ContextRecord.objects.get(pk=base_find.context_record.pk) @@ -2364,9 +2432,10 @@ class GeomaticTest(FindInit, TestCase):          base_find.save()          base_find = models.BaseFind.objects.get(pk=base_find.pk)          self.assertEqual(base_find.multi_polygon, cr.multi_polygon) -        self.assertEqual(base_find.multi_polygon_source, 'P')  # precise -        self.assertEqual(base_find.multi_polygon_source_item, -                         str(ContextRecord._meta.verbose_name)) +        self.assertEqual(base_find.multi_polygon_source, "P")  # precise +        self.assertEqual( +            base_find.multi_polygon_source_item, str(ContextRecord._meta.verbose_name) +        )          base_find = models.BaseFind.objects.get(pk=base_find.pk)          base_find.point_source = None @@ -2376,42 +2445,50 @@ class GeomaticTest(FindInit, TestCase):          base_find.save()          base_find = models.BaseFind.objects.get(pk=base_find.pk)          self.assertEqual(base_find.point_2d.ewkt, "SRID=4326;POINT (42 3)") -        self.assertEqual(base_find.point_source, 'P') +        self.assertEqual(base_find.point_source, "P")          # resaving do not change source          base_find.save()          base_find = models.BaseFind.objects.get(pk=base_find.pk)          self.assertEqual(base_find.point_2d.ewkt, "SRID=4326;POINT (42 3)") -        self.assertEqual(base_find.point_source, 'P') +        self.assertEqual(base_find.point_source, "P")  class AutocompleteTest(AutocompleteTestBase, TestCase):      fixtures = FIND_FIXTURES      models = [ -        AcItem(models.ObjectType, 'autocomplete-objecttype'), -        AcItem(models.MaterialType, 'autocomplete-materialtype'), -        AcItem(models.TreatmentType, 'autocomplete-treatmenttype', -               default_values={"virtual": False}), -        AcItem(models.IntegrityType, 'autocomplete-integritytype'), -        AcItem(models.TreatmentFile, 'autocomplete-treatmentfile', -               prepare_func="create_treatmentfile"), -        AcItem(models.FindBasket, 'autocomplete-findbasket', -               prepare_func="create_findbasket"), -        AcItem(models.Find, 'autocomplete-find', prepare_func="create_find"), -        AcItem(models.Treatment, 'autocomplete-treatment', -               prepare_func='create_treatment'), +        AcItem(models.ObjectType, "autocomplete-objecttype"), +        AcItem(models.MaterialType, "autocomplete-materialtype"), +        AcItem( +            models.TreatmentType, +            "autocomplete-treatmenttype", +            default_values={"virtual": False}, +        ), +        AcItem(models.IntegrityType, "autocomplete-integritytype"), +        AcItem( +            models.TreatmentFile, +            "autocomplete-treatmentfile", +            prepare_func="create_treatmentfile", +        ), +        AcItem( +            models.FindBasket, +            "autocomplete-findbasket", +            prepare_func="create_findbasket", +        ), +        AcItem(models.Find, "autocomplete-find", prepare_func="create_find"), +        AcItem( +            models.Treatment, "autocomplete-treatment", prepare_func="create_treatment" +        ),      ]      def create_treatmentfile(self, base_name):          item, __ = models.TreatmentFile.objects.get_or_create( -            name=base_name, -            type=models.TreatmentFileType.objects.all()[0] +            name=base_name, type=models.TreatmentFileType.objects.all()[0]          )          return item, None      def create_treatment(self, base_name):          item, __ = models.Treatment.objects.get_or_create( -            label=base_name, -            treatment_state=models.TreatmentState.objects.all()[0] +            label=base_name, treatment_state=models.TreatmentState.objects.all()[0]          )          return item, None @@ -2425,13 +2502,9 @@ class AutocompleteTest(AutocompleteTestBase, TestCase):      def create_find(self, base_name):          ope, __ = Operation.objects.get_or_create( -            common_name="Test", -            operation_type=OperationType.objects.all()[0] -        ) -        cr, __ = ContextRecord.objects.get_or_create( -            operation=ope, -            label=base_name +            common_name="Test", operation_type=OperationType.objects.all()[0]          ) +        cr, __ = ContextRecord.objects.get_or_create(operation=ope, label=base_name)          base_find = models.BaseFind.objects.create(context_record=cr)          find = models.Find.objects.create(              label=base_name, @@ -2447,38 +2520,44 @@ class PublicAPITest(FindInit, APITestCase):      def setUp(self):          self.create_finds(data_base={"label": "Find 1"}, force=True)          self.basket = models.FindBasket.objects.create( -            slug="my-basket", label="My basket", -            user=IshtarUser.objects.get(pk=self.get_default_user().pk)) +            slug="my-basket", +            label="My basket", +            user=IshtarUser.objects.get(pk=self.get_default_user().pk), +        )          for find in self.finds:              self.basket.items.add(find) -        self.username = 'myuser' -        self.password = 'mypassword' -        user = User.objects.create_user(self.username, 'myemail@test.com', -                                        self.password) -        self.auth_token = 'Token '+ Token.objects.create(user=user).key +        self.username = "myuser" +        self.password = "mypassword" +        user = User.objects.create_user( +            self.username, "myemail@test.com", self.password +        ) +        self.auth_token = "Token " + Token.objects.create(user=user).key      def test_authentication(self): -        url = reverse('api-public-find') + "?basket=my-basket" -        response = self.client.get(url, format='json') +        url = reverse("api-public-find") + "?basket=my-basket" +        response = self.client.get(url, format="json")          self.assertEqual(response.status_code, 401) -        response = self.client.get(url, format='json', -                                   HTTP_AUTHORIZATION=self.auth_token) +        response = self.client.get( +            url, format="json", HTTP_AUTHORIZATION=self.auth_token +        )          self.assertEqual(response.status_code, 200)      def test_basket(self):          # unknown basket -        url = reverse('api-public-find') + "?basket=non-exist-basket" -        response = self.client.get(url, format='json', -                                   HTTP_AUTHORIZATION=self.auth_token) +        url = reverse("api-public-find") + "?basket=non-exist-basket" +        response = self.client.get( +            url, format="json", HTTP_AUTHORIZATION=self.auth_token +        )          self.assertEqual(response.status_code, 200)          content = response.content.decode()          res = json.loads(content)          self.assertEqual(res, [])          # basket is not public -        url = reverse('api-public-find') + "?basket=my-basket" -        response = self.client.get(url, format='json', -                                   HTTP_AUTHORIZATION=self.auth_token) +        url = reverse("api-public-find") + "?basket=my-basket" +        response = self.client.get( +            url, format="json", HTTP_AUTHORIZATION=self.auth_token +        )          self.assertEqual(response.status_code, 200)          content = response.content.decode()          res = json.loads(content) @@ -2487,8 +2566,9 @@ class PublicAPITest(FindInit, APITestCase):          # ok          self.basket.public = True          self.basket.save() -        response = self.client.get(url, format='json', -                                   HTTP_AUTHORIZATION=self.auth_token) +        response = self.client.get( +            url, format="json", HTTP_AUTHORIZATION=self.auth_token +        )          self.assertEqual(response.status_code, 200)          content = response.content.decode()          res = json.loads(content) @@ -2497,26 +2577,31 @@ class PublicAPITest(FindInit, APITestCase):      def test_basket_content(self):          find = self.finds[0]          find.denomination = "denomination" -        ceram = models.MaterialType.objects.get(txt_idx='ceramic') +        ceram = models.MaterialType.objects.get(txt_idx="ceramic")          find.material_types.add(ceram)          find.save() -        url = reverse('api-public-find') + "?basket=my-basket" +        url = reverse("api-public-find") + "?basket=my-basket"          self.basket.public = True          self.basket.save() -        response = self.client.get(url, format='json', -                                   HTTP_AUTHORIZATION=self.auth_token) +        response = self.client.get( +            url, format="json", HTTP_AUTHORIZATION=self.auth_token +        )          self.assertEqual(response.status_code, 200)          content = response.content.decode()          res = json.loads(content)          expected_results = [ -            ((0, 'denomination',), 'denomination'), -            ((0, 'materials', 0), 'Céramique'), -            ((0, 'base-finds', 0, 'context-record', 'label'), -             'Context record'), -            ((0, 'base-finds', 0, 'context-record', 'town'), -             'default_town (12345)'), -            ((0, 'base-finds', 0, 'context-record', 'operation', 'year'), 2010), +            ( +                ( +                    0, +                    "denomination", +                ), +                "denomination", +            ), +            ((0, "materials", 0), "Céramique"), +            ((0, "base-finds", 0, "context-record", "label"), "Context record"), +            ((0, "base-finds", 0, "context-record", "town"), "default_town (12345)"), +            ((0, "base-finds", 0, "context-record", "operation", "year"), 2010),          ]          for path, result in expected_results:              path = list(reversed(path)) @@ -2537,19 +2622,24 @@ class LabelTest(FindInit, TestCase):      def setUp(self):          templates = [ -            settings.ROOT_PATH + '../archaeological_finds/tests/' + t -            for t in ("etiquettes-mobilier.odt", "etiquettes-mobilier", -                      "etiquettes-mobilier.txt", "bad_lo.zip", -                      "truncated_xml.zip") +            settings.ROOT_PATH + "../archaeological_finds/tests/" + t +            for t in ( +                "etiquettes-mobilier.odt", +                "etiquettes-mobilier", +                "etiquettes-mobilier.txt", +                "bad_lo.zip", +                "truncated_xml.zip", +            )          ]          self.templates = []          for template in templates:              filename = template.split("/")[-1] -            shutil.copy(template, -                        os.path.join(settings.MEDIA_ROOT, filename), -                        follow_symlinks=True) -            self.templates.append( -                os.path.join(settings.MEDIA_ROOT, filename)) +            shutil.copy( +                template, +                os.path.join(settings.MEDIA_ROOT, filename), +                follow_symlinks=True, +            ) +            self.templates.append(os.path.join(settings.MEDIA_ROOT, filename))      def tearDown(self):          for tpl in self.templates: @@ -2563,19 +2653,22 @@ class LabelTest(FindInit, TestCase):              (base_tpl, base_targets, True, "OK"),              (base_tpl, "", False, "no target"),              (base_tpl, "-;Cadre2;Cadre3", False, "bad first target"), -            (base_tpl, "Cadre1;Frame2;Frame3", True, -             "first target OK, silently failed other targets"), +            ( +                base_tpl, +                "Cadre1;Frame2;Frame3", +                True, +                "first target OK, silently failed other targets", +            ),              (missing_ext, base_targets, True, "missing extension"),              (text_file, base_targets, False, "text file"),              (bad_lo, base_targets, False, "missing content.xml"),              (trunc_xml, base_targets, False, "truncated content.xml"),          )          for tpl_file, targets, is_ok, msg in dataset: -            with open(tpl_file, 'rb') as tpl: -                template = SimpleUploadedFile("etiquettes-mobilier.odt", -                                              tpl.read()) +            with open(tpl_file, "rb") as tpl: +                template = SimpleUploadedFile("etiquettes-mobilier.odt", tpl.read())                  model, __ = ImporterModel.objects.get_or_create( -                    klass='archaeological_finds.models.Find' +                    klass="archaeological_finds.models.Find"                  )                  q = DocumentTemplate.objects.filter(slug="test")                  if q.count(): @@ -2586,7 +2679,8 @@ class LabelTest(FindInit, TestCase):                      associated_model=model,                      available=True,                      label_targets=targets, -                    label_template=template) +                    label_template=template, +                )              self.templates.append(doc.label_template.path)              doc = DocumentTemplate.objects.get(pk=doc.pk)              msg = "Fail on dataset: " + msg @@ -2602,22 +2696,19 @@ class TemplateTest(FindInit, TestCase):      model = models.Find      def setUp(self): -        template = settings.ROOT_PATH + \ -                   '../archaeological_finds/tests/notices-panier.odt' +        template = ( +            settings.ROOT_PATH + "../archaeological_finds/tests/notices-panier.odt" +        )          filename = template.split("/")[-1] -        shutil.copy(template, -                    os.path.join(settings.MEDIA_ROOT, filename), -                    follow_symlinks=True) +        shutil.copy( +            template, os.path.join(settings.MEDIA_ROOT, filename), follow_symlinks=True +        )          self.template = os.path.join(settings.MEDIA_ROOT, filename)          self.templates = [self.template]          ope1 = self.create_operation()[0]          ope2 = self.create_operation()[1] -        cr = self.create_context_record( -            data={"label": "CR 1", "operation": ope1} -        )[0] -        cr2 = self.create_context_record( -            data={"label": "CR 2", "operation": ope2} -        )[1] +        cr = self.create_context_record(data={"label": "CR 1", "operation": ope1})[0] +        cr2 = self.create_context_record(data={"label": "CR 2", "operation": ope2})[1]          self.create_finds(data_base={"context_record": cr})[0]          self.create_finds(data_base={"context_record": cr2})[1]          self.basket = models.FindBasket.objects.create(label="Hophop") @@ -2627,17 +2718,14 @@ class TemplateTest(FindInit, TestCase):          location = Warehouse.objects.create(name="Warehouse", warehouse_type=wt)          ct, __ = ContainerType.objects.get_or_create(label="CT", txt_idx="CT")          self.container = Container.objects.create( -            location=location, -            reference="Reférence", -            container_type=ct +            location=location, reference="Reférence", container_type=ct          )      def test_label(self): -        with open(self.template, 'rb') as tpl: -            template = SimpleUploadedFile("template.odt", -                                          tpl.read()) +        with open(self.template, "rb") as tpl: +            template = SimpleUploadedFile("template.odt", tpl.read())              model, __ = ImporterModel.objects.get_or_create( -                klass='archaeological_finds.models.Find' +                klass="archaeological_finds.models.Find"              )              q = DocumentTemplate.objects.filter(slug="test")              if q.count(): @@ -2647,7 +2735,8 @@ class TemplateTest(FindInit, TestCase):                  slug="test",                  associated_model=model,                  available=True, -                template=template) +                template=template, +            )          self.templates.append(doc.template.path)          doc = DocumentTemplate.objects.get(pk=doc.pk) | 
