From 7a1bc11004bd0df9fef240cd1c5e4d3a6584fb07 Mon Sep 17 00:00:00 2001 From: Michiel Scholten Date: Tue, 28 Jul 2020 14:52:44 +0200 Subject: [PATCH] Replaced deprecated AtomFeed by feedgen; some dep updates --- digimarks.py | 38 +++++++++++++++++++++++++------------- requirements-dev.txt | 23 +++++++++++++---------- requirements.in | 6 ++++++ requirements.txt | 18 +++++++++++------- 4 files changed, 55 insertions(+), 30 deletions(-) diff --git a/digimarks.py b/digimarks.py index 9b516a8..3f9a79f 100644 --- a/digimarks.py +++ b/digimarks.py @@ -10,10 +10,11 @@ import sys import bs4 import requests -from flask import (Flask, abort, jsonify, redirect, render_template, request, - url_for) +from dateutil import tz +from feedgen.feed import FeedGenerator +from flask import (Flask, abort, jsonify, make_response, redirect, + render_template, request, url_for) from peewee import * # noqa -from werkzeug.contrib.atom import AtomFeed try: # Python 3 @@ -960,23 +961,34 @@ def publictag_feed(tagkey): Bookmark.tags.contains(this_tag.tag), Bookmark.status == Bookmark.VISIBLE ) - feed = AtomFeed(this_tag.tag, feed_url=request.url, url=make_external(url_for('publictag_page', tagkey=tagkey))) + + feed = FeedGenerator() + feed.title(this_tag.tag) + feed.id(request.url) + feed.link(href=request.url, rel='self') + feed.link(href=make_external(url_for('publictag_page', tagkey=tagkey))) + for bookmark in bookmarks: + entry = feed.add_entry() + updated_date = bookmark.modified_date if not bookmark.modified_date: updated_date = bookmark.created_date bookmarktitle = '{} (no title)'.format(bookmark.url) if bookmark.title: bookmarktitle = bookmark.title - feed.add( - bookmarktitle, - content_type='html', - author='digimarks', - url=bookmark.url, - updated=updated_date, - published=bookmark.created_date - ) - return feed.get_response() + + entry.id(bookmark.url) + entry.title(bookmarktitle) + entry.link(href=bookmark.url) + entry.author(name='digimarks') + entry.pubdate(bookmark.created_date.replace(tzinfo=tz.tzlocal())) + entry.published(bookmark.created_date.replace(tzinfo=tz.tzlocal())) + entry.updated(updated_date.replace(tzinfo=tz.tzlocal())) + + response = make_response(feed.atom_str(pretty=True)) + response.headers.set('Content-Type', 'application/atom+xml') + return response except PublicTag.DoesNotExist: abort(404) diff --git a/requirements-dev.txt b/requirements-dev.txt index e2cfdea..f5a76c8 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -4,26 +4,29 @@ # # pip-compile requirements-dev.in # -astroid==2.4.1 # via pylint -beautifulsoup4==4.9.0 # via bs4 +astroid==2.4.2 # via pylint +beautifulsoup4==4.9.1 # via bs4 bs4==0.0.1 # via -r requirements.in -certifi==2020.4.5.1 # via requests +certifi==2020.6.20 # via requests chardet==3.0.4 # via requests click==7.1.2 # via flask +feedgen==0.9.0 # via -r requirements.in flask==1.1.2 # via -r requirements.in -idna==2.9 # via requests +idna==2.10 # via requests isort==4.3.21 # via pylint itsdangerous==1.1.0 # via flask jinja2==2.11.2 # via flask lazy-object-proxy==1.4.3 # via astroid +lxml==4.5.2 # via feedgen markupsafe==1.1.1 # via jinja2 mccabe==0.6.1 # via pylint peewee==3.13.3 # via -r requirements.in -pylint==2.5.2 # via -r requirements-dev.in -requests==2.23.0 # via -r requirements.in -six==1.14.0 # via astroid -soupsieve==2.0 # via beautifulsoup4 -toml==0.10.0 # via pylint -urllib3==1.25.9 # via requests +pylint==2.5.3 # via -r requirements-dev.in +python-dateutil==2.8.1 # via feedgen +requests==2.24.0 # via -r requirements.in +six==1.15.0 # via astroid, python-dateutil +soupsieve==2.0.1 # via beautifulsoup4 +toml==0.10.1 # via pylint +urllib3==1.25.10 # via requests werkzeug==1.0.1 # via flask wrapt==1.12.1 # via astroid diff --git a/requirements.in b/requirements.in index 509e468..1b379b0 100644 --- a/requirements.in +++ b/requirements.in @@ -1,4 +1,10 @@ +# Core application flask peewee + +# Fetch title etc from links bs4 requests + +# Generate (atom) feeds for tags and such +feedgen diff --git a/requirements.txt b/requirements.txt index 52f3c81..9fff9c0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,18 +4,22 @@ # # pip-compile requirements.in # -beautifulsoup4==4.9.0 # via bs4 +beautifulsoup4==4.9.1 # via bs4 bs4==0.0.1 # via -r requirements.in -certifi==2020.4.5.1 # via requests +certifi==2020.6.20 # via requests chardet==3.0.4 # via requests click==7.1.2 # via flask +feedgen==0.9.0 # via -r requirements.in flask==1.1.2 # via -r requirements.in -idna==2.9 # via requests +idna==2.10 # via requests itsdangerous==1.1.0 # via flask jinja2==2.11.2 # via flask +lxml==4.5.2 # via feedgen markupsafe==1.1.1 # via jinja2 peewee==3.13.3 # via -r requirements.in -requests==2.23.0 # via -r requirements.in -soupsieve==2.0 # via beautifulsoup4 -urllib3==1.25.9 # via requests -werkzeug==0.16.1 # via flask +python-dateutil==2.8.1 # via feedgen +requests==2.24.0 # via -r requirements.in +six==1.15.0 # via python-dateutil +soupsieve==2.0.1 # via beautifulsoup4 +urllib3==1.25.10 # via requests +werkzeug==1.0.1 # via flask