- import feedparser
- import datetime
-
- feed = feedparser.parse(feed_url)
- posts = []
- for i in range(posts_to_show):
- pub_date = feed['entries'][i].updated_parsed
- published = datetime.date(pub_date[0], pub_date[1], pub_date[2] )
- posts.append({
- 'title': feed['entries'][i].title,
- 'summary': feed['entries'][i].summary,
- 'link': feed['entries'][i].link,
- 'date': published,
- })
- return {'posts': posts}
+ try:
+ feed = feedparser.parse(str(feed_url))
+ posts = []
+ for i in range(posts_to_show):
+ pub_date = feed['entries'][i].updated_parsed
+ published = datetime.date(pub_date[0], pub_date[1], pub_date[2] )
+ posts.append({
+ 'title': feed['entries'][i].title,
+ 'summary': feed['entries'][i].summary,
+ 'link': feed['entries'][i].link,
+ 'date': published,
+ })
+ return {'posts': posts}
+ except:
+ return {'posts': []}
+
+
+@register.inclusion_tag('catalogue/tag_list.html')
+def tag_list(tags, choices=None):
+ if choices is None:
+ choices = []
+ if len(tags) == 1:
+ one_tag = tags[0]
+ return locals()
+
+@register.inclusion_tag('catalogue/inline_tag_list.html')
+def inline_tag_list(tags, choices=None):
+ if choices is None:
+ choices = []
+ if len(tags) == 1:
+ one_tag = tags[0]
+ return locals()
+
+
+@register.inclusion_tag('catalogue/book_info.html')
+def book_info(book):
+ return locals()
+
+
+@register.inclusion_tag('catalogue/book_wide.html', takes_context=True)
+def book_wide(context, book):
+ formats = {}
+ # files generated during publication
+ for ebook_format in book.ebook_formats:
+ if book.has_media(ebook_format):
+ formats[ebook_format] = book.get_media(ebook_format)
+
+ return {
+ 'related': book.related_info(),
+ 'book': book,
+ 'formats': formats,
+ 'extra_info': book.get_extra_info_value(),
+ 'request': context.get('request'),
+ 'fragment': book.choose_fragment(),
+ }
+
+
+@register.inclusion_tag('catalogue/book_short.html', takes_context=True)
+def book_short(context, book):
+ return {
+ 'related': book.related_info(),
+ 'book': book,
+ 'request': context.get('request'),
+ }
+
+
+@register.inclusion_tag('catalogue/book_mini_box.html')
+def book_mini(book):
+ return {
+ 'related': book.related_info(),
+ 'book': book,
+ }
+
+
+@register.inclusion_tag('catalogue/work-list.html', takes_context=True)
+def work_list(context, object_list):
+ request = context.get('request')
+ if object_list:
+ object_type = type(object_list[0]).__name__
+ return locals()
+
+
+@register.inclusion_tag('catalogue/chosen_fragment.html')
+def promo_fragment(arg=None):
+ if arg is None:
+ fragments = Fragment.objects.all().order_by('?')
+ fragment = fragments[0] if fragments.exists() else None
+ elif isinstance(arg, Book):
+ fragment = arg.choose_fragment()
+ else:
+ fragments = Fragment.tagged.with_all(arg).order_by('?')
+ fragment = fragments[0] if fragments.exists() else None
+
+ return {
+ 'fragment': fragment,
+ }
+
+
+@register.filter
+@stringfilter
+def removewholetags(value, tags):
+ """Removes a space separated list of [X]HTML tags from the output.
+
+ FIXME: It makes the assumption the removed tags aren't nested.