diff --git a/arkindex/dataimport/migrations/0040_use_worker_configuration.py b/arkindex/dataimport/migrations/0040_use_worker_configuration.py index ceb7dee0df69ed6435ec2f427712d43e73fc4d15..750cbfdd7802d745d0160f2e062c50ecd7e972c2 100644 --- a/arkindex/dataimport/migrations/0040_use_worker_configuration.py +++ b/arkindex/dataimport/migrations/0040_use_worker_configuration.py @@ -1,5 +1,7 @@ # Generated by Django 3.2.5 on 2021-11-04 08:14 +from collections import defaultdict + from django.db import migrations from arkindex.dataimport.utils import hash_object @@ -9,16 +11,21 @@ def use_worker_configuration(apps, schema_editor): WorkerRun = apps.get_model('dataimport', 'WorkerRun') WorkerConfiguration = apps.get_model('dataimport', 'WorkerConfiguration') - for index, worker_run in enumerate(WorkerRun.objects.filter(configuration__isnull=True).exclude(old_configuration={})): + indexes = defaultdict(int) + + for worker_run in WorkerRun.objects.filter(configuration__isnull=True) \ + .exclude(old_configuration={}) \ + .select_related('version__worker'): worker = worker_run.version.worker - worker_configuration, _ = WorkerConfiguration.objects.get_or_create( + worker_configuration, created = WorkerConfiguration.objects.get_or_create( worker=worker, - configuration=worker_run.old_configuration, + configuration_hash=hash_object(worker_run.old_configuration), defaults={ - 'name': f'config n°{index} - {worker.name}', - 'configuration_hash': hash_object(worker_run.old_configuration) + 'name': f'config for {worker.name} n°{indexes[worker.id]+1}', + 'configuration': worker_run.old_configuration } ) + indexes[worker.id] += created worker_run.configuration = worker_configuration worker_run.save() @@ -26,7 +33,7 @@ def use_worker_configuration(apps, schema_editor): def use_old_configuration(apps, schema_editor): WorkerRun = apps.get_model('dataimport', 'WorkerRun') - worker_runs = WorkerRun.objects.filter(configuration__isnull=False) + worker_runs = WorkerRun.objects.filter(configuration__isnull=False).select_related('configuration') for worker_run in worker_runs: worker_run.old_configuration = worker_run.configuration.configuration WorkerRun.objects.bulk_update(worker_runs, ['old_configuration'])