def handle()

in gnm_deliverables/management/commands/remove_duplicates.py [0:0]


    def handle(self, *args, **options):
        pprint(options)

        paths_with_issue = DeliverableAsset.objects.values('absolute_path').annotate(Count('id')).order_by().filter(id__count__gt=1)

        if len(paths_with_issue) > 0:
            for path in paths_with_issue:
                print ("\n Duplicates found with path: {0}".format(path['absolute_path']))
                assets_with_issue_weighted = []
                assets_with_issue = DeliverableAsset.objects.filter(absolute_path=path['absolute_path'])
                for asset in assets_with_issue:
                    print("\n Id.: {0}".format(asset.id))
                    print("Name: {0}".format(asset.filename))
                    print("Size: {0}".format(asset.size))
                    print("Version: {0}".format(asset.version))
                    assets_with_issue_weighted.append([asset.id, asset.size, asset.version, asset.online_item_id, DELIVERABLE_ASSET_STATUSES_DICT.get(asset.status), 0])
                if path['absolute_path'] is not None:
                    if options["path"] in path['absolute_path']:
                        # Set score depending on status
                        for asset in assets_with_issue_weighted:
                            if asset[4] == "Ingested":
                                asset[5] = 50
                            if asset[4] == "Ingest failed":
                                asset[5] = -20
                            if asset[4] == "Transcode Failed":
                                asset[5] = -20
                        # Add 2 to the score of the item with the first id.
                        id_numbers = []
                        for asset in assets_with_issue_weighted:
                            id_numbers.append(asset[0])
                        index_of_first_id = id_numbers.index(min(id_numbers))
                        assets_with_issue_weighted[index_of_first_id][5] = assets_with_issue_weighted[index_of_first_id][5] + 2
                        # Remove 5 from the score of items with no file size
                        for asset in assets_with_issue_weighted:
                            if asset[1] == 0 or asset[1] == -1:
                                asset[5] = asset[5] - 5
                        # Add 40 to the score of items with an online item id.
                        for asset in assets_with_issue_weighted:
                            if asset[3] is not None:
                                asset[5] = asset[5] + 40
                        # Sort the list by score
                        assets_with_issue_weighted.sort(key=lambda x: x[5], reverse=True)
                        pprint(assets_with_issue_weighted)
                        first_item = True
                        for asset in assets_with_issue_weighted:
                            if first_item:
                                first_item = False
                                continue
                            if options['delete']:
                                print("Attempting to delete item: {0}".format(asset[0]))
                                DeliverableAsset.objects.filter(id=asset[0]).delete()
                            else:
                                print("Would have deleted item: {0}".format(asset[0]))
                    else:
                        print("Skipping removal as path not valid.")
                else:
                    print("Blank path so skipping removal.")
        else:
            print("No duplicates.")