Added logic to find galleries based on user input

Cleaned up comment in find duplicate
This commit is contained in:
aeltheos 2021-11-14 00:17:02 +01:00
parent 02426942d0
commit dbb71d088a

View file

@ -1,5 +1,5 @@
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand, CommandError
from photologue_custom.models import Gallery
import argparse import argparse
import hashlib import hashlib
@ -8,20 +8,34 @@ class Command(BaseCommand):
help = 'List all duplicate for chosen galleries' help = 'List all duplicate for chosen galleries'
def add_arguments(self, parser): def add_arguments(self, parser):
parser.add_arguments( parser.add_argument(
'--slugs', nargs='+', help='Try to find duplicate in the selected galleries', default=[]) '--slugs', nargs='+', help='Try to find duplicate in the selected galleries', default=[])
parser.add_arguments('-a', '--all', action='store_true', parser.add_argument('-a', '--all', action='store_true',
help='Try to find duplicate in all galleries') help='Try to find duplicate in all galleries, overide any slugs given')
parser.add_arguments('-d', '--delete', action='store_true') parser.add_argument('-d', '--delete', action='store_true')
def handle(self, *args, **options): def handle(self, *args, **options):
pass # Collect all required galleries
if options['all']:
galleries = Gallery.objects.all()
else:
for slug in options['slugs']:
for gallery in Gallery.objects.all():
if gallery.slug == slug:
galleries += [gallery]
break
else:
raise CommandError(
'Slug {} does not correspond to a gallery in the database.'.format(slug))
print('error')
#
def find_duplicate(gallery): def find_duplicate(gallery):
# Dict of all already checked photos # Dict of all already checked photos
non_duplicate = {} non_duplicate = {}
# Dict of all found duplicate {original.slug:[duplicates]} # Dict of all found duplicate {h0 : (original:[duplicates])}
duplicate = {} duplicate = {}
for photo in gallery.photos.all(): for photo in gallery.photos.all():
@ -34,14 +48,14 @@ def find_duplicate(gallery):
if non_duplicate[h0].slug in duplicate: if non_duplicate[h0].slug in duplicate:
duplicate[h0][1] += [photo] duplicate[h0][1] += [photo]
else: else:
duplicate[h0] = [non_duplicate[h0], [photo]] duplicate[h0] = (non_duplicate[h0], [photo])
else: else:
# Photo is a duplicate and photo slug is shorter # Photo is a duplicate and photo slug is shorter
if non_duplicate[h0].slug in duplicate: if non_duplicate[h0].slug in duplicate:
duplicate[h0][0] = photo duplicate[h0][0] = photo
duplicate[h0][1] += [non_duplicate[h0]] duplicate[h0][1] += [non_duplicate[h0]]
else: else:
duplicate[h0] = [photo, [non_duplicate[h0]]] duplicate[h0] = (photo, [non_duplicate[h0]])
non_duplicate[h0] += [photo] non_duplicate[h0] += [photo]
# Return values because hash aren't need anymore # Return values because hash aren't need anymore
return duplicate.values() return duplicate.values()