summaryrefslogtreecommitdiff
path: root/ishtar_common/utils_migrations.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/utils_migrations.py')
-rw-r--r--ishtar_common/utils_migrations.py39
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)
+