Пример #1
0
 def handle(self, *args, **options):
     conflicts = []
     entries = {
         'poster': Work.objects.filter(category__slug='anime').values_list('poster').annotate(Count('poster')).filter(poster__count__gte=2),
         'title': Work.objects.filter(category__slug='anime').values_list('title').annotate(Count('title')).filter(title__count__gte=2)
     }
     for category in entries:
         print(len(entries[category]), category, 'conflicts')
         for entry, _ in entries[category]:
             ids = []
             priority = 0
             for anime in Work.objects.filter(category__slug='anime', **{category: entry}):
                 ids.append(anime.id)
                 priority += anime.rating_set.count()
             heappush(conflicts, (-priority, tuple(sorted(ids))))
     while conflicts:
         _, ids = heappop(conflicts)
         total_nb_ratings = 0
         sources = set(Work.objects.get(id=anime_id).source for anime_id in ids)
         nb_sources = len(sources)
         id_of_poster = {}
         for anime_id in ids:
             anime = Work.objects.get(id=anime_id)
             nb_ratings = len(anime.rating_set.all())
             """try:
                 urlopen(anime.poster)"""
             print('%d : %s (%s)' % (anime_id, anime.title, anime.poster))
             print('%d l\'ont noté' % nb_ratings)
             total_nb_ratings += nb_ratings
             id_of_poster[anime.poster] = anime_id
         if nb_sources > 1:
             print('Bizarre, plusieurs sources :', sources)
             rename_tasks = []
             for entry in lookup_mal_api(Work.objects.get(id=ids[0]).title):
                 poster = entry['image']
                 if poster in id_of_poster:
                     rename_tasks.append((id_of_poster[poster], entry['title']))
                 else:
                     print(entry['title'])
             for anime_id, proposed_title in rename_tasks:
                 print(anime_id, proposed_title)
             for anime_id, proposed_title in rename_tasks:
                 answer = input('=> Rename ID %d into %s? [y/n] ' % (anime_id, proposed_title))
                 if answer == 'y':
                     Work.objects.filter(id=anime_id).update(title=proposed_title)
                 elif answer != 'n':
                     Work.objects.filter(id=anime_id).update(title=answer)
                 else:
                     print('Okay, next.')
         if nb_sources == 1 and nb_ratings == 0:
             print('MERGE automatique')
             merge_anime(ids)
         elif nb_sources == 1:
             answer = input('=> Merge into %d? [y/n] ' % min(ids))
             if answer == 'y':
                 merge_anime(ids)
Пример #2
0
 def handle(self, *args, **options):
     conflicts = []
     entries = {
         'poster': Work.objects.filter(category__slug='anime').values_list('ext_poster').annotate(Count('ext_poster')).filter(ext_poster__count__gte=2),
         'title': Work.objects.filter(category__slug='anime').values_list('title').annotate(Count('title')).filter(title__count__gte=2)
     }
     for category in entries:
         print(len(entries[category]), category, 'conflicts')
         for entry, _ in entries[category]:
             ids = []
             priority = 0
             for anime in Work.objects.filter(category__slug='anime', **{category: entry}):
                 ids.append(anime.id)
                 priority += anime.rating_set.count()
             heappush(conflicts, (-priority, tuple(sorted(ids))))
     while conflicts:
         _, ids = heappop(conflicts)
         total_nb_ratings = 0
         sources = set(Work.objects.get(id=anime_id).source for anime_id in ids)
         nb_sources = len(sources)
         id_of_poster = {}
         nb_ratings = 0
         for anime_id in ids:
             anime = Work.objects.get(id=anime_id)
             nb_ratings = len(anime.rating_set.all())
             print('%d : %s (%s)' % (anime_id, anime.title, anime.ext_poster))
             print('%d l\'ont noté' % nb_ratings)
             total_nb_ratings += nb_ratings
             id_of_poster[anime.ext_poster] = anime_id
         if nb_sources > 1:
             print('Bizarre, plusieurs sources :', sources)
             rename_tasks = []
             for entry in lookup_mal_api(Work.objects.get(id=ids[0]).title):
                 poster = entry['image']
                 if poster in id_of_poster:
                     rename_tasks.append((id_of_poster[poster], entry['title']))
                 else:
                     print(entry['title'])
             for anime_id, proposed_title in rename_tasks:
                 print(anime_id, proposed_title)
             for anime_id, proposed_title in rename_tasks:
                 answer = input('=> Rename ID %d into %s? [y/n] ' % (anime_id, proposed_title))
                 if answer == 'y':
                     Work.objects.filter(id=anime_id).update(title=proposed_title)
                 elif answer != 'n':
                     Work.objects.filter(id=anime_id).update(title=answer)
                 else:
                     print('Okay, next.')
         if nb_sources == 1 and nb_ratings == 0:
             print('MERGE automatique')
             merge_anime(ids)
         elif nb_sources == 1:
             answer = input('=> Merge into %d? [y/n] ' % min(ids))
             if answer == 'y':
                 merge_anime(ids)
Пример #3
0
 def handle(self, *args, **options):
     conflicts = set()
     for entry in Anime.objects.values('poster').annotate(Count('poster')).filter(poster__count__gte=2):  # Same poster
         ids = []
         for anime in Anime.objects.filter(poster=entry['poster']):
             ids.append(anime.id)
         conflicts.add(tuple(sorted(ids)))
     for entry in Anime.objects.values('title').annotate(Count('title')).filter(title__count__gte=2):  # Same title
         ids = []
         for anime in Anime.objects.filter(title=entry['title']):
             ids.append(anime.id)
         conflicts.add(tuple(sorted(ids)))
     for ids in conflicts:
         total_nb_ratings = 0
         sources = set(Anime.objects.get(id=anime_id).source for anime_id in ids)
         nb_sources = len(sources)
         id_of_poster = {}
         for anime_id in ids:
             anime = Anime.objects.get(id=anime_id)
             nb_ratings = len(anime.rating_set.all())
             print('%d : %s (%s)' % (anime_id, anime.title, anime.poster))
             print('%d l\'ont noté' % nb_ratings)
             total_nb_ratings += nb_ratings
             id_of_poster[anime.poster] = anime_id
         if nb_sources > 1:
             print('Bizarre, plusieurs sources :', sources)
             rename_tasks = []
             for entry in lookup_mal_api(Anime.objects.get(id=ids[0]).title):
                 poster = entry['image']
                 if poster in id_of_poster:
                     rename_tasks.append((id_of_poster[poster], entry['title']))
                 else:
                     print(entry['title'])
             for anime_id, proposed_title in rename_tasks:
                 print(anime_id, proposed_title)
             for anime_id, proposed_title in rename_tasks:
                 answer = input('=> Rename ID %d into %s? [y/n] ' % (anime_id, proposed_title))
                 if answer == 'y':
                     Anime.objects.filter(id=anime_id).update(title=proposed_title)
                 elif answer != 'n':
                     Anime.objects.filter(id=anime_id).update(title=answer)
                 else:
                     print('Okay, next.')
         if nb_sources == 1 and nb_ratings == 0:
             print('MERGE automatique')
             merge_anime(ids)
         elif nb_sources == 1:
             answer = input('=> Merge into %d? [y/n] ' % min(ids))
             if answer == 'y':
                 merge_anime(ids)
Пример #4
0
def get_extra_anime(request, query):
    entries = lookup_mal_api(query)
    retrieve_anime(entries)
    return get_works(request, 'anime', query)
Пример #5
0
def get_extra_anime(request, query):
    entries = lookup_mal_api(query)
    retrieve_anime(entries)
    return get_works(request, 'anime', query)