diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2025-10-29 13:07:28 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2025-10-29 17:15:38 +0100 | 
| commit | 3294e42914759e9279d725c35a6ffdbcec45050e (patch) | |
| tree | 6912489bb321bab15c39e6cdf6aacd67ae46e039 /ishtar_common/utils_migrations.py | |
| parent | aa54dab9fdff35273dc1b64a772bef4ffb195250 (diff) | |
| download | Ishtar-3294e42914759e9279d725c35a6ffdbcec45050e.tar.bz2 Ishtar-3294e42914759e9279d725c35a6ffdbcec45050e.zip | |
🚧 datings refactoringdevelop-5.0
Diffstat (limited to 'ishtar_common/utils_migrations.py')
| -rw-r--r-- | ishtar_common/utils_migrations.py | 39 | 
1 files changed, 39 insertions, 0 deletions
| diff --git a/ishtar_common/utils_migrations.py b/ishtar_common/utils_migrations.py index 6d75ff885..04a6d9827 100644 --- a/ishtar_common/utils_migrations.py +++ b/ishtar_common/utils_migrations.py @@ -10,6 +10,9 @@ from django.core.management import call_command  from django.db import connection  from django.utils.translation import gettext_lazy +from ishtar_common.utils import BColors + +  HOMEPAGE_TITLE = gettext_lazy("Welcome in Ishtar, open source software for management and inventory of archaeological data") @@ -233,3 +236,39 @@ def update_import_key(geovectordata):  # 0267_gis_import_key      GeoVectorData.objects.filter(pk=geovectordata.id).update(          import_key=import_key)      return True + + +def print_progress(idx, total): +    sys.stdout.write(f"\r  {BColors.OKBLUE}→ Migration {idx+1}/{total}{BColors.ENDC}") + + +def migrate_dating_periods(apps, model_dating, model, dating_attr): +    if not hasattr(model, "datings_old"):  # migration is not relevant anymore +        return +    q = model.objects.filter(datings_old__pk__isnull=False) +    if not q.count(): +        return +    period_attr = ["start_date", "end_date", "dating_type", "quality", "precise_dating"] +    full_period_attr = period_attr + ["period"] +    sys.stdout.write("\n") +    total = q.count() +    for idx, item in enumerate(q.all()): +        print_progress(idx, total) +        for idx_dating, dating in enumerate(item.datings_old.all()): +            if not dating.period: +                # should not occur as for old dating period was required +                continue +            item.periods.add(dating.period) +            has_more = False +            for attr in period_attr: +                if hasattr(dating, attr) and getattr(dating, attr): +                    has_more = True +                    break +            if not has_more: +                # do not recreate a new dating, it is not relevant anymore +                continue +            new_attrs = dict((k, getattr(dating, k)) for k in full_period_attr) +            new_attrs[dating_attr] = item +            new_attrs["external_id"] = f"{item.external_id}-{idx_dating + 1}" +            model_dating.objects.create(**new_attrs) + | 
