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, '