From eb0b6eaa875a258df6ded7a01fdd3c58b09b735e Mon Sep 17 00:00:00 2001 From: shravani-whoi Date: Wed, 8 Jun 2022 13:34:49 -0400 Subject: [PATCH 1/4] management command to change lables --- core/management/commands/changelabels.py | 39 ++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 core/management/commands/changelabels.py diff --git a/core/management/commands/changelabels.py b/core/management/commands/changelabels.py new file mode 100644 index 0000000..dee55b5 --- /dev/null +++ b/core/management/commands/changelabels.py @@ -0,0 +1,39 @@ +import csv +import os +from django.core.management.base import BaseCommand, CommandError + +from core.models import Label + + +class Command(BaseCommand): + help = 'change labels' + + def add_arguments(self, parser): + parser.add_argument('-m','--mapping', type=str, help='Path to csv of mapping of old and new label names') + + def handle(self, *args, **options): + # handle arguments + mapping_csv = options['mapping'] + # validate arguments + if not mapping_csv: + raise CommandError('Input mapping file not specified') + if not os.path.exists(mapping_csv): + raise CommandError('specified file does not exist') + with open(mapping_csv,'r') as csvin: + with open('/rois/output.csv', 'w') as csvout: + writer = csv.writer(csvout, lineterminator='\n') + reader = csv.reader(csvin) + + all = [] + row = next(reader) + row.append('Status') + all.append(row) + + for row in reader: + res = 0 + res = Label.objects.filter(name=row[0]).update(name=row[1]) + row.append(res) + all.append(row) + + writer.writerows(all) + print("Status of update in /rois/output.csv.") From 0d165ee5ddfe385c5102efaa3b79e6c111704a9a Mon Sep 17 00:00:00 2001 From: shravani-whoi Date: Wed, 8 Jun 2022 14:08:05 -0400 Subject: [PATCH 2/4] change column name --- core/management/commands/changelabels.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/management/commands/changelabels.py b/core/management/commands/changelabels.py index dee55b5..1870407 100644 --- a/core/management/commands/changelabels.py +++ b/core/management/commands/changelabels.py @@ -26,7 +26,7 @@ def handle(self, *args, **options): all = [] row = next(reader) - row.append('Status') + row.append('UpdatedRowCount') all.append(row) for row in reader: From d312bf81d2e4b613a6c1efffd134c257ea0d3d84 Mon Sep 17 00:00:00 2001 From: shravani-whoi Date: Mon, 13 Jun 2022 09:02:05 -0400 Subject: [PATCH 3/4] only stdout results, display count of ROIs affected for each change --- core/management/commands/changelabels.py | 25 ++++++++++++------------ 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/core/management/commands/changelabels.py b/core/management/commands/changelabels.py index 1870407..bd3349f 100644 --- a/core/management/commands/changelabels.py +++ b/core/management/commands/changelabels.py @@ -1,9 +1,10 @@ import csv import os -from django.core.management.base import BaseCommand, CommandError - -from core.models import Label +from django.core.management.base import BaseCommand, CommandError +from core.models import Annotation, ROI, Label +from django.db import connection +from django.db.models import Count class Command(BaseCommand): help = 'change labels' @@ -19,21 +20,19 @@ def handle(self, *args, **options): raise CommandError('Input mapping file not specified') if not os.path.exists(mapping_csv): raise CommandError('specified file does not exist') + with open(mapping_csv,'r') as csvin: - with open('/rois/output.csv', 'w') as csvout: - writer = csv.writer(csvout, lineterminator='\n') reader = csv.reader(csvin) - - all = [] row = next(reader) - row.append('UpdatedRowCount') - all.append(row) for row in reader: res = 0 res = Label.objects.filter(name=row[0]).update(name=row[1]) - row.append(res) - all.append(row) + if res == 0: + print("Error: Source Label, " + row[0] + " not found!") + continue + # Number of ROIs affected with this particular Label change + i = Annotation.objects.filter(label__name__contains=row[1]).count() + print(row[0] + " -> " + row[1] + ", affected ROIs: " + str(i)) + print("Done.") - writer.writerows(all) - print("Status of update in /rois/output.csv.") From 80b9f9ac97be52e1faba781eec2bf7eb6d11e256 Mon Sep 17 00:00:00 2001 From: shravani-whoi Date: Mon, 13 Jun 2022 13:08:31 -0400 Subject: [PATCH 4/4] additional query --- core/management/commands/changelabels.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/management/commands/changelabels.py b/core/management/commands/changelabels.py index bd3349f..d88965d 100644 --- a/core/management/commands/changelabels.py +++ b/core/management/commands/changelabels.py @@ -21,6 +21,8 @@ def handle(self, *args, **options): if not os.path.exists(mapping_csv): raise CommandError('specified file does not exist') + # Array of label names + labels = [] with open(mapping_csv,'r') as csvin: reader = csv.reader(csvin) row = next(reader) @@ -34,5 +36,9 @@ def handle(self, *args, **options): # Number of ROIs affected with this particular Label change i = Annotation.objects.filter(label__name__contains=row[1]).count() print(row[0] + " -> " + row[1] + ", affected ROIs: " + str(i)) + labels.append(row[1]) + + roi_count = ROI.objects.filter(annotations__label__name__in=labels).count() + print("Number of ROIs affected by all label changes: " + str(roi_count)) print("Done.")