diff --git a/bulbs/liveblog/tasks.py b/bulbs/liveblog/tasks.py index 77995e20..15a36742 100644 --- a/bulbs/liveblog/tasks.py +++ b/bulbs/liveblog/tasks.py @@ -12,5 +12,6 @@ def firebase_update_timestamp(liveblog_id): url = endpoint.format(liveblog_id=liveblog_id) resp = requests.put(url, json={ 'updatedAt': timezone.now().isoformat(), + }) resp.raise_for_status() diff --git a/bulbs/liveblog/templates/liveblog/bulbs_liveblog.html b/bulbs/liveblog/templates/liveblog/bulbs_liveblog.html index ff3d4b30..6d51a7d1 100644 --- a/bulbs/liveblog/templates/liveblog/bulbs_liveblog.html +++ b/bulbs/liveblog/templates/liveblog/bulbs_liveblog.html @@ -6,7 +6,6 @@ firebase-url="{{ FIREBASE_URL }}" firebase-api-key="{{ FIREBASE_API_KEY }}" firebase-path="{{ FIREBASE_PUBLIC_ROOT }}/articles/{{ content.id }}/liveblog" - updated-at="{% now 'c' %}" liveblog-id="{{ content.id }}" liveblog-url="{% url 'liveblog-new-entries' slug=content.slug pk=content.pk %}" > diff --git a/bulbs/liveblog/templates/liveblog/entries.html b/bulbs/liveblog/templates/liveblog/entries.html index 3152cba4..73a29b91 100644 --- a/bulbs/liveblog/templates/liveblog/entries.html +++ b/bulbs/liveblog/templates/liveblog/entries.html @@ -1,12 +1,13 @@ {% load ads betty liveblog_tags %} {% for entry in entries %} -
@@ -96,6 +97,6 @@

{% liveblog_entry_sharetools_partial %} -

+ {% endfor %} diff --git a/bulbs/liveblog/views.py b/bulbs/liveblog/views.py index 2a97615a..f03f8600 100644 --- a/bulbs/liveblog/views.py +++ b/bulbs/liveblog/views.py @@ -1,23 +1,26 @@ from django.conf import settings from django.db.models.loading import get_model -from django.shortcuts import get_object_or_404 -from django.utils import dateparse +from django.utils import timezone from django.views.decorators.cache import cache_control -from django.views.generic import TemplateView + +from bulbs.content.views import BaseContentDetailView LiveBlogModel = get_model(settings.BULBS_LIVEBLOG_MODEL) -class LiveblogNewEntriesView(TemplateView): +class LiveblogNewEntriesView(BaseContentDetailView): + model = LiveBlogModel template_name = 'liveblog/new_entries.html' + redirect_correct_path = False - def get_context_data(self, slug, pk): + def get_context_data(self, object): context = {} - liveblog = get_object_or_404(LiveBlogModel, pk=pk) - when = dateparse.parse_datetime(self.request.GET['new_as_of']) - if not when: - raise ValueError('param new_as_of must be an ISO formatted timestamp') - context['entries'] = liveblog.entries.filter(published__gte=when) + if 'entry_ids' not in self.request.GET: + raise ValueError('param "entry_ids" MUST be specified') + parsed_entry_ids = [x.strip() for x in self.request.GET['entry_ids'].split(',')] + context['entries'] = self.object.entries.filter( + pk__in=parsed_entry_ids, + published__lte=timezone.now()) return context liveblog_new_entries = cache_control(max_age=600)(LiveblogNewEntriesView.as_view()) diff --git a/example/testcontent/models.py b/example/testcontent/models.py index 0c083925..7a3cb953 100644 --- a/example/testcontent/models.py +++ b/example/testcontent/models.py @@ -110,6 +110,9 @@ def get_absolute_url(self): class TestLiveBlog(Content, AbstractLiveBlog): """Example LiveBlog implementation""" + def get_absolute_url(self): + return '/liveblog/{}-{}'.format(self.slug, self.pk) + class Mapping(Content.Mapping): class Meta: # Exclude until actually needed, to avoid dealing with custom mappings diff --git a/tests/liveblog/test_liveblog_views.py b/tests/liveblog/test_liveblog_views.py index a724f589..42a5ab80 100644 --- a/tests/liveblog/test_liveblog_views.py +++ b/tests/liveblog/test_liveblog_views.py @@ -21,13 +21,12 @@ def setUp(self): liveblog=self.liveblog, published=datetime.now()) - def test_requires_is_new_as_of_param(self): + def test_requires_entry_ids_param(self): view = LiveblogNewEntriesView.as_view() with self.assertRaises(ValueError): view( - RequestFactory().get( - '/liveblog/this-cool-liveblog-1234/new-entries?new_as_of=not-iso-format'.format( - datetime.now().isoformat())), + RequestFactory().get('/liveblog/this-cool-liveblog-{}/new-entries'.format( + self.liveblog.pk)), slug='this-cool-live-blog', pk=self.liveblog.pk) @@ -35,34 +34,43 @@ def test_raises_404_if_liveblog_does_not_exist(self): view = LiveblogNewEntriesView.as_view() with self.assertRaises(Http404): view( - RequestFactory().get( - '/liveblog/this-cool-liveblog-1234/new-entries?new_as_of={}'.format( - datetime.now().isoformat())), + RequestFactory().get('/liveblog/this-cool-liveblog-1234/new-entries'), slug='this-cool-live-blog', pk=1234) def test_renders_new_entries(self): - self.entry2 = LiveBlogEntry.objects.create( + entry2 = LiveBlogEntry.objects.create( liveblog=self.liveblog, - published=datetime.now() + timedelta(days=1)) - self.entry3 = LiveBlogEntry.objects.create( + published=datetime.now() - timedelta(days=1)) + entry3 = LiveBlogEntry.objects.create( liveblog=self.liveblog, published=datetime.now() - timedelta(days=1)) view = LiveblogNewEntriesView.as_view() - response = view(RequestFactory().get( - '/liveblog/this-cool-liveblog-1234/new-entries?new_as_of={}'.format( - datetime.now().isoformat())), - slug='this-cool-live-blog', - pk=self.liveblog.pk) - self.assertContains(response, '