X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/53e53be2fd5c6ffd0b96928735944aa75b7b2f2d..75957f735219259d3b4bc361f80ccd3d7b92a0e9:/src/opds/views.py diff --git a/src/opds/views.py b/src/opds/views.py index a96bfb341..c71822fa8 100644 --- a/src/opds/views.py +++ b/src/opds/views.py @@ -1,16 +1,16 @@ -# -*- 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, HttpResponse +from django.http import Http404 from django.contrib.sites.models import Site from django.utils.functional import lazy @@ -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( @@ -201,7 +201,7 @@ class AcquisitionFeed(Feed): 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 @@ -361,9 +361,6 @@ class SearchFeed(AcquisitionFeed): ATOM_PLACEHOLDER = re.compile(r"^{(atom|opds):\w+}$") - def __call__(self, *args, **kwargs): - return HttpResponse('Search is temporarily disabled', status=503) - def get_object(self, request): """ For OPDS 1.1 We should handle a query for search terms