From c682a67e79d4a2f47ff97940c377aeb4fcc4ad05 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Fri, 24 Oct 2025 15:05:28 +0200 Subject: 🐛 ✨ person, organization tables: fix and optimize town name and person type list (refs #6441) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migrations/0265_add_timezone_django_v4.py | 459 --------------------- ishtar_common/migrations/0265_cached_town.py | 53 +++ .../migrations/0266_migrate_cached_town.py | 37 ++ .../migrations/0266_userrequesttoken_usertoken.py | 64 --- .../migrations/0267_add_timezone_django_v4.py | 459 +++++++++++++++++++++ ishtar_common/migrations/0267_gis_importchunk.py | 31 -- .../migrations/0268_gis_import_key_init.py | 24 -- .../migrations/0268_userrequesttoken_usertoken.py | 64 +++ ishtar_common/migrations/0269_gis_importchunk.py | 31 ++ .../migrations/0269_import_import_immediatly.py | 18 - .../migrations/0270_gis_import_key_init.py | 24 ++ .../migrations/0271_import_import_immediatly.py | 18 + 12 files changed, 686 insertions(+), 596 deletions(-) delete mode 100644 ishtar_common/migrations/0265_add_timezone_django_v4.py create mode 100644 ishtar_common/migrations/0265_cached_town.py create mode 100644 ishtar_common/migrations/0266_migrate_cached_town.py delete mode 100644 ishtar_common/migrations/0266_userrequesttoken_usertoken.py create mode 100644 ishtar_common/migrations/0267_add_timezone_django_v4.py delete mode 100644 ishtar_common/migrations/0267_gis_importchunk.py delete mode 100644 ishtar_common/migrations/0268_gis_import_key_init.py create mode 100644 ishtar_common/migrations/0268_userrequesttoken_usertoken.py create mode 100644 ishtar_common/migrations/0269_gis_importchunk.py delete mode 100644 ishtar_common/migrations/0269_import_import_immediatly.py create mode 100644 ishtar_common/migrations/0270_gis_import_key_init.py create mode 100644 ishtar_common/migrations/0271_import_import_immediatly.py (limited to 'ishtar_common/migrations') diff --git a/ishtar_common/migrations/0265_add_timezone_django_v4.py b/ishtar_common/migrations/0265_add_timezone_django_v4.py deleted file mode 100644 index ea4e0c595..000000000 --- a/ishtar_common/migrations/0265_add_timezone_django_v4.py +++ /dev/null @@ -1,459 +0,0 @@ -# Generated by Django 4.2.19 on 2025-05-01 13:24 - -import django.core.validators -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone -import re - - -class Migration(migrations.Migration): - - dependencies = [ - ('ishtar_common', '0264_source_type_add_order'), - ] - - operations = [ - migrations.AlterModelOptions( - name='historicaldocument', - options={'get_latest_by': ('history_date', 'history_id'), 'ordering': ('-history_date', '-history_id'), 'verbose_name': 'historical Document', 'verbose_name_plural': 'historical Documents'}, - ), - migrations.AlterModelOptions( - name='historicalorganization', - options={'get_latest_by': ('history_date', 'history_id'), 'ordering': ('-history_date', '-history_id'), 'verbose_name': 'historical Organization', 'verbose_name_plural': 'historical Organizations'}, - ), - migrations.AlterModelOptions( - name='historicalperson', - options={'get_latest_by': ('history_date', 'history_id'), 'ordering': ('-history_date', '-history_id'), 'verbose_name': 'historical Person', 'verbose_name_plural': 'historical Persons'}, - ), - migrations.AlterField( - model_name='administrationtask', - name='creation_date', - field=models.DateTimeField(default=django.utils.timezone.now), - ), - migrations.AlterField( - model_name='area', - name='txt_idx', - field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), - ), - migrations.AlterField( - model_name='authortype', - name='txt_idx', - field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), - ), - migrations.AlterField( - model_name='backgroundtask', - name='creation_date', - field=models.DateTimeField(default=django.utils.timezone.now), - ), - migrations.AlterField( - model_name='biographicalnote', - name='created', - field=models.DateTimeField(blank=True, default=django.utils.timezone.now), - ), - migrations.AlterField( - model_name='biographicalnote', - name='data', - field=models.JSONField(blank=True, default=dict), - ), - migrations.AlterField( - model_name='biographicalnote', - name='history_m2m', - field=models.JSONField(blank=True, default=dict), - ), - migrations.AlterField( - model_name='biographicalnote', - name='imports', - field=models.ManyToManyField(blank=True, related_name='imported_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Created by imports'), - ), - migrations.AlterField( - model_name='biographicalnote', - name='imports_updated', - field=models.ManyToManyField(blank=True, related_name='import_updated_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Updated by imports'), - ), - migrations.AlterField( - model_name='biographicalnote', - name='ishtar_users', - field=models.ManyToManyField(blank=True, related_name='%(class)s_associated', to='ishtar_common.ishtaruser'), - ), - migrations.AlterField( - model_name='biographicalnote', - name='last_modified', - field=models.DateTimeField(blank=True, default=django.utils.timezone.now), - ), - migrations.AlterField( - model_name='document', - name='created', - field=models.DateTimeField(blank=True, default=django.utils.timezone.now), - ), - migrations.AlterField( - model_name='document', - name='data', - field=models.JSONField(blank=True, default=dict), - ), - migrations.AlterField( - model_name='document', - name='duplicate', - field=models.BooleanField(blank=True, null=True, verbose_name='Has a duplicate'), - ), - migrations.AlterField( - model_name='document', - name='history_m2m', - field=models.JSONField(blank=True, default=dict), - ), - migrations.AlterField( - model_name='document', - name='imports', - field=models.ManyToManyField(blank=True, related_name='imported_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Created by imports'), - ), - migrations.AlterField( - model_name='document', - name='imports_updated', - field=models.ManyToManyField(blank=True, related_name='import_updated_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Updated by imports'), - ), - migrations.AlterField( - model_name='document', - name='ishtar_users', - field=models.ManyToManyField(blank=True, related_name='%(class)s_associated', to='ishtar_common.ishtaruser'), - ), - migrations.AlterField( - model_name='document', - name='last_modified', - field=models.DateTimeField(blank=True, default=django.utils.timezone.now), - ), - migrations.AlterField( - model_name='documenttag', - name='txt_idx', - field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), - ), - migrations.AlterField( - model_name='exporttask', - name='creation_date', - field=models.DateTimeField(default=django.utils.timezone.now), - ), - migrations.AlterField( - model_name='format', - name='txt_idx', - field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), - ), - migrations.AlterField( - model_name='gdprlog', - name='date', - field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='Date'), - ), - migrations.AlterField( - model_name='gdprlog', - name='persons', - field=models.ManyToManyField(blank=True, related_name='logs', to='ishtar_common.gdprperson', verbose_name='Persons'), - ), - migrations.AlterField( - model_name='geobuffertype', - name='txt_idx', - field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), - ), - migrations.AlterField( - model_name='geodatatype', - name='txt_idx', - field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), - ), - migrations.AlterField( - model_name='geoorigintype', - name='txt_idx', - field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), - ), - migrations.AlterField( - model_name='geoprovidertype', - name='txt_idx', - field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), - ), - migrations.AlterField( - model_name='geovectordata', - name='imports', - field=models.ManyToManyField(blank=True, related_name='imported_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Created by imports'), - ), - migrations.AlterField( - model_name='geovectordata', - name='imports_updated', - field=models.ManyToManyField(blank=True, related_name='import_updated_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Updated by imports'), - ), - migrations.AlterField( - model_name='historicaldocument', - name='created', - field=models.DateTimeField(blank=True, default=django.utils.timezone.now), - ), - migrations.AlterField( - model_name='historicaldocument', - name='data', - field=models.JSONField(blank=True, default=dict), - ), - migrations.AlterField( - model_name='historicaldocument', - name='duplicate', - field=models.BooleanField(blank=True, null=True, verbose_name='Has a duplicate'), - ), - migrations.AlterField( - model_name='historicaldocument', - name='history_date', - field=models.DateTimeField(db_index=True), - ), - migrations.AlterField( - model_name='historicaldocument', - name='history_m2m', - field=models.JSONField(blank=True, default=dict), - ), - migrations.AlterField( - model_name='historicaldocument', - name='last_modified', - field=models.DateTimeField(blank=True, default=django.utils.timezone.now), - ), - migrations.AlterField( - model_name='historicalorganization', - name='archived', - field=models.BooleanField(blank=True, default=False, null=True), - ), - migrations.AlterField( - model_name='historicalorganization', - name='created', - field=models.DateTimeField(blank=True, default=django.utils.timezone.now), - ), - migrations.AlterField( - model_name='historicalorganization', - name='data', - field=models.JSONField(blank=True, default=dict), - ), - migrations.AlterField( - model_name='historicalorganization', - name='history_date', - field=models.DateTimeField(db_index=True), - ), - migrations.AlterField( - model_name='historicalorganization', - name='history_m2m', - field=models.JSONField(blank=True, default=dict), - ), - migrations.AlterField( - model_name='historicalorganization', - name='last_modified', - field=models.DateTimeField(blank=True, default=django.utils.timezone.now), - ), - migrations.AlterField( - model_name='historicalperson', - name='archived', - field=models.BooleanField(blank=True, default=False, null=True), - ), - migrations.AlterField( - model_name='historicalperson', - name='created', - field=models.DateTimeField(blank=True, default=django.utils.timezone.now), - ), - migrations.AlterField( - model_name='historicalperson', - name='data', - field=models.JSONField(blank=True, default=dict), - ), - migrations.AlterField( - model_name='historicalperson', - name='history_date', - field=models.DateTimeField(db_index=True), - ), - migrations.AlterField( - model_name='historicalperson', - name='history_m2m', - field=models.JSONField(blank=True, default=dict), - ), - migrations.AlterField( - model_name='historicalperson', - name='last_modified', - field=models.DateTimeField(blank=True, default=django.utils.timezone.now), - ), - migrations.AlterField( - model_name='importtask', - name='creation_date', - field=models.DateTimeField(default=django.utils.timezone.now), - ), - migrations.AlterField( - model_name='language', - name='txt_idx', - field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), - ), - migrations.AlterField( - model_name='licensetype', - name='txt_idx', - field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), - ), - migrations.AlterField( - model_name='operationtype', - name='txt_idx', - field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), - ), - migrations.AlterField( - model_name='organization', - name='archived', - field=models.BooleanField(blank=True, default=False, null=True), - ), - migrations.AlterField( - model_name='organization', - name='created', - field=models.DateTimeField(blank=True, default=django.utils.timezone.now), - ), - migrations.AlterField( - model_name='organization', - name='data', - field=models.JSONField(blank=True, default=dict), - ), - migrations.AlterField( - model_name='organization', - name='history_m2m', - field=models.JSONField(blank=True, default=dict), - ), - migrations.AlterField( - model_name='organization', - name='imports', - field=models.ManyToManyField(blank=True, related_name='imported_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Created by imports'), - ), - migrations.AlterField( - model_name='organization', - name='imports_updated', - field=models.ManyToManyField(blank=True, related_name='import_updated_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Updated by imports'), - ), - migrations.AlterField( - model_name='organization', - name='ishtar_users', - field=models.ManyToManyField(blank=True, related_name='%(class)s_associated', to='ishtar_common.ishtaruser'), - ), - migrations.AlterField( - model_name='organization', - name='last_modified', - field=models.DateTimeField(blank=True, default=django.utils.timezone.now), - ), - migrations.AlterField( - model_name='organization', - name='merge_candidate', - field=models.ManyToManyField(blank=True, to='ishtar_common.organization'), - ), - migrations.AlterField( - model_name='organization', - name='merge_exclusion', - field=models.ManyToManyField(blank=True, to='ishtar_common.organization'), - ), - migrations.AlterField( - model_name='organizationtype', - name='txt_idx', - field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), - ), - migrations.AlterField( - model_name='person', - name='archived', - field=models.BooleanField(blank=True, default=False, null=True), - ), - migrations.AlterField( - model_name='person', - name='created', - field=models.DateTimeField(blank=True, default=django.utils.timezone.now), - ), - migrations.AlterField( - model_name='person', - name='data', - field=models.JSONField(blank=True, default=dict), - ), - migrations.AlterField( - model_name='person', - name='history_m2m', - field=models.JSONField(blank=True, default=dict), - ), - migrations.AlterField( - model_name='person', - name='imports', - field=models.ManyToManyField(blank=True, related_name='imported_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Created by imports'), - ), - migrations.AlterField( - model_name='person', - name='imports_updated', - field=models.ManyToManyField(blank=True, related_name='import_updated_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Updated by imports'), - ), - migrations.AlterField( - model_name='person', - name='ishtar_users', - field=models.ManyToManyField(blank=True, related_name='%(class)s_associated', to='ishtar_common.ishtaruser'), - ), - migrations.AlterField( - model_name='person', - name='last_modified', - field=models.DateTimeField(blank=True, default=django.utils.timezone.now), - ), - migrations.AlterField( - model_name='person', - name='merge_candidate', - field=models.ManyToManyField(blank=True, to='ishtar_common.person'), - ), - migrations.AlterField( - model_name='person', - name='merge_exclusion', - field=models.ManyToManyField(blank=True, to='ishtar_common.person'), - ), - migrations.AlterField( - model_name='persontype', - name='txt_idx', - field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), - ), - migrations.AlterField( - model_name='profiletype', - name='txt_idx', - field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), - ), - migrations.AlterField( - model_name='shootingangle', - name='txt_idx', - field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), - ), - migrations.AlterField( - model_name='sourcetype', - name='txt_idx', - field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), - ), - migrations.AlterField( - model_name='spatialreferencesystem', - name='txt_idx', - field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), - ), - migrations.AlterField( - model_name='statscache', - name='updated', - field=models.DateTimeField(default=django.utils.timezone.now), - ), - migrations.AlterField( - model_name='statscache', - name='values', - field=models.JSONField(blank=True, default=dict), - ), - migrations.AlterField( - model_name='supporttype', - name='txt_idx', - field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), - ), - migrations.AlterField( - model_name='titletype', - name='txt_idx', - field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), - ), - migrations.AlterField( - model_name='town', - name='geodata', - field=models.ManyToManyField(blank=True, related_name='related_items_%(app_label)s_%(class)s', to='ishtar_common.geovectordata', verbose_name='Geodata'), - ), - migrations.AlterField( - model_name='town', - name='imports', - field=models.ManyToManyField(blank=True, related_name='imported_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Created by imports'), - ), - migrations.AlterField( - model_name='town', - name='imports_updated', - field=models.ManyToManyField(blank=True, related_name='import_updated_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Updated by imports'), - ), - migrations.AlterField( - model_name='town', - name='main_geodata', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='main_related_items_%(app_label)s_%(class)s', to='ishtar_common.geovectordata', verbose_name='Main geodata'), - ), - ] diff --git a/ishtar_common/migrations/0265_cached_town.py b/ishtar_common/migrations/0265_cached_town.py new file mode 100644 index 000000000..01f392e78 --- /dev/null +++ b/ishtar_common/migrations/0265_cached_town.py @@ -0,0 +1,53 @@ +# Generated by Django 2.2.24 on 2025-10-24 12:39 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ishtar_common', '0264_source_type_add_order'), + ] + + operations = [ + migrations.AddField( + model_name='historicalorganization', + name='cached_town', + field=models.TextField(blank=True, default='', verbose_name='Cached town'), + ), + migrations.AddField( + model_name='historicalperson', + name='cached_person_types', + field=models.TextField(blank=True, default='', verbose_name='Cached person types'), + ), + migrations.AddField( + model_name='historicalperson', + name='cached_town', + field=models.TextField(blank=True, default='', verbose_name='Cached town'), + ), + migrations.AddField( + model_name='organization', + name='cached_town', + field=models.TextField(blank=True, default='', verbose_name='Cached town'), + ), + migrations.AddField( + model_name='person', + name='cached_person_types', + field=models.TextField(blank=True, default='', verbose_name='Cached person types'), + ), + migrations.AddField( + model_name='person', + name='cached_town', + field=models.TextField(blank=True, default='', verbose_name='Cached town'), + ), + migrations.AddField( + model_name='historicalperson', + name='cached_profiles', + field=models.TextField(blank=True, default='', verbose_name='Cached profiles'), + ), + migrations.AddField( + model_name='person', + name='cached_profiles', + field=models.TextField(blank=True, default='', verbose_name='Cached profiles'), + ), + ] diff --git a/ishtar_common/migrations/0266_migrate_cached_town.py b/ishtar_common/migrations/0266_migrate_cached_town.py new file mode 100644 index 000000000..e5904a5c5 --- /dev/null +++ b/ishtar_common/migrations/0266_migrate_cached_town.py @@ -0,0 +1,37 @@ +# Generated by Django 2.2.24 on 2025-10-24 12:59 + +from django.db import migrations + + +def _generate_cached_town(Town, town): + if town.precise_town_id: + return Town.objects.get(id=town.precise_town_id).name + return town.town or "" + + +def migrate_cached_towns(apps, __): + Town = apps.get_model("ishtar_common", "Town") + Person = apps.get_model("ishtar_common", "Person") + for person in Person.objects.all(): + Person.objects.filter(pk=person.pk).update( + cached_town=_generate_cached_town(Town, person), + cached_person_types=", ".join(pt.label for pt in person.person_types.all()), + cached_profiles=", ".join(set([p.profile_type.label + for p in person.profiles.all()])) + ) + Organization = apps.get_model("ishtar_common", "Organization") + for organization in Organization.objects.all(): + Organization.objects.filter(pk=organization.pk).update( + cached_town=_generate_cached_town(Town, organization), + ) + + +class Migration(migrations.Migration): + + dependencies = [ + ('ishtar_common', '0265_cached_town'), + ] + + operations = [ + migrations.RunPython(migrate_cached_towns) + ] diff --git a/ishtar_common/migrations/0266_userrequesttoken_usertoken.py b/ishtar_common/migrations/0266_userrequesttoken_usertoken.py deleted file mode 100644 index 1ff39d163..000000000 --- a/ishtar_common/migrations/0266_userrequesttoken_usertoken.py +++ /dev/null @@ -1,64 +0,0 @@ -# Generated by Django 4.2.19 on 2025-05-09 08:25 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('auth', '0012_alter_user_first_name_max_length'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('ishtar_common', '0265_add_timezone_django_v4'), - ] - - operations = [ - migrations.CreateModel( - name='UserRequestToken', - fields=[ - ('created', models.DateTimeField(auto_now_add=True, verbose_name='Created')), - ('key', models.CharField(max_length=6, unique=True, verbose_name='Key')), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, related_name='user_request_token', serialize=False, to=settings.AUTH_USER_MODEL, verbose_name='User')), - ('access_type', models.CharField(choices=[('R', 'GIS - read'), ('W', 'GIS - read/write')], default='R', max_length=1, verbose_name='Access type')), - ('name', models.TextField(verbose_name='Name')), - ('limit_date', models.DateField(blank=True, null=True, verbose_name='Limit date')), - ], - options={ - 'verbose_name': 'API - GIS - Request token', - 'verbose_name_plural': 'API - GIS - Request tokens', - }, - ), - migrations.AlterModelOptions( - name='importertype', - options={'ordering': ('name',), 'permissions': (('view_gis_importer', 'Can export to QGIS'), ('view_own_gis_importer', 'Can export own to QGIS'), ('change_gis_importer', 'Can import from QGIS'), ('change_own_gis_importer', 'Can import own to QGIS')), 'verbose_name': 'Importer - Type', 'verbose_name_plural': 'Importer - Types'}, - ), - migrations.AddField( - model_name='ishtarsiteprofile', - name='gis_connector', - field=models.BooleanField(default=False, verbose_name='GIS connector'), - ), - migrations.AlterField( - model_name='importertype', - name='type', - field=models.CharField(choices=[('tab', 'Table'), ('gis', 'GIS'), ('qgs', 'QGIS')], default='tab', max_length=3, verbose_name='Type'), - ), - migrations.CreateModel( - name='UserToken', - fields=[ - ('key', models.CharField(max_length=40, primary_key=True, serialize=False, verbose_name='Key')), - ('name', models.TextField(verbose_name='Name')), - ('created', models.DateTimeField(auto_now_add=True, verbose_name='Created')), - ('access_type', models.CharField(choices=[('R', 'GIS - read'), ('W', 'GIS - read/write')], default='R', max_length=1, verbose_name='Access type')), - ('limit_date', models.DateField(blank=True, null=True, verbose_name='Limit date')), - ('last_ip', models.GenericIPAddressField(blank=True, null=True, verbose_name='Last IP')), - ('last_access', models.DateField(auto_now_add=True, verbose_name='Last access date')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='user_token', to=settings.AUTH_USER_MODEL, verbose_name='User')), - ], - options={ - 'verbose_name': 'API - GIS - Token', - 'verbose_name_plural': 'API - GIS - Tokens', - 'ordering': ('user', 'name', 'limit_date'), - }, - ), - ] diff --git a/ishtar_common/migrations/0267_add_timezone_django_v4.py b/ishtar_common/migrations/0267_add_timezone_django_v4.py new file mode 100644 index 000000000..0eb973d87 --- /dev/null +++ b/ishtar_common/migrations/0267_add_timezone_django_v4.py @@ -0,0 +1,459 @@ +# Generated by Django 4.2.19 on 2025-05-01 13:24 + +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone +import re + + +class Migration(migrations.Migration): + + dependencies = [ + ('ishtar_common', '0266_migrate_cached_town'), + ] + + operations = [ + migrations.AlterModelOptions( + name='historicaldocument', + options={'get_latest_by': ('history_date', 'history_id'), 'ordering': ('-history_date', '-history_id'), 'verbose_name': 'historical Document', 'verbose_name_plural': 'historical Documents'}, + ), + migrations.AlterModelOptions( + name='historicalorganization', + options={'get_latest_by': ('history_date', 'history_id'), 'ordering': ('-history_date', '-history_id'), 'verbose_name': 'historical Organization', 'verbose_name_plural': 'historical Organizations'}, + ), + migrations.AlterModelOptions( + name='historicalperson', + options={'get_latest_by': ('history_date', 'history_id'), 'ordering': ('-history_date', '-history_id'), 'verbose_name': 'historical Person', 'verbose_name_plural': 'historical Persons'}, + ), + migrations.AlterField( + model_name='administrationtask', + name='creation_date', + field=models.DateTimeField(default=django.utils.timezone.now), + ), + migrations.AlterField( + model_name='area', + name='txt_idx', + field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), + ), + migrations.AlterField( + model_name='authortype', + name='txt_idx', + field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), + ), + migrations.AlterField( + model_name='backgroundtask', + name='creation_date', + field=models.DateTimeField(default=django.utils.timezone.now), + ), + migrations.AlterField( + model_name='biographicalnote', + name='created', + field=models.DateTimeField(blank=True, default=django.utils.timezone.now), + ), + migrations.AlterField( + model_name='biographicalnote', + name='data', + field=models.JSONField(blank=True, default=dict), + ), + migrations.AlterField( + model_name='biographicalnote', + name='history_m2m', + field=models.JSONField(blank=True, default=dict), + ), + migrations.AlterField( + model_name='biographicalnote', + name='imports', + field=models.ManyToManyField(blank=True, related_name='imported_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Created by imports'), + ), + migrations.AlterField( + model_name='biographicalnote', + name='imports_updated', + field=models.ManyToManyField(blank=True, related_name='import_updated_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Updated by imports'), + ), + migrations.AlterField( + model_name='biographicalnote', + name='ishtar_users', + field=models.ManyToManyField(blank=True, related_name='%(class)s_associated', to='ishtar_common.ishtaruser'), + ), + migrations.AlterField( + model_name='biographicalnote', + name='last_modified', + field=models.DateTimeField(blank=True, default=django.utils.timezone.now), + ), + migrations.AlterField( + model_name='document', + name='created', + field=models.DateTimeField(blank=True, default=django.utils.timezone.now), + ), + migrations.AlterField( + model_name='document', + name='data', + field=models.JSONField(blank=True, default=dict), + ), + migrations.AlterField( + model_name='document', + name='duplicate', + field=models.BooleanField(blank=True, null=True, verbose_name='Has a duplicate'), + ), + migrations.AlterField( + model_name='document', + name='history_m2m', + field=models.JSONField(blank=True, default=dict), + ), + migrations.AlterField( + model_name='document', + name='imports', + field=models.ManyToManyField(blank=True, related_name='imported_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Created by imports'), + ), + migrations.AlterField( + model_name='document', + name='imports_updated', + field=models.ManyToManyField(blank=True, related_name='import_updated_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Updated by imports'), + ), + migrations.AlterField( + model_name='document', + name='ishtar_users', + field=models.ManyToManyField(blank=True, related_name='%(class)s_associated', to='ishtar_common.ishtaruser'), + ), + migrations.AlterField( + model_name='document', + name='last_modified', + field=models.DateTimeField(blank=True, default=django.utils.timezone.now), + ), + migrations.AlterField( + model_name='documenttag', + name='txt_idx', + field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), + ), + migrations.AlterField( + model_name='exporttask', + name='creation_date', + field=models.DateTimeField(default=django.utils.timezone.now), + ), + migrations.AlterField( + model_name='format', + name='txt_idx', + field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), + ), + migrations.AlterField( + model_name='gdprlog', + name='date', + field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='Date'), + ), + migrations.AlterField( + model_name='gdprlog', + name='persons', + field=models.ManyToManyField(blank=True, related_name='logs', to='ishtar_common.gdprperson', verbose_name='Persons'), + ), + migrations.AlterField( + model_name='geobuffertype', + name='txt_idx', + field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), + ), + migrations.AlterField( + model_name='geodatatype', + name='txt_idx', + field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), + ), + migrations.AlterField( + model_name='geoorigintype', + name='txt_idx', + field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), + ), + migrations.AlterField( + model_name='geoprovidertype', + name='txt_idx', + field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), + ), + migrations.AlterField( + model_name='geovectordata', + name='imports', + field=models.ManyToManyField(blank=True, related_name='imported_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Created by imports'), + ), + migrations.AlterField( + model_name='geovectordata', + name='imports_updated', + field=models.ManyToManyField(blank=True, related_name='import_updated_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Updated by imports'), + ), + migrations.AlterField( + model_name='historicaldocument', + name='created', + field=models.DateTimeField(blank=True, default=django.utils.timezone.now), + ), + migrations.AlterField( + model_name='historicaldocument', + name='data', + field=models.JSONField(blank=True, default=dict), + ), + migrations.AlterField( + model_name='historicaldocument', + name='duplicate', + field=models.BooleanField(blank=True, null=True, verbose_name='Has a duplicate'), + ), + migrations.AlterField( + model_name='historicaldocument', + name='history_date', + field=models.DateTimeField(db_index=True), + ), + migrations.AlterField( + model_name='historicaldocument', + name='history_m2m', + field=models.JSONField(blank=True, default=dict), + ), + migrations.AlterField( + model_name='historicaldocument', + name='last_modified', + field=models.DateTimeField(blank=True, default=django.utils.timezone.now), + ), + migrations.AlterField( + model_name='historicalorganization', + name='archived', + field=models.BooleanField(blank=True, default=False, null=True), + ), + migrations.AlterField( + model_name='historicalorganization', + name='created', + field=models.DateTimeField(blank=True, default=django.utils.timezone.now), + ), + migrations.AlterField( + model_name='historicalorganization', + name='data', + field=models.JSONField(blank=True, default=dict), + ), + migrations.AlterField( + model_name='historicalorganization', + name='history_date', + field=models.DateTimeField(db_index=True), + ), + migrations.AlterField( + model_name='historicalorganization', + name='history_m2m', + field=models.JSONField(blank=True, default=dict), + ), + migrations.AlterField( + model_name='historicalorganization', + name='last_modified', + field=models.DateTimeField(blank=True, default=django.utils.timezone.now), + ), + migrations.AlterField( + model_name='historicalperson', + name='archived', + field=models.BooleanField(blank=True, default=False, null=True), + ), + migrations.AlterField( + model_name='historicalperson', + name='created', + field=models.DateTimeField(blank=True, default=django.utils.timezone.now), + ), + migrations.AlterField( + model_name='historicalperson', + name='data', + field=models.JSONField(blank=True, default=dict), + ), + migrations.AlterField( + model_name='historicalperson', + name='history_date', + field=models.DateTimeField(db_index=True), + ), + migrations.AlterField( + model_name='historicalperson', + name='history_m2m', + field=models.JSONField(blank=True, default=dict), + ), + migrations.AlterField( + model_name='historicalperson', + name='last_modified', + field=models.DateTimeField(blank=True, default=django.utils.timezone.now), + ), + migrations.AlterField( + model_name='importtask', + name='creation_date', + field=models.DateTimeField(default=django.utils.timezone.now), + ), + migrations.AlterField( + model_name='language', + name='txt_idx', + field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), + ), + migrations.AlterField( + model_name='licensetype', + name='txt_idx', + field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), + ), + migrations.AlterField( + model_name='operationtype', + name='txt_idx', + field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), + ), + migrations.AlterField( + model_name='organization', + name='archived', + field=models.BooleanField(blank=True, default=False, null=True), + ), + migrations.AlterField( + model_name='organization', + name='created', + field=models.DateTimeField(blank=True, default=django.utils.timezone.now), + ), + migrations.AlterField( + model_name='organization', + name='data', + field=models.JSONField(blank=True, default=dict), + ), + migrations.AlterField( + model_name='organization', + name='history_m2m', + field=models.JSONField(blank=True, default=dict), + ), + migrations.AlterField( + model_name='organization', + name='imports', + field=models.ManyToManyField(blank=True, related_name='imported_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Created by imports'), + ), + migrations.AlterField( + model_name='organization', + name='imports_updated', + field=models.ManyToManyField(blank=True, related_name='import_updated_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Updated by imports'), + ), + migrations.AlterField( + model_name='organization', + name='ishtar_users', + field=models.ManyToManyField(blank=True, related_name='%(class)s_associated', to='ishtar_common.ishtaruser'), + ), + migrations.AlterField( + model_name='organization', + name='last_modified', + field=models.DateTimeField(blank=True, default=django.utils.timezone.now), + ), + migrations.AlterField( + model_name='organization', + name='merge_candidate', + field=models.ManyToManyField(blank=True, to='ishtar_common.organization'), + ), + migrations.AlterField( + model_name='organization', + name='merge_exclusion', + field=models.ManyToManyField(blank=True, to='ishtar_common.organization'), + ), + migrations.AlterField( + model_name='organizationtype', + name='txt_idx', + field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), + ), + migrations.AlterField( + model_name='person', + name='archived', + field=models.BooleanField(blank=True, default=False, null=True), + ), + migrations.AlterField( + model_name='person', + name='created', + field=models.DateTimeField(blank=True, default=django.utils.timezone.now), + ), + migrations.AlterField( + model_name='person', + name='data', + field=models.JSONField(blank=True, default=dict), + ), + migrations.AlterField( + model_name='person', + name='history_m2m', + field=models.JSONField(blank=True, default=dict), + ), + migrations.AlterField( + model_name='person', + name='imports', + field=models.ManyToManyField(blank=True, related_name='imported_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Created by imports'), + ), + migrations.AlterField( + model_name='person', + name='imports_updated', + field=models.ManyToManyField(blank=True, related_name='import_updated_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Updated by imports'), + ), + migrations.AlterField( + model_name='person', + name='ishtar_users', + field=models.ManyToManyField(blank=True, related_name='%(class)s_associated', to='ishtar_common.ishtaruser'), + ), + migrations.AlterField( + model_name='person', + name='last_modified', + field=models.DateTimeField(blank=True, default=django.utils.timezone.now), + ), + migrations.AlterField( + model_name='person', + name='merge_candidate', + field=models.ManyToManyField(blank=True, to='ishtar_common.person'), + ), + migrations.AlterField( + model_name='person', + name='merge_exclusion', + field=models.ManyToManyField(blank=True, to='ishtar_common.person'), + ), + migrations.AlterField( + model_name='persontype', + name='txt_idx', + field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), + ), + migrations.AlterField( + model_name='profiletype', + name='txt_idx', + field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), + ), + migrations.AlterField( + model_name='shootingangle', + name='txt_idx', + field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), + ), + migrations.AlterField( + model_name='sourcetype', + name='txt_idx', + field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), + ), + migrations.AlterField( + model_name='spatialreferencesystem', + name='txt_idx', + field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), + ), + migrations.AlterField( + model_name='statscache', + name='updated', + field=models.DateTimeField(default=django.utils.timezone.now), + ), + migrations.AlterField( + model_name='statscache', + name='values', + field=models.JSONField(blank=True, default=dict), + ), + migrations.AlterField( + model_name='supporttype', + name='txt_idx', + field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), + ), + migrations.AlterField( + model_name='titletype', + name='txt_idx', + field=models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID'), + ), + migrations.AlterField( + model_name='town', + name='geodata', + field=models.ManyToManyField(blank=True, related_name='related_items_%(app_label)s_%(class)s', to='ishtar_common.geovectordata', verbose_name='Geodata'), + ), + migrations.AlterField( + model_name='town', + name='imports', + field=models.ManyToManyField(blank=True, related_name='imported_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Created by imports'), + ), + migrations.AlterField( + model_name='town', + name='imports_updated', + field=models.ManyToManyField(blank=True, related_name='import_updated_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Updated by imports'), + ), + migrations.AlterField( + model_name='town', + name='main_geodata', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='main_related_items_%(app_label)s_%(class)s', to='ishtar_common.geovectordata', verbose_name='Main geodata'), + ), + ] diff --git a/ishtar_common/migrations/0267_gis_importchunk.py b/ishtar_common/migrations/0267_gis_importchunk.py deleted file mode 100644 index 220577221..000000000 --- a/ishtar_common/migrations/0267_gis_importchunk.py +++ /dev/null @@ -1,31 +0,0 @@ -# Generated by Django 4.2.19 on 2025-07-22 08:21 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('ishtar_common', '0266_userrequesttoken_usertoken'), - ] - - operations = [ - migrations.CreateModel( - name='ImportChunk', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('send_datetime', models.DateTimeField(verbose_name='Send date')), - ('chunk', models.TextField(verbose_name='Chunk')), - ('number', models.IntegerField(verbose_name='Number')), - ('total', models.IntegerField(verbose_name='Total')), - ('import_immediatly', models.BooleanField(default=False, verbose_name='Import Immediatly')), - ('importer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.importertype', verbose_name='Importer')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.ishtaruser', verbose_name='User')), - ], - options={ - 'verbose_name': 'Import - Chunk', - 'verbose_name_plural': 'Import - Chunks', - }, - ), - ] diff --git a/ishtar_common/migrations/0268_gis_import_key_init.py b/ishtar_common/migrations/0268_gis_import_key_init.py deleted file mode 100644 index 04909f3ee..000000000 --- a/ishtar_common/migrations/0268_gis_import_key_init.py +++ /dev/null @@ -1,24 +0,0 @@ -from django.db import migrations - -from ishtar_common.utils_migrations import update_import_key - - -def update_importkey(apps, __): - updated = 0 - GeoVectorData = apps.get_model("ishtar_common", "geovectordata") - for data in GeoVectorData.objects.all(): - updated += 1 if update_import_key(data) else 0 - if updated: - print() - print(f"* {updated} GeoVectorData import_key updated") - - -class Migration(migrations.Migration): - - dependencies = [ - ('ishtar_common', '0267_gis_importchunk'), - ] - - operations = [ - migrations.RunPython(update_importkey) - ] diff --git a/ishtar_common/migrations/0268_userrequesttoken_usertoken.py b/ishtar_common/migrations/0268_userrequesttoken_usertoken.py new file mode 100644 index 000000000..9c13acc64 --- /dev/null +++ b/ishtar_common/migrations/0268_userrequesttoken_usertoken.py @@ -0,0 +1,64 @@ +# Generated by Django 4.2.19 on 2025-05-09 08:25 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('auth', '0012_alter_user_first_name_max_length'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('ishtar_common', '0267_add_timezone_django_v4'), + ] + + operations = [ + migrations.CreateModel( + name='UserRequestToken', + fields=[ + ('created', models.DateTimeField(auto_now_add=True, verbose_name='Created')), + ('key', models.CharField(max_length=6, unique=True, verbose_name='Key')), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, related_name='user_request_token', serialize=False, to=settings.AUTH_USER_MODEL, verbose_name='User')), + ('access_type', models.CharField(choices=[('R', 'GIS - read'), ('W', 'GIS - read/write')], default='R', max_length=1, verbose_name='Access type')), + ('name', models.TextField(verbose_name='Name')), + ('limit_date', models.DateField(blank=True, null=True, verbose_name='Limit date')), + ], + options={ + 'verbose_name': 'API - GIS - Request token', + 'verbose_name_plural': 'API - GIS - Request tokens', + }, + ), + migrations.AlterModelOptions( + name='importertype', + options={'ordering': ('name',), 'permissions': (('view_gis_importer', 'Can export to QGIS'), ('view_own_gis_importer', 'Can export own to QGIS'), ('change_gis_importer', 'Can import from QGIS'), ('change_own_gis_importer', 'Can import own to QGIS')), 'verbose_name': 'Importer - Type', 'verbose_name_plural': 'Importer - Types'}, + ), + migrations.AddField( + model_name='ishtarsiteprofile', + name='gis_connector', + field=models.BooleanField(default=False, verbose_name='GIS connector'), + ), + migrations.AlterField( + model_name='importertype', + name='type', + field=models.CharField(choices=[('tab', 'Table'), ('gis', 'GIS'), ('qgs', 'QGIS')], default='tab', max_length=3, verbose_name='Type'), + ), + migrations.CreateModel( + name='UserToken', + fields=[ + ('key', models.CharField(max_length=40, primary_key=True, serialize=False, verbose_name='Key')), + ('name', models.TextField(verbose_name='Name')), + ('created', models.DateTimeField(auto_now_add=True, verbose_name='Created')), + ('access_type', models.CharField(choices=[('R', 'GIS - read'), ('W', 'GIS - read/write')], default='R', max_length=1, verbose_name='Access type')), + ('limit_date', models.DateField(blank=True, null=True, verbose_name='Limit date')), + ('last_ip', models.GenericIPAddressField(blank=True, null=True, verbose_name='Last IP')), + ('last_access', models.DateField(auto_now_add=True, verbose_name='Last access date')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='user_token', to=settings.AUTH_USER_MODEL, verbose_name='User')), + ], + options={ + 'verbose_name': 'API - GIS - Token', + 'verbose_name_plural': 'API - GIS - Tokens', + 'ordering': ('user', 'name', 'limit_date'), + }, + ), + ] diff --git a/ishtar_common/migrations/0269_gis_importchunk.py b/ishtar_common/migrations/0269_gis_importchunk.py new file mode 100644 index 000000000..995a8642d --- /dev/null +++ b/ishtar_common/migrations/0269_gis_importchunk.py @@ -0,0 +1,31 @@ +# Generated by Django 4.2.19 on 2025-07-22 08:21 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('ishtar_common', '0268_userrequesttoken_usertoken'), + ] + + operations = [ + migrations.CreateModel( + name='ImportChunk', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('send_datetime', models.DateTimeField(verbose_name='Send date')), + ('chunk', models.TextField(verbose_name='Chunk')), + ('number', models.IntegerField(verbose_name='Number')), + ('total', models.IntegerField(verbose_name='Total')), + ('import_immediatly', models.BooleanField(default=False, verbose_name='Import Immediatly')), + ('importer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.importertype', verbose_name='Importer')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.ishtaruser', verbose_name='User')), + ], + options={ + 'verbose_name': 'Import - Chunk', + 'verbose_name_plural': 'Import - Chunks', + }, + ), + ] diff --git a/ishtar_common/migrations/0269_import_import_immediatly.py b/ishtar_common/migrations/0269_import_import_immediatly.py deleted file mode 100644 index cb063cff1..000000000 --- a/ishtar_common/migrations/0269_import_import_immediatly.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.19 on 2025-08-05 09:33 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ishtar_common', '0268_gis_import_key_init'), - ] - - operations = [ - migrations.AddField( - model_name='import', - name='import_immediatly', - field=models.BooleanField(default=False, verbose_name='Import Immediatly'), - ), - ] diff --git a/ishtar_common/migrations/0270_gis_import_key_init.py b/ishtar_common/migrations/0270_gis_import_key_init.py new file mode 100644 index 000000000..ed3d8e568 --- /dev/null +++ b/ishtar_common/migrations/0270_gis_import_key_init.py @@ -0,0 +1,24 @@ +from django.db import migrations + +from ishtar_common.utils_migrations import update_import_key + + +def update_importkey(apps, __): + updated = 0 + GeoVectorData = apps.get_model("ishtar_common", "geovectordata") + for data in GeoVectorData.objects.all(): + updated += 1 if update_import_key(data) else 0 + if updated: + print() + print(f"* {updated} GeoVectorData import_key updated") + + +class Migration(migrations.Migration): + + dependencies = [ + ('ishtar_common', '0269_gis_importchunk'), + ] + + operations = [ + migrations.RunPython(update_importkey) + ] diff --git a/ishtar_common/migrations/0271_import_import_immediatly.py b/ishtar_common/migrations/0271_import_import_immediatly.py new file mode 100644 index 000000000..ff94a566b --- /dev/null +++ b/ishtar_common/migrations/0271_import_import_immediatly.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.19 on 2025-08-05 09:33 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ishtar_common', '0270_gis_import_key_init'), + ] + + operations = [ + migrations.AddField( + model_name='import', + name='import_immediatly', + field=models.BooleanField(default=False, verbose_name='Import Immediatly'), + ), + ] -- cgit v1.2.3