def get(self, request, id, slug): context = {} manga = self.get_manga_for_view(id) manga_page_list = list(manga.mangapage_set.order_by('page')) payload = self.get_payload(manga_page_list) if manga.tank_id: manga_list = Manga.published.filter(tank_id=manga.tank_id) context['chapter_list'] = natural_sort(manga_list, 'tank_chapter') if manga.collection_id: manga_list = Manga.published.filter(collection_id=manga.collection_id) context['collection_list'] = natural_sort(manga_list, 'collection_part') try: archive = MangaArchive.objects.get(manga=manga) except MangaArchive.DoesNotExist: archive = MangaArchiveGenerator.generate(manga) download_available = (archive != None) and os.path.exists(archive.file.path) if not download_available: MangaArchiveGenerator.generate(manga) context.update({ 'archive': archive, 'download_available': download_available, 'manga': manga, 'page_count': len(manga_page_list), 'payload': payload, }) return self.render_to_response(context)
def test_natural_sort(self): class TestObj: def __init__(self, value): self.value = value expected_list = [ TestObj('5'), TestObj('007'), TestObj('08'), TestObj('9'), TestObj('10'), TestObj('011'), TestObj('12'), ] for test_list in permutations(expected_list): self.assertEqual(natural_sort(test_list, 'value'), expected_list)