X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/2856ae6ae36213ca7997366e0c7790e3c855e62f..dbb1ae2cf25105f7a3831961b08386a1326baef8:/apps/api/handlers.py diff --git a/apps/api/handlers.py b/apps/api/handlers.py index b436024b1..e1792af13 100644 --- a/apps/api/handlers.py +++ b/apps/api/handlers.py @@ -1,15 +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 datetime import datetime, timedelta import json -from urlparse import urljoin from django.conf import settings from django.contrib.sites.models import Site from django.core.cache import get_cache from django.core.urlresolvers import reverse +from django.utils.functional import lazy +from django.utils.timezone import utc from piston.handler import AnonymousBaseHandler, BaseHandler from piston.utils import rc from sorl.thumbnail import default @@ -21,10 +22,12 @@ from catalogue.models import Book, Tag, BookMedia, Fragment, Collection from catalogue.utils import related_tag_name from picture.models import Picture from picture.forms import PictureImportForm +from wolnelektury.utils import tz from stats.utils import piwik_track -API_BASE = WL_BASE = MEDIA_BASE = 'http://' + Site.objects.get_current().domain +API_BASE = WL_BASE = MEDIA_BASE = lazy( + lambda: u'http://' + Site.objects.get_current().domain, unicode)() category_singular = { @@ -35,7 +38,7 @@ category_singular = { 'themes': 'theme', 'books': 'book', } -category_plural={} +category_plural = {} for k, v in category_singular.items(): category_plural[v] = k @@ -100,7 +103,6 @@ class BookMediaHandler(BaseHandler): @classmethod def director(cls, media): return media.extra_info.get('director_name', '') - class BookDetails(object): @@ -196,7 +198,7 @@ class AnonymousBooksHandler(AnonymousBaseHandler, BookDetails): books = Book.tagged.with_all(tags) else: books = Book.objects.all() - + if top_level: books = books.filter(parent=None) if audiobooks: @@ -293,7 +295,6 @@ class CollectionDetailHandler(BaseHandler, CollectionDetails): @piwik_track def read(self, request, slug): - print slug """ Returns details of a collection, identified by slug. """ try: return Collection.objects.get(slug=slug) @@ -382,7 +383,7 @@ class FragmentDetails(object): def href(cls, fragment): """ Returns URI in the API for the fragment. """ - return API_BASE + reverse("api_fragment", + return API_BASE + reverse("api_fragment", args=[fragment.book.slug, fragment.anchor]) @classmethod @@ -466,7 +467,7 @@ class CatalogueHandler(BaseHandler): """ # set to five minutes ago, to avoid concurrency issues if t is None: - t = datetime.now() - timedelta(seconds=settings.API_WAIT) + t = datetime.utcnow().replace(tzinfo=utc) - timedelta(seconds=settings.API_WAIT) # set to whole second in case DB supports something smaller return t.replace(microsecond=0) @@ -537,7 +538,7 @@ class CatalogueHandler(BaseHandler): @classmethod def book_changes(cls, request=None, since=0, until=None, fields=None): - since = datetime.fromtimestamp(int(since)) + since = datetime.fromtimestamp(int(since), tz) until = cls.until(until) changes = { @@ -559,7 +560,7 @@ class CatalogueHandler(BaseHandler): if updated: changes['updated'] = updated - for book in Deleted.objects.filter(content_type=Book, + for book in Deleted.objects.filter(content_type=Book, deleted_at__gte=since, deleted_at__lt=until, created_at__lt=since).iterator(): @@ -603,7 +604,7 @@ class CatalogueHandler(BaseHandler): @classmethod def tag_changes(cls, request=None, since=0, until=None, fields=None, categories=None): - since = datetime.fromtimestamp(int(since)) + since = datetime.fromtimestamp(int(since), tz) until = cls.until(until) changes = { @@ -624,7 +625,7 @@ class CatalogueHandler(BaseHandler): updated = [] deleted = [] - for tag in Tag.objects.filter(category__in=categories, + for tag in Tag.objects.filter(category__in=categories, changed_at__gte=since, changed_at__lt=until).iterator(): # only serve non-empty tags @@ -637,7 +638,7 @@ class CatalogueHandler(BaseHandler): changes['updated'] = updated for tag in Deleted.objects.filter(category__in=categories, - content_type=Tag, + content_type=Tag, deleted_at__gte=since, deleted_at__lt=until, created_at__lt=since).iterator():