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)
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)
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)
def get_extra_anime(request, query): entries = lookup_mal_api(query) retrieve_anime(entries) return get_works(request, 'anime', query)