From 97bc74a18444b86f03938eb0d627e4997819d1d5 Mon Sep 17 00:00:00 2001 From: shravani-whoi Date: Fri, 28 Apr 2023 14:45:27 -0400 Subject: [PATCH 1/2] remove duplicate dataset entry from bins --- .../removeduplicatedatasetrelationships.py | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 ifcbdb/dashboard/management/commands/removeduplicatedatasetrelationships.py diff --git a/ifcbdb/dashboard/management/commands/removeduplicatedatasetrelationships.py b/ifcbdb/dashboard/management/commands/removeduplicatedatasetrelationships.py new file mode 100644 index 00000000..79622626 --- /dev/null +++ b/ifcbdb/dashboard/management/commands/removeduplicatedatasetrelationships.py @@ -0,0 +1,40 @@ +from collections import deque +from dashboard.models import Bin, bin_query, Dataset +from django.core.management.base import BaseCommand, CommandError + + +def get_bins_in_datasets(dataset1, dataset2): + qs1 = Bin.objects.filter(datasets__name=dataset1) + qs2 = qs1.filter(datasets__name=dataset2) + print("Number of bins associated with both given datasets: " + str(qs2.count())) + return qs2 + +def verify_dataset_exists(dataset_name): + if Dataset.objects.filter(name=dataset_name).count() < 1: + raise CommandError(print('specified {} does not exist'.format(dataset_name))) + + +class Command(BaseCommand): + + def add_arguments(self, parser): + parser.add_argument('-d1', '--dataset1', type=str, help='Name of dataset1') + parser.add_argument('-d2', '--dataset2', type=str, help='Name of dataset2') + + # assume directory is flat + def handle(self, *args, **options): + dataset1 = options.get('dataset1') + dataset2 = options.get('dataset2') + + # Verify dataset names provided exist + if dataset1 == None or dataset2 == None: + raise CommandError("Please provide two dataset names.") + verify_dataset_exists(dataset1) + verify_dataset_exists(dataset2) + + bins = get_bins_in_datasets(dataset1, dataset2) + rm_dataset = Dataset.objects.get(name=dataset1) + print("Removing {} from the bins.".format(dataset1)) + for bin in bins: + bin.datasets.remove(rm_dataset) + + print("Done!") From 8bda9b7a785a8ba05bcadfc2bda56939d60fc62e Mon Sep 17 00:00:00 2001 From: shravani-whoi Date: Mon, 8 May 2023 09:20:29 -0400 Subject: [PATCH 2/2] modify user input --- .../removeduplicatedatasetrelationships.py | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/ifcbdb/dashboard/management/commands/removeduplicatedatasetrelationships.py b/ifcbdb/dashboard/management/commands/removeduplicatedatasetrelationships.py index 79622626..38403a33 100644 --- a/ifcbdb/dashboard/management/commands/removeduplicatedatasetrelationships.py +++ b/ifcbdb/dashboard/management/commands/removeduplicatedatasetrelationships.py @@ -17,23 +17,26 @@ def verify_dataset_exists(dataset_name): class Command(BaseCommand): def add_arguments(self, parser): - parser.add_argument('-d1', '--dataset1', type=str, help='Name of dataset1') - parser.add_argument('-d2', '--dataset2', type=str, help='Name of dataset2') + parser.add_argument('-r', '--remove', type=str, help='Name of dataset to remove from bins') + parser.add_argument('-k', '--keep', type=str, help='Name of dataset to keep in bins') + # assume directory is flat def handle(self, *args, **options): - dataset1 = options.get('dataset1') - dataset2 = options.get('dataset2') + dataset_to_remove = options.get('remove') + dataset_to_keep = options.get('keep') # Verify dataset names provided exist - if dataset1 == None or dataset2 == None: + if dataset_to_remove == None or dataset_to_keep == None: raise CommandError("Please provide two dataset names.") - verify_dataset_exists(dataset1) - verify_dataset_exists(dataset2) - - bins = get_bins_in_datasets(dataset1, dataset2) - rm_dataset = Dataset.objects.get(name=dataset1) - print("Removing {} from the bins.".format(dataset1)) + if dataset_to_remove == dataset_to_keep: + raise CommandError("Please provide two different dataset names.") + verify_dataset_exists(dataset_to_remove) + verify_dataset_exists(dataset_to_keep) + + bins = get_bins_in_datasets(dataset_to_keep, dataset_to_remove) + rm_dataset = Dataset.objects.get(name=dataset_to_remove) + print("Removing {} from the bins.".format(dataset_to_remove)) for bin in bins: bin.datasets.remove(rm_dataset)