from django.db import transaction
|
from tasks.models import Annotation
|
|
|
def bulk_update_label(old_label, new_label, organization, project=None):
|
annotations = Annotation.objects.filter(project__organization=organization)
|
if project is not None:
|
annotations = annotations.filter(project=project)
|
|
updated_count = 0
|
with transaction.atomic():
|
update_annotations = []
|
for annotation in annotations.only('result').all():
|
result = annotation.result
|
|
updated_result = []
|
need_update = False
|
for region in result:
|
result_type = region.get('type')
|
if result_type is not None:
|
label = region['value'].get(result_type)
|
if label is not None and label == old_label:
|
region['value'][result_type] = new_label
|
updated_count += 1
|
need_update = True
|
updated_result.append(region)
|
|
if need_update:
|
annotation.result = updated_result
|
update_annotations.append(annotation)
|
|
if update_annotations:
|
Annotation.objects.bulk_update(update_annotations, ['result'])
|
return updated_count
|