From 7918f0d513d674bcd16e0c8d6f490ec0810b7ab4 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Thu, 12 May 2016 07:19:57 +0200 Subject: [PATCH 1/3] Tentative fixes --- djangocms_blog/feeds.py | 22 +++++++++--- djangocms_blog/models.py | 2 +- .../djangocms_blog/post_instant_article.html | 35 +++++++------------ tests/test_views.py | 6 ++-- 4 files changed, 33 insertions(+), 32 deletions(-) diff --git a/djangocms_blog/feeds.py b/djangocms_blog/feeds.py index d0db90f..c55baf2 100644 --- a/djangocms_blog/feeds.py +++ b/djangocms_blog/feeds.py @@ -11,6 +11,7 @@ from django.utils.feedgenerator import Rss201rev2Feed from django.utils.html import strip_tags from django.utils.safestring import mark_safe from django.utils.six import BytesIO +from django.utils.text import normalize_newlines from django.utils.translation import get_language_from_request, ugettext as _ from lxml import etree @@ -87,6 +88,7 @@ class TagFeed(LatestEntriesFeed): class FBInstantFeed(Rss201rev2Feed): + date_format = '%Y-%m-%dT%H:%M:%S%z' def rss_attributes(self): return { @@ -104,7 +106,9 @@ class FBInstantFeed(Rss201rev2Feed): handler.addQuickElement('category', cat) if self.feed['feed_copyright'] is not None: handler.addQuickElement('copyright', self.feed['feed_copyright']) - handler.addQuickElement('lastBuildDate', self.latest_post_date().isoformat()) + handler.addQuickElement( + 'lastBuildDate', self.latest_post_date().strftime(self.date_format) + ) if self.feed['ttl'] is not None: handler.addQuickElement('ttl', self.feed['ttl']) @@ -112,12 +116,15 @@ class FBInstantFeed(Rss201rev2Feed): super(FBInstantFeed, self).add_item_elements(handler, item) if item['author']: handler.addQuickElement('author', item['author']) - if item['date_mod'] is not None: - handler.addQuickElement('pubDate', item['date'].isoformat()) if item['date_pub'] is not None: - handler.addQuickElement('modDate', item['date'].isoformat()) + handler.addQuickElement('pubDate', item['date_pub'].strftime(self.date_format)) + if item['date_mod'] is not None: + handler.addQuickElement('modDate', item['date_mod'].strftime(self.date_format)) + handler.startElement('description', {}) - handler._write(''.format(h.unescape(force_text(item['abstract'])))) + handler._write(''.format( + h.unescape(normalize_newlines(force_text(item['abstract'])).replace('\n', ' '))) + ) handler.endElement('description') handler.startElement('content:encoded', {}) handler._write(' - - {% block canonical_url %}{% endblock canonical_url %} - + + {% block canonical_url %}{% endblock canonical_url %} +

{{ post.title }}

- - - - - + +
{{ post.get_author_name }}
-
{{ post.main_image.default_alt_text|default:'' }} - {% if post.main_image.default_caption %} -
{{ post.main_image.default_caption }}
{% endif %} + {% if post.main_image.default_caption %}
{{ post.main_image.default_caption }}
{% endif %}
- -

- {{ post.abstract|striptags|safe }} -

- +

{{ post.abstract|striptags|safe }}

- - {% if post.app_config.use_placeholder %} -
{% render_placeholder post.content %}
- {% else %} -
{% render_model post "post_text" "post_text" %}
- {% endif %} - + {% if post.app_config.use_placeholder %} +
{% render_placeholder post.content %}
+ {% else %} +
{% render_model post "post_text" "post_text" %}
+ {% endif %}
diff --git a/tests/test_views.py b/tests/test_views.py index 320cb1e..2c28a47 100644 --- a/tests/test_views.py +++ b/tests/test_views.py @@ -17,7 +17,7 @@ from parler.tests.utils import override_parler_settings from parler.utils.conf import add_default_language_settings from parler.utils.context import smart_override, switch_language -from djangocms_blog.feeds import FBInstantArticles, LatestEntriesFeed, TagFeed +from djangocms_blog.feeds import FBInstantArticles, LatestEntriesFeed, TagFeed, FBInstantFeed from djangocms_blog.models import BLOG_CURRENT_NAMESPACE from djangocms_blog.settings import get_setting from djangocms_blog.sitemaps import BlogSitemap @@ -383,8 +383,8 @@ class ViewTest(BaseTest): xml = feed(request) self.assertContains(xml, '{0}'.format(posts[0].guid)) self.assertContains(xml, 'content:encoded') - self.assertContains(xml, 'class="op-published" datetime="{0}"'.format( - posts[0].date_published.isoformat() + self.assertContains(xml, 'class="op-modified" datetime="{0}"'.format( + posts[0].date_modified.strftime(FBInstantFeed.date_format) )) self.assertContains(xml, ''.format( posts[0].get_full_url() From 84cf78b6ed3b62adac755fcb0b26b8b773a6e6fc Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Thu, 26 May 2016 00:52:09 +0200 Subject: [PATCH 2/3] Use fixed timezone --- cms_helper.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cms_helper.py b/cms_helper.py index 564b22b..3567f55 100755 --- a/cms_helper.py +++ b/cms_helper.py @@ -88,6 +88,8 @@ HELPER_SETTINGS = dict( 'filer.thumbnail_processors.scale_and_crop_with_subject_location', 'easy_thumbnails.processors.filters', ), + USE_TZ=True, + TIME_ZONE='UTC', FILE_UPLOAD_TEMP_DIR=mkdtemp(), SITE_ID=1, HAYSTACK_CONNECTIONS={ From bba43335496179417a4df5e638e839acc5460580 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Thu, 26 May 2016 00:54:27 +0200 Subject: [PATCH 3/3] Code style --- tests/base.py | 2 -- tests/test_views.py | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/base.py b/tests/base.py index 6fee09c..d88ea7b 100644 --- a/tests/base.py +++ b/tests/base.py @@ -6,7 +6,6 @@ from copy import deepcopy from django.contrib.auth import get_user_model from django.contrib.sites.models import Site from django.core.cache import cache - from djangocms_helper.base_test import BaseTestCase from haystack import connections from haystack.constants import DEFAULT_ALIAS @@ -15,7 +14,6 @@ from parler.utils.context import smart_override from djangocms_blog.cms_appconfig import BlogConfig from djangocms_blog.models import BlogCategory, Post, ThumbnailOption - User = get_user_model() diff --git a/tests/test_views.py b/tests/test_views.py index 2c28a47..2c5d3d4 100644 --- a/tests/test_views.py +++ b/tests/test_views.py @@ -17,7 +17,7 @@ from parler.tests.utils import override_parler_settings from parler.utils.conf import add_default_language_settings from parler.utils.context import smart_override, switch_language -from djangocms_blog.feeds import FBInstantArticles, LatestEntriesFeed, TagFeed, FBInstantFeed +from djangocms_blog.feeds import FBInstantArticles, FBInstantFeed, LatestEntriesFeed, TagFeed from djangocms_blog.models import BLOG_CURRENT_NAMESPACE from djangocms_blog.settings import get_setting from djangocms_blog.sitemaps import BlogSitemap