diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-03-19 11:09:10 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-03-19 11:09:10 +0100 | 
| commit | 29e86ff4778cb80f62091d185eefc82d32285ffc (patch) | |
| tree | bfa6fbf20d7c7b7b3eedebb79bae8ecd4e0759f1 /archaeological_context_records/forms.py | |
| parent | 3039fae5124c00a67283c9b707e4a411149d93b1 (diff) | |
| download | Ishtar-29e86ff4778cb80f62091d185eefc82d32285ffc.tar.bz2 Ishtar-29e86ff4778cb80f62091d185eefc82d32285ffc.zip  | |
Format - black: context_records
Diffstat (limited to 'archaeological_context_records/forms.py')
| -rw-r--r-- | archaeological_context_records/forms.py | 634 | 
1 files changed, 359 insertions, 275 deletions
diff --git a/archaeological_context_records/forms.py b/archaeological_context_records/forms.py index c4fa6f8fe..d727dae27 100644 --- a/archaeological_context_records/forms.py +++ b/archaeological_context_records/forms.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3  # -*- coding: utf-8 -*-  # Copyright (C) 2010-2016  Étienne Loks  <etienne.loks_AT_peacefrogsDOTnet> @@ -29,19 +29,45 @@ from django.core import validators  from django.forms.formsets import formset_factory  from ishtar_common.utils import ugettext_lazy as _ -from ishtar_common.models import valid_id, IshtarSiteProfile, Town, \ -    SpatialReferenceSystem, valid_ids +from ishtar_common.models import ( +    valid_id, +    IshtarSiteProfile, +    Town, +    SpatialReferenceSystem, +    valid_ids, +)  from archaeological_context_records import models -from ishtar_common.forms import FinalForm, FormSet, \ -    reverse_lazy, get_form_selection, ManageOldType, CustomForm, \ -    FieldType, CustomFormSearch, IshtarForm, FormHeader, HistorySelect, \ -    MultiSearchForm, LockForm, DocumentItemSelect +from ishtar_common.forms import ( +    FinalForm, +    FormSet, +    reverse_lazy, +    get_form_selection, +    ManageOldType, +    CustomForm, +    FieldType, +    CustomFormSearch, +    IshtarForm, +    FormHeader, +    HistorySelect, +    MultiSearchForm, +    LockForm, +    DocumentItemSelect, +)  from ishtar_common.forms_common import get_town_field -from archaeological_operations.forms import OperationSelect, ParcelField, \ -    RecordRelationsForm as OpeRecordRelationsForm, RecordRelationsFormSetBase -from archaeological_operations.models import Period, Parcel, Operation, \ -    ArchaeologicalSite, RelationType as OpeRelationType +from archaeological_operations.forms import ( +    OperationSelect, +    ParcelField, +    RecordRelationsForm as OpeRecordRelationsForm, +    RecordRelationsFormSetBase, +) +from archaeological_operations.models import ( +    Period, +    Parcel, +    Operation, +    ArchaeologicalSite, +    RelationType as OpeRelationType, +)  from archaeological_operations.widgets import OAWidget  from bootstrap_datepicker.widgets import DatePicker  from ishtar_common import widgets @@ -51,46 +77,48 @@ class OperationFormSelection(CustomForm, forms.Form):      form_label = _("Operation")      form_admin_name = _("Context record - 010 - Operation choice")      form_slug = "contextrecord-010-operationchoice" -    associated_models = {'operation': Operation} -    currents = {'operation': Operation} +    associated_models = {"operation": Operation} +    currents = {"operation": Operation}      operation = forms.IntegerField( -        label=_("Operation"), required=False, +        label=_("Operation"), +        required=False,          widget=widgets.JQueryAutoComplete( -            reverse_lazy('autocomplete-operation'), -            associated_model=Operation), -        validators=[valid_id(Operation)]) +            reverse_lazy("autocomplete-operation"), associated_model=Operation +        ), +        validators=[valid_id(Operation)], +    )  class PeriodSelect(forms.Form): -    datings__period = forms.ChoiceField(label=_("Dating - period"), -                                        choices=[]) -    datings__precise_dating = forms.CharField( -        label=_("Dating - precise")) +    datings__period = forms.ChoiceField(label=_("Dating - period"), choices=[]) +    datings__precise_dating = forms.CharField(label=_("Dating - precise"))      datings__start_date__before = forms.IntegerField( -        label=_("Dating - start date before")) +        label=_("Dating - start date before") +    )      datings__start_date__after = forms.IntegerField( -        label=_("Dating - start date after")) -    datings__end_date__before = forms.IntegerField( -        label=_("Dating - end date before")) -    datings__end_date__after = forms.IntegerField( -        label=_("Dating - end date after")) -    datings__dating_type = forms.ChoiceField(label=_("Dating - dating type"), -                                             choices=[]) -    datings__quality = forms.ChoiceField(label=_("Dating - dating quality"), -                                         choices=[]) +        label=_("Dating - start date after") +    ) +    datings__end_date__before = forms.IntegerField(label=_("Dating - end date before")) +    datings__end_date__after = forms.IntegerField(label=_("Dating - end date after")) +    datings__dating_type = forms.ChoiceField( +        label=_("Dating - dating type"), choices=[] +    ) +    datings__quality = forms.ChoiceField(label=_("Dating - dating quality"), choices=[])      TYPES = [ -        FieldType('datings__period', Period), -        FieldType('datings__dating_type', models.DatingType), -        FieldType('datings__quality', models.DatingQuality), +        FieldType("datings__period", Period), +        FieldType("datings__dating_type", models.DatingType), +        FieldType("datings__quality", models.DatingQuality), +    ] +    PERIOD_FIELDS = [ +        "datings__period", +        "datings__precise_dating", +        "datings__start_date__before", +        "datings__start_date__after", +        "datings__end_date__before", +        "datings__end_date__after", +        "datings__dating_type", +        "datings__quality",      ] -    PERIOD_FIELDS = ["datings__period", -                     "datings__precise_dating", -                     "datings__start_date__before", -                     "datings__start_date__after", -                     "datings__end_date__before", -                     "datings__end_date__after", -                     "datings__dating_type", -                     "datings__quality"]      def _reorder_period_fields(self, insert_period_after):          fields = OrderedDict() @@ -110,37 +138,41 @@ class RecordSelect(DocumentItemSelect, PeriodSelect):      form_slug = "contextrecord-001-search"      search_vector = forms.CharField( -        label=_("Full text search"), widget=widgets.SearchWidget( -            'archaeological-context-records', 'contextrecord' -        )) +        label=_("Full text search"), +        widget=widgets.SearchWidget("archaeological-context-records", "contextrecord"), +    )      label = forms.CharField(label=_("ID"), max_length=100)      town = get_town_field() -    if settings.COUNTRY == 'fr': +    if settings.COUNTRY == "fr":          operation__code_patriarche = forms.CharField( -            max_length=500, -            widget=OAWidget, -            label=_("Code PATRIARCHE")) +            max_length=500, widget=OAWidget, label=_("Code PATRIARCHE") +        )      operation__year = forms.IntegerField(label=_("Operation's year"))      operation__operation_code = forms.IntegerField( -        label=_("Operation's number (index by year)")) +        label=_("Operation's number (index by year)") +    )      archaeological_site = forms.IntegerField(          label=_("Archaeological site"),          widget=widgets.JQueryAutoComplete( -            reverse_lazy('autocomplete-archaeologicalsite'), -            associated_model=ArchaeologicalSite), -        validators=[valid_id(ArchaeologicalSite)]) +            reverse_lazy("autocomplete-archaeologicalsite"), +            associated_model=ArchaeologicalSite, +        ), +        validators=[valid_id(ArchaeologicalSite)], +    )      ope_relation_types = forms.ChoiceField( -        label=_("Search within related operations"), choices=[]) +        label=_("Search within related operations"), choices=[] +    )      unit = forms.ChoiceField(label=_("Unit type"), choices=[])      parcel = forms.CharField(label=_("Parcel"))      has_finds = forms.NullBooleanField(label=_("Has finds"))      cr_relation_types = forms.ChoiceField( -        label=_("Search within relations"), choices=[]) +        label=_("Search within relations"), choices=[] +    )      TYPES = PeriodSelect.TYPES + [ -        FieldType('unit', models.Unit), -        FieldType('cr_relation_types', models.RelationType), -        FieldType('ope_relation_types', OpeRelationType), +        FieldType("unit", models.Unit), +        FieldType("cr_relation_types", models.RelationType), +        FieldType("ope_relation_types", OpeRelationType),      ]      SITE_KEYS = {"archaeological_site": None} @@ -150,48 +182,58 @@ class RecordSelect(DocumentItemSelect, PeriodSelect):      def get_input_ids(self):          ids = super(RecordSelect, self).get_input_ids() -        if 'cr_relation_types' in ids: -            ids.pop(ids.index('cr_relation_types')) -            for idx, c in enumerate(self.fields['cr_relation_types'].choices): -                ids.append('cr_relation_types_{}'.format(idx)) -        if 'ope_relation_types' in ids: -            ids.pop(ids.index('ope_relation_types')) -            for idx, c in enumerate(self.fields['ope_relation_types'].choices): -                ids.append('ope_relation_types_{}'.format(idx)) +        if "cr_relation_types" in ids: +            ids.pop(ids.index("cr_relation_types")) +            for idx, c in enumerate(self.fields["cr_relation_types"].choices): +                ids.append("cr_relation_types_{}".format(idx)) +        if "ope_relation_types" in ids: +            ids.pop(ids.index("ope_relation_types")) +            for idx, c in enumerate(self.fields["ope_relation_types"].choices): +                ids.append("ope_relation_types_{}".format(idx))          return ids  class RecordFormSelection(LockForm, CustomFormSearch):      SEARCH_AND_SELECT = True      form_label = _("Context record search") -    pk_key = 'pk' -    associated_models = {'pk': models.ContextRecord} -    currents = {'pk': models.ContextRecord} +    pk_key = "pk" +    associated_models = {"pk": models.ContextRecord} +    currents = {"pk": models.ContextRecord}      pk = forms.IntegerField( -        label="", required=False, +        label="", +        required=False,          widget=widgets.DataTable( -            reverse_lazy('get-contextrecord'), -            RecordSelect, models.ContextRecord, -            gallery=True, map=True, -            source_full=reverse_lazy('get-contextrecord-full')), -        validators=[valid_id(models.ContextRecord)]) +            reverse_lazy("get-contextrecord"), +            RecordSelect, +            models.ContextRecord, +            gallery=True, +            map=True, +            source_full=reverse_lazy("get-contextrecord-full"), +        ), +        validators=[valid_id(models.ContextRecord)], +    )  class RecordFormMultiSelection(LockForm, MultiSearchForm):      form_label = _("Context record search") -    associated_models = {'pks': models.ContextRecord} -    pk_key = 'pks' +    associated_models = {"pks": models.ContextRecord} +    pk_key = "pks"      pk = forms.CharField( -        label="", required=False, +        label="", +        required=False,          widget=widgets.DataTable( -            reverse_lazy('get-contextrecord'), -            RecordSelect, models.ContextRecord, +            reverse_lazy("get-contextrecord"), +            RecordSelect, +            models.ContextRecord,              multiple_select=True, -            gallery=True, map=True, -            source_full=reverse_lazy('get-contextrecord-full')), -        validators=[valid_ids(models.ContextRecord)]) +            gallery=True, +            map=True, +            source_full=reverse_lazy("get-contextrecord-full"), +        ), +        validators=[valid_ids(models.ContextRecord)], +    )  def get_init_parcel(form, operation, prefix=""): @@ -199,23 +241,26 @@ def get_init_parcel(form, operation, prefix=""):      sort = lambda x: (x.town.name, x.section)      parcels = sorted(parcels, key=sort)      for key, gparcels in groupby(parcels, sort): -        form.fields[prefix + 'parcel'].choices.append( +        form.fields[prefix + "parcel"].choices.append(              (                  " - ".join(k for k in key if k),                  [(parcel.pk, parcel.short_label) for parcel in gparcels],              )          ) -    if len(form.fields[prefix + 'parcel'].choices) == 1 and \ -            (prefix + 'town') in form.fields: +    if ( +        len(form.fields[prefix + "parcel"].choices) == 1 +        and (prefix + "town") in form.fields +    ):          # only the empty choice is available -        form.fields.pop(prefix + 'parcel') -        form.fields[prefix + 'town'].required = True -    if (prefix + 'town') in form.fields: -        if form.fields[prefix + 'town'].required: -            form.fields[prefix + 'town'].choices = []  # remove the empty choice -        form.fields[prefix + 'town'].choices += [ -            (t.pk, str(t)) for t in operation.towns.all()] +        form.fields.pop(prefix + "parcel") +        form.fields[prefix + "town"].required = True +    if (prefix + "town") in form.fields: +        if form.fields[prefix + "town"].required: +            form.fields[prefix + "town"].choices = []  # remove the empty choice +        form.fields[prefix + "town"].choices += [ +            (t.pk, str(t)) for t in operation.towns.all() +        ]  class RecordFormGeneral(CustomForm, ManageOldType): @@ -226,96 +271,122 @@ class RecordFormGeneral(CustomForm, ManageOldType):      file_upload = True      base_models = ["documentation"]      associated_models = { -        'archaeological_site': ArchaeologicalSite, -        'parcel': Parcel, 'unit': models.Unit, 'town': Town, -        'documentation': models.DocumentationType, -        'spatial_reference_system': SpatialReferenceSystem, -        'excavation_technic': models.ExcavationTechnicType} +        "archaeological_site": ArchaeologicalSite, +        "parcel": Parcel, +        "unit": models.Unit, +        "town": Town, +        "documentation": models.DocumentationType, +        "spatial_reference_system": SpatialReferenceSystem, +        "excavation_technic": models.ExcavationTechnicType, +    }      pk = forms.IntegerField(required=False, widget=forms.HiddenInput)      operation_id = forms.IntegerField(widget=forms.HiddenInput)      parcel = forms.ChoiceField(label=_("Parcel"), choices=[])      town = forms.ChoiceField(label=_("Town"), choices=[], required=False)      archaeological_site = forms.ChoiceField( -        label=" ", choices=[], required=False, -        help_text=_("Only the items associated to the operation can be " -                    "selected.") -    ) -    label = forms.CharField(label=_("ID"), -                            validators=[validators.MaxLengthValidator(200)]) -    unit = forms.ChoiceField(label=_("Context record type"), required=False, -                             choices=[]) -    description = forms.CharField(label=_("Description"), -                                  widget=forms.Textarea, required=False) -    comment = forms.CharField(label=_("General comment"), -                              widget=forms.Textarea, required=False) +        label=" ", +        choices=[], +        required=False, +        help_text=_("Only the items associated to the operation can be " "selected."), +    ) +    label = forms.CharField( +        label=_("ID"), validators=[validators.MaxLengthValidator(200)] +    ) +    unit = forms.ChoiceField(label=_("Context record type"), required=False, choices=[]) +    description = forms.CharField( +        label=_("Description"), widget=forms.Textarea, required=False +    ) +    comment = forms.CharField( +        label=_("General comment"), widget=forms.Textarea, required=False +    )      excavation_technic = forms.ChoiceField( -        label=_("Excavation technique"), choices=[], required=False) +        label=_("Excavation technique"), choices=[], required=False +    )      surface = forms.IntegerField( -        required=False, widget=widgets.AreaWidget, +        required=False, +        widget=widgets.AreaWidget,          label=_("Total surface (m2)"), -        validators=[validators.MinValueValidator(0), -                    validators.MaxValueValidator(999999999)]) +        validators=[ +            validators.MinValueValidator(0), +            validators.MaxValueValidator(999999999), +        ], +    )      length = forms.FloatField(label=_("Length (m)"), required=False)      width = forms.FloatField(label=_("Width (m)"), required=False)      thickness = forms.FloatField(label=_("Thickness (m)"), required=False)      diameter = forms.FloatField(label=_("Diameter (m)"), required=False)      depth = forms.FloatField(label=_("Depth (m)"), required=False)      depth_of_appearance = forms.FloatField( -        label=_("Depth of appearance (m)"), required=False) -    opening_date = forms.DateField(label=_("Opening date"), -                                   widget=DatePicker, required=False) -    closing_date = forms.DateField(label=_("Closing date"), -                                   widget=DatePicker, required=False) +        label=_("Depth of appearance (m)"), required=False +    ) +    opening_date = forms.DateField( +        label=_("Opening date"), widget=DatePicker, required=False +    ) +    closing_date = forms.DateField( +        label=_("Closing date"), widget=DatePicker, required=False +    )      documentation = forms.MultipleChoiceField( -        label=_("Documentation"), choices=[], required=False, -        widget=widgets.Select2Multiple) +        label=_("Documentation"), +        choices=[], +        required=False, +        widget=widgets.Select2Multiple, +    )      location = forms.CharField( -        label=_("Location"), widget=forms.Textarea, -        required=False, validators=[validators.MaxLengthValidator(200)]) +        label=_("Location"), +        widget=forms.Textarea, +        required=False, +        validators=[validators.MaxLengthValidator(200)], +    ) -    HEADERS['x'] = FormHeader(_("Coordinates")) +    HEADERS["x"] = FormHeader(_("Coordinates"))      x = forms.FloatField(label=_("X"), required=False) -    estimated_error_x = forms.FloatField(label=_("Estimated error for X"), -                                         required=False) +    estimated_error_x = forms.FloatField( +        label=_("Estimated error for X"), required=False +    )      y = forms.FloatField(label=_("Y"), required=False) -    estimated_error_y = forms.FloatField(label=_("Estimated error for Y"), -                                         required=False) +    estimated_error_y = forms.FloatField( +        label=_("Estimated error for Y"), required=False +    )      z = forms.FloatField(label=_("Z"), required=False) -    estimated_error_z = forms.FloatField(label=_("Estimated error for Z"), -                                         required=False) +    estimated_error_z = forms.FloatField( +        label=_("Estimated error for Z"), required=False +    )      spatial_reference_system = forms.ChoiceField( -        label=_("Spatial Reference System"), required=False, choices=[]) +        label=_("Spatial Reference System"), required=False, choices=[] +    )      TYPES = [ -        FieldType('unit', models.Unit), -        FieldType('excavation_technic', models.ExcavationTechnicType), -        FieldType('documentation', models.DocumentationType, is_multiple=True), -        FieldType('spatial_reference_system', SpatialReferenceSystem), +        FieldType("unit", models.Unit), +        FieldType("excavation_technic", models.ExcavationTechnicType), +        FieldType("documentation", models.DocumentationType, is_multiple=True), +        FieldType("spatial_reference_system", SpatialReferenceSystem),      ]      PROFILE_FILTER = { -        'mapping': [ -            'x', -            'y', -            'z', -            'estimated_error_x', -            'estimated_error_y', -            'estimated_error_z', -            'spatial_reference_system' +        "mapping": [ +            "x", +            "y", +            "z", +            "estimated_error_x", +            "estimated_error_y", +            "estimated_error_z", +            "spatial_reference_system",          ],      }      def __init__(self, *args, **kwargs):          # TODO: simplify          operation = None -        if 'data' in kwargs and kwargs['data'] and \ -                ('operation' in kwargs['data'] or -                 'context_record' in kwargs['data']): -            if 'operation' in kwargs['data']: -                operation = kwargs['data'].pop('operation') +        if ( +            "data" in kwargs +            and kwargs["data"] +            and ("operation" in kwargs["data"] or "context_record" in kwargs["data"]) +        ): +            if "operation" in kwargs["data"]: +                operation = kwargs["data"].pop("operation")                  if type(operation) in (list, tuple):                      operation = operation[0] -                if not hasattr(operation, 'id'): +                if not hasattr(operation, "id"):                      operation_id = operation                      try:                          operation = Operation.objects.get(pk=operation_id) @@ -323,42 +394,43 @@ class RecordFormGeneral(CustomForm, ManageOldType):                          operation = None                  # force operation modification                  # if posted -                if operation and kwargs['data']: -                    if hasattr(operation, 'id'): -                        kwargs['data'][kwargs['prefix'] + '-operation_id'] = \ -                            operation.id +                if operation and kwargs["data"]: +                    if hasattr(operation, "id"): +                        kwargs["data"][ +                            kwargs["prefix"] + "-operation_id" +                        ] = operation.id                      else: -                        kwargs['data'][kwargs['prefix'] + '-operation_id'] = \ -                            operation -            if 'context_record' in kwargs['data'] and \ -               kwargs['data']['context_record']: -                operation = kwargs['data']['context_record'].operation +                        kwargs["data"][kwargs["prefix"] + "-operation_id"] = operation +            if "context_record" in kwargs["data"] and kwargs["data"]["context_record"]: +                operation = kwargs["data"]["context_record"].operation              # clean data if not "real" data              # prefix_value = kwargs['prefix'] -            if not [k for k in kwargs['data'].keys() -                    if k.startswith(kwargs['prefix']) and kwargs['data'][k]]: -                kwargs['data'] = None -                if 'files' in kwargs: -                    kwargs.pop('files') +            if not [ +                k +                for k in kwargs["data"].keys() +                if k.startswith(kwargs["prefix"]) and kwargs["data"][k] +            ]: +                kwargs["data"] = None +                if "files" in kwargs: +                    kwargs.pop("files")          super(RecordFormGeneral, self).__init__(*args, **kwargs)          profile = IshtarSiteProfile.get_current_profile() -        self.fields['parcel'].choices = [('', '--')] +        self.fields["parcel"].choices = [("", "--")]          if not profile.parcel_mandatory: -            self.fields['parcel'].required = False -            self.fields['town'].choices = [('', '--')] +            self.fields["parcel"].required = False +            self.fields["town"].choices = [("", "--")]          else: -            self.fields.pop('town') +            self.fields.pop("town")          site_label = IshtarSiteProfile.get_default_site_label() -        self.fields['archaeological_site'].label = site_label -        self.fields['archaeological_site'].choices = [('', '--')] +        self.fields["archaeological_site"].label = site_label +        self.fields["archaeological_site"].choices = [("", "--")]          if operation: -            self.fields['operation_id'].initial = operation.pk +            self.fields["operation_id"].initial = operation.pk              get_init_parcel(self, operation) -            self.fields['archaeological_site'].choices += [ -                (site.pk, str(site)) -                for site in operation.archaeological_sites.all() +            self.fields["archaeological_site"].choices += [ +                (site.pk, str(site)) for site in operation.archaeological_sites.all()              ]      def clean(self): @@ -367,43 +439,44 @@ class RecordFormGeneral(CustomForm, ManageOldType):          operation_id = cleaned_data.get("operation_id")          label = cleaned_data.get("label")          cr = models.ContextRecord.objects.filter( -            label=label, parcel__operation__pk=operation_id) -        if 'pk' in cleaned_data and cleaned_data['pk']: -            cr = cr.exclude(pk=int(cleaned_data['pk'])) +            label=label, parcel__operation__pk=operation_id +        ) +        if "pk" in cleaned_data and cleaned_data["pk"]: +            cr = cr.exclude(pk=int(cleaned_data["pk"]))          if cr.count(): -            raise forms.ValidationError(_("This ID already exists for " -                                          "this operation.")) -        if not self.cleaned_data.get('parcel', None) and not \ -                self.cleaned_data.get('town', None): -            raise forms.ValidationError(_("You have to choose a town or a " -                                          "parcel.")) +            raise forms.ValidationError( +                _("This ID already exists for " "this operation.") +            ) +        if not self.cleaned_data.get("parcel", None) and not self.cleaned_data.get( +            "town", None +        ): +            raise forms.ValidationError(_("You have to choose a town or a " "parcel."))          return cleaned_data  class DatingForm(ManageOldType, forms.Form):      form_label = _("Dating") -    base_model = 'dating' -    associated_models = {'dating_type': models.DatingType, -                         'quality': models.DatingQuality, -                         'period': models.Period} +    base_model = "dating" +    associated_models = { +        "dating_type": models.DatingType, +        "quality": models.DatingQuality, +        "period": models.Period, +    }      period = forms.ChoiceField(label=_("Period"), choices=[])      start_date = forms.IntegerField(label=_("Start date"), required=False)      end_date = forms.IntegerField(label=_("End date"), required=False)      quality = forms.ChoiceField(label=_("Quality"), required=False, choices=[]) -    dating_type = forms.ChoiceField(label=_("Dating type"), required=False, -                                    choices=[]) -    precise_dating = forms.CharField(label=_("Precise dating"), -                                     required=False) +    dating_type = forms.ChoiceField(label=_("Dating type"), required=False, choices=[]) +    precise_dating = forms.CharField(label=_("Precise dating"), required=False)      TYPES = [ -        FieldType('dating_type', models.DatingType), -        FieldType('quality', models.DatingQuality), -        FieldType('period', models.Period) +        FieldType("dating_type", models.DatingType), +        FieldType("quality", models.DatingQuality), +        FieldType("period", models.Period),      ] -DatingFormSet = formset_factory(DatingForm, can_delete=True, -                                formset=FormSet) +DatingFormSet = formset_factory(DatingForm, can_delete=True, formset=FormSet)  DatingFormSet.form_label = _("Dating")  DatingFormSet.form_admin_name = _("Context record - 030 - Dating")  DatingFormSet.form_slug = "contextrecord-030-datings" @@ -412,25 +485,29 @@ DatingFormSet.form_slug = "contextrecord-030-datings"  class RecordRelationsForm(OpeRecordRelationsForm):      current_model = models.RelationType      current_related_model = models.ContextRecord -    associated_models = {'right_record': models.ContextRecord, -                         'relation_type': models.RelationType} +    associated_models = { +        "right_record": models.ContextRecord, +        "relation_type": models.RelationType, +    }      right_record = forms.ChoiceField( -        label=_("Context record"), choices=[], required=False) +        label=_("Context record"), choices=[], required=False +    )      def __init__(self, *args, **kwargs):          crs = None -        if 'data' in kwargs and 'CONTEXT_RECORDS' in kwargs['data']: -            crs = kwargs['data']['CONTEXT_RECORDS'] +        if "data" in kwargs and "CONTEXT_RECORDS" in kwargs["data"]: +            crs = kwargs["data"]["CONTEXT_RECORDS"]          super(RecordRelationsForm, self).__init__(*args, **kwargs) -        self.fields['relation_type'].choices = \ -            models.RelationType.get_types( -                initial=self.init_data.get('relation_type')) +        self.fields["relation_type"].choices = models.RelationType.get_types( +            initial=self.init_data.get("relation_type") +        )          if crs: -            self.fields['right_record'].choices = [('', '-' * 2)] + crs +            self.fields["right_record"].choices = [("", "-" * 2)] + crs  RecordRelationsFormSet = formset_factory( -    RecordRelationsForm, can_delete=True, formset=RecordRelationsFormSetBase) +    RecordRelationsForm, can_delete=True, formset=RecordRelationsFormSetBase +)  RecordRelationsFormSet.form_label = _("Relations")  RecordRelationsFormSet.form_admin_name = _("Context record - 050 - Relations")  RecordRelationsFormSet.form_slug = "contextrecord-050-recordrelations" @@ -441,36 +518,41 @@ class RecordFormInterpretation(CustomForm, ManageOldType, forms.Form):      form_admin_name = _("Context record - 040 - Interpretation")      form_slug = "contextrecord-040-interpretation" -    associated_models = {'activity': models.ActivityType, -                         'identification': models.IdentificationType} +    associated_models = { +        "activity": models.ActivityType, +        "identification": models.IdentificationType, +    }      datings_comment = forms.CharField( -        label=_("Comments on dating"), required=False, -        widget=forms.Textarea) -    filling = forms.CharField(label=_("Filling"), -                              widget=forms.Textarea, required=False) -    interpretation = forms.CharField(label=_("Interpretation"), -                                     widget=forms.Textarea, required=False) -    activity = forms.ChoiceField(label=_("Activity"), required=False, -                                 choices=[]) -    identification = forms.ChoiceField(label=_("Identification"), -                                       required=False, choices=[]) +        label=_("Comments on dating"), required=False, widget=forms.Textarea +    ) +    filling = forms.CharField(label=_("Filling"), widget=forms.Textarea, required=False) +    interpretation = forms.CharField( +        label=_("Interpretation"), widget=forms.Textarea, required=False +    ) +    activity = forms.ChoiceField(label=_("Activity"), required=False, choices=[]) +    identification = forms.ChoiceField( +        label=_("Identification"), required=False, choices=[] +    )      taq = forms.IntegerField(label=_("TAQ"), required=False) -    taq_estimated = forms.IntegerField(label=_("Estimated TAQ"), -                                       required=False) +    taq_estimated = forms.IntegerField(label=_("Estimated TAQ"), required=False)      tpq = forms.IntegerField(label=_("TPQ"), required=False) -    tpq_estimated = forms.IntegerField(label=_("Estimated TPQ"), -                                       required=False) +    tpq_estimated = forms.IntegerField(label=_("Estimated TPQ"), required=False)      TYPES = [ -        FieldType('activity', models.ActivityType), -        FieldType('identification', models.IdentificationType), +        FieldType("activity", models.ActivityType), +        FieldType("identification", models.IdentificationType),      ]  OperationRecordFormSelection = get_form_selection( -    'OperationRecordFormSelection', _("Operation search"), 'operation_id', -    Operation, OperationSelect, 'get-operation', -    _("You should select an operation.")) +    "OperationRecordFormSelection", +    _("Operation search"), +    "operation_id", +    Operation, +    OperationSelect, +    "get-operation", +    _("You should select an operation."), +)  class RecordDeletionForm(FinalForm): @@ -481,30 +563,31 @@ class RecordDeletionForm(FinalForm):  class QAOperationCR(IshtarForm):      town = forms.ChoiceField(label=_("Town"), choices=[])      archaeological_site = forms.ChoiceField( -        label=" ", choices=[], required=False, -        help_text=_("Only the items associated to the operation can be " -                    "selected.") +        label=" ", +        choices=[], +        required=False, +        help_text=_("Only the items associated to the operation can be " "selected."), +    ) +    label = forms.CharField( +        label=_("ID"), validators=[validators.MaxLengthValidator(200)]      ) -    label = forms.CharField(label=_("ID"), -                            validators=[validators.MaxLengthValidator(200)])      parcel = forms.ChoiceField(label=_("Parcel"), choices=[], required=False) -    unit = forms.ChoiceField(label=_("Context record type"), required=False, -                             choices=[]) +    unit = forms.ChoiceField(label=_("Context record type"), required=False, choices=[])      TYPES = [ -        FieldType('unit', models.Unit), +        FieldType("unit", models.Unit),      ]      def __init__(self, *args, **kwargs): -        self.items = kwargs.pop('items') +        self.items = kwargs.pop("items")          super(QAOperationCR, self).__init__(*args, **kwargs)          self.profil = IshtarSiteProfile.get_current_profile()          site_label = self.profil.get_site_label() -        self.fields['archaeological_site'].label = site_label -        self.fields['archaeological_site'].choices = [('', '--')] +        self.fields["archaeological_site"].label = site_label +        self.fields["archaeological_site"].choices = [("", "--")]          if self.profil.parcel_mandatory: -            self.fields['parcel'].required = True -            self.fields.pop('town') +            self.fields["parcel"].required = True +            self.fields.pop("town")          else:              self.fields.pop("parcel") @@ -512,31 +595,30 @@ class QAOperationCR(IshtarForm):              return          operation = self.items[0]          if not self.profil.parcel_mandatory: -            self.fields['town'].choices = [(t.pk, str(t)) -                                           for t in operation.towns.all()] -        self.fields['archaeological_site'].choices += [ -            (site.pk, str(site)) -            for site in operation.archaeological_sites.all() +            self.fields["town"].choices = [ +                (t.pk, str(t)) for t in operation.towns.all() +            ] +        self.fields["archaeological_site"].choices += [ +            (site.pk, str(site)) for site in operation.archaeological_sites.all()          ]          if self.profil.parcel_mandatory: -            self.fields['parcel'].choices += [('', '--')] + [ -                (str(parcel.pk), "{} - {}".format(parcel.short_label, -                                                  parcel.town)) -                for parcel in operation.parcels.all()] +            self.fields["parcel"].choices += [("", "--")] + [ +                (str(parcel.pk), "{} - {}".format(parcel.short_label, parcel.town)) +                for parcel in operation.parcels.all() +            ]      def save(self, items):          operation = items[0]          data = {              "operation": operation, -            "archaeological_site_id": -                self.cleaned_data['archaeological_site'] or None, -            "label": self.cleaned_data['label'], -            "unit_id": self.cleaned_data['unit'] or None +            "archaeological_site_id": self.cleaned_data["archaeological_site"] or None, +            "label": self.cleaned_data["label"], +            "unit_id": self.cleaned_data["unit"] or None,          }          if self.profil.parcel_mandatory: -            data["parcel_id"] = self.cleaned_data['parcel'] +            data["parcel_id"] = self.cleaned_data["parcel"]          else: -            data["town_id"] = self.cleaned_data['town'] +            data["town_id"] = self.cleaned_data["town"]          models.ContextRecord.objects.create(**data) @@ -544,29 +626,30 @@ class QAContextRecordDuplicateForm(IshtarForm):      qa_label = forms.CharField(label=_("ID"), max_length=None, required=True)      qa_parcel = forms.ChoiceField(label=_("Parcel"), choices=[])      qa_town = forms.ChoiceField(label=_("Town"), choices=[], required=False) -    qa_unit = forms.ChoiceField(label=_("Context record type"), required=False, -                                choices=[]) +    qa_unit = forms.ChoiceField( +        label=_("Context record type"), required=False, choices=[] +    )      TYPES = [ -        FieldType('qa_unit', models.Unit), +        FieldType("qa_unit", models.Unit),      ]      def __init__(self, *args, **kwargs):          self.user = None -        if 'user' in kwargs: -            self.user = kwargs.pop('user') -            if hasattr(self.user, 'ishtaruser'): +        if "user" in kwargs: +            self.user = kwargs.pop("user") +            if hasattr(self.user, "ishtaruser"):                  self.user = self.user.ishtaruser -        self.context_record = kwargs.pop('items')[0] +        self.context_record = kwargs.pop("items")[0]          super(QAContextRecordDuplicateForm, self).__init__(*args, **kwargs)          profile = IshtarSiteProfile.get_current_profile() -        self.fields['qa_parcel'].choices = [('', '--')] +        self.fields["qa_parcel"].choices = [("", "--")]          if not profile.parcel_mandatory: -            self.fields['qa_parcel'].required = False -            self.fields['qa_town'].choices = [('', '--')] +            self.fields["qa_parcel"].required = False +            self.fields["qa_town"].choices = [("", "--")]          else: -            self.fields.pop('qa_town') +            self.fields.pop("qa_town")          get_init_parcel(self, self.context_record.operation, prefix="qa_") @@ -575,8 +658,9 @@ class QAContextRecordDuplicateForm(IshtarForm):          if "qa_parcel" in self.fields and self.context_record.parcel:              self.fields["qa_parcel"].initial = self.context_record.parcel.pk -        self.fields['qa_label'].initial = ( -            self.context_record.label or "") + str(_(" - duplicate")) +        self.fields["qa_label"].initial = (self.context_record.label or "") + str( +            _(" - duplicate") +        )          if self.context_record.unit:              self.fields["qa_unit"].initial = self.context_record.unit.pk @@ -584,21 +668,21 @@ class QAContextRecordDuplicateForm(IshtarForm):          data = {"label": self.cleaned_data["qa_label"]}          if self.cleaned_data.get("qa_unit", None):              try: -                data["unit"] = models.Unit.objects.get(pk=int( -                    self.cleaned_data["qa_unit"]), available=True) +                data["unit"] = models.Unit.objects.get( +                    pk=int(self.cleaned_data["qa_unit"]), available=True +                )              except models.Unit.DoesNotExist:                  pass          if self.cleaned_data.get("qa_town", None):              try: -                data["town"] = Town.objects.get(pk=int( -                    self.cleaned_data["qa_town"])) +                data["town"] = Town.objects.get(pk=int(self.cleaned_data["qa_town"]))              except Town.DoesNotExist:                  pass          if self.cleaned_data.get("qa_parcel", None):              try: -                data["parcel"] = Parcel.objects.get(pk=int( -                    self.cleaned_data["qa_parcel"])) +                data["parcel"] = Parcel.objects.get( +                    pk=int(self.cleaned_data["qa_parcel"]) +                )              except Parcel.DoesNotExist:                  pass -        return self.context_record.duplicate( -            self.user, data=data) +        return self.context_record.duplicate(self.user, data=data)  | 
