X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/ae60b2a3949e96357477cc04f90fd0873cee8a92..05b7014d1d710937c6a4b5cdccdb4890f377818d:/src/opds/views.py diff --git a/src/opds/views.py b/src/opds/views.py index 001b69d7c..c71822fa8 100644 --- a/src/opds/views.py +++ b/src/opds/views.py @@ -1,13 +1,13 @@ -# -*- coding: utf-8 -*- # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # +from functools import reduce import os.path -from urlparse import urljoin +from urllib.parse import urljoin from django.contrib.syndication.views import Feed -from django.core.urlresolvers import reverse from django.shortcuts import get_object_or_404 +from django.urls import reverse from django.utils.feedgenerator import Atom1Feed from django.conf import settings from django.http import Http404 @@ -78,14 +78,14 @@ class OPDSFeed(Atom1Feed): _book_parent_img = lazy(lambda: full_url(os.path.join(settings.STATIC_URL, "img/book-parent.png")), str)() try: - _book_parent_img_size = unicode(os.path.getsize(os.path.join(settings.STATIC_ROOT, "img/book-parent.png"))) - except IOError: + _book_parent_img_size = str(os.path.getsize(os.path.join(settings.STATIC_ROOT, "img/book-parent.png"))) + except OSError: _book_parent_img_size = '' _book_img = lazy(lambda: full_url(os.path.join(settings.STATIC_URL, "img/book.png")), str)() try: - _book_img_size = unicode(os.path.getsize(os.path.join(settings.STATIC_ROOT, "img/book.png"))) - except IOError: + _book_img_size = str(os.path.getsize(os.path.join(settings.STATIC_ROOT, "img/book.png"))) + except OSError: _book_img_size = '' def add_root_elements(self, handler): @@ -104,7 +104,7 @@ class OPDSFeed(Atom1Feed): handler.addQuickElement(u"title", item['title']) # add a OPDS Navigation link if there's no enclosure - if item['enclosure'] is None: + if not item.get('enclosures') is None: handler.addQuickElement( u"link", u"", {u"href": item['link'], u"rel": u"subsection", u"type": u"application/atom+xml"}) # add a "green book" icon @@ -144,14 +144,14 @@ class OPDSFeed(Atom1Feed): handler.addQuickElement(u"summary", item['description'], {u"type": u"text"}) # Enclosure as OPDS Acquisition Link - if item['enclosure'] is not None: + for enc in item.get('enclosures', []): handler.addQuickElement( u"link", '', { u"rel": u"http://opds-spec.org/acquisition", - u"href": item['enclosure'].url, - u"length": item['enclosure'].length, - u"type": item['enclosure'].mime_type, + u"href": enc.url, + u"length": enc.length, + u"type": enc.mime_type, }) # add a "red book" icon handler.addQuickElement( @@ -190,18 +190,18 @@ class AcquisitionFeed(Feed): def item_author_name(self, book): try: - return book.tags.filter(category='author')[0].name - except KeyError: + return book.authors().first().name + except AttributeError: return u'' def item_author_link(self, book): try: - return book.tags.filter(category='author')[0].get_absolute_url() - except KeyError: + return book.authors().first().get_absolute_url() + except AttributeError: return u'' def item_enclosure_url(self, book): - return full_url(book.epub_file.url) if book.epub_file else None + return full_url(book.epub_url()) if book.epub_file else None def item_enclosure_length(self, book): return book.epub_file.size if book.epub_file else None