misc: add a rss/atom feed cell (#6842)

This commit is contained in:
Frédéric Péters 2015-08-24 14:32:06 +02:00
parent 2c1208c8f5
commit be513d2166
5 changed files with 41 additions and 0 deletions

View File

@ -14,11 +14,15 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import feedparser
import hashlib
import json
import requests
from django.conf import settings
from django.contrib.auth.models import Group
from django.contrib.contenttypes.models import ContentType
from django.core.cache import cache
from django.core.exceptions import ObjectDoesNotExist
from django.core import serializers
from django.db import models
@ -34,6 +38,7 @@ import cmsplugin_blurp.utils
from .library import register_cell_class, get_cell_classes, get_cell_class
from combo import utils
from combo.utils import NothingInCacheException
def element_is_visible(element, user=None):
@ -469,3 +474,27 @@ class LinkCell(CellBase):
if self.anchor:
context['url'] += '#' + self.anchor
return super(LinkCell, self).render(context)
@register_cell_class
class FeedCell(CellBase):
url = models.URLField(_('URL'), blank=True)
template_name = 'combo/feed-cell.html'
class Meta:
verbose_name = _('RSS/Atom Feed')
def render(self, context):
cache_key = hashlib.md5(self.url).hexdigest()
feed_content = cache.get(cache_key)
if not context.get('ajax') and feed_content is None:
raise NothingInCacheException()
if not feed_content:
feed_response = requests.get(self.url)
if feed_response.status_code == 200:
feed_content = feed_response.content
cache.set(cache_key, feed_content, 600)
if feed_content:
context['feed'] = feedparser.parse(feed_content)
return super(FeedCell, self).render(context)

View File

@ -0,0 +1,9 @@
{% load i18n %}
{% for entry in feed.entries %}
{% if entry.link %}
<h3><a href="{{entry.link}}">{{entry.title}}</a></h3>
{% else %}
<h3>{{entry.title}}</h3>
{% endif %}
{% if entry.description %}<p>{{entry.description}}</p>{% endif %}
{% endfor %}

1
debian/control vendored
View File

@ -12,6 +12,7 @@ Depends: ${misc:Depends}, ${python:Depends},
python-django (>= 1.7),
python-gadjo,
python-requests,
python-feedparser,
python-django-cmsplugin-blurp
Recommends: python-django-mellon
Description: Portal Management System (Python module)

View File

@ -4,3 +4,4 @@ django-ckeditor
django-cmsplugin-blurp
django-jsonfield
requests
feedparser

View File

@ -106,6 +106,7 @@ setup(
'django-ckeditor',
'gadjo',
'django-cmsplugin-blurp',
'feedparser'
'django-jsonfield',
],
zip_safe=False,