From 73cabc20500753b51c38edabef1314f3fa515f6c Mon Sep 17 00:00:00 2001 From: Kyle Mahan Date: Tue, 27 Jan 2015 22:14:30 -0800 Subject: [PATCH] fix up the subscribe/update stuff --- celeryconfig.py | 2 +- woodwind/static/style.scss | 7 +++ woodwind/tasks.py | 30 ++++++++----- woodwind/templates/base.jinja2 | 21 ++++++--- woodwind/templates/feed.jinja2 | 64 ++++++++++++++++++--------- woodwind/templates/feeds.jinja2 | 26 +++++++---- woodwind/templates/login.jinja2 | 10 ++--- woodwind/templates/select-feed.jinja2 | 2 +- woodwind/templates/subscribe.jinja2 | 3 -- woodwind/views.py | 27 +++++------ 10 files changed, 118 insertions(+), 74 deletions(-) diff --git a/celeryconfig.py b/celeryconfig.py index 043dc22..849dd0d 100644 --- a/celeryconfig.py +++ b/celeryconfig.py @@ -8,7 +8,7 @@ CELERY_ACCEPT_CONTENT = ['json'] CELERYBEAT_SCHEDULE = { 'tick-every-5-minutes': { 'task': 'woodwind.tasks.tick', - 'schedule': datetime.timedelta(seconds=30), + 'schedule': datetime.timedelta(minutes=5), } } # recommended to disable if not using -- introduces a lot of complexity diff --git a/woodwind/static/style.scss b/woodwind/static/style.scss index 734ea8a..dc1f90c 100644 --- a/woodwind/static/style.scss +++ b/woodwind/static/style.scss @@ -44,6 +44,13 @@ article { float: left; border-radius: 4px; } + color: $armadillo; + border-bottom: 1px solid $armadillo; + } + + h1 { + font-size: 1.2em; + font-weight: bold; } } diff --git a/woodwind/tasks.py b/woodwind/tasks.py index 9876326..289736e 100644 --- a/woodwind/tasks.py +++ b/woodwind/tasks.py @@ -60,7 +60,7 @@ def process_feed_for_new_entries(feed): def process_xml_feed_for_new_entries(feed): - logger.debug('updating feed: %s', feed) + logger.debug('fetching xml feed: %s', feed) now = datetime.datetime.utcnow() parsed = feedparser.parse(feed.feed) @@ -71,11 +71,16 @@ def process_xml_feed_for_new_entries(feed): default_author_photo = feed_props.get('logo') all_uids = [e.id or e.link for e in parsed.entries] - preexisting = set(row[0] for row in session.query(Entry.uid) - .filter(Entry.uid.in_(all_uids)) - .filter(Entry.feed == feed)) + if all_uids: + preexisting = set(row[0] for row in session.query(Entry.uid) + .filter(Entry.uid.in_(all_uids)) + .filter(Entry.feed == feed)) + else: + preexisting = set() + logger.debug('found {} entries'.format(len(parsed.entries))) for p_entry in parsed.entries: + logger.debug('processing entry {}'.format(p_entry)) permalink = p_entry.link uid = p_entry.id or permalink @@ -84,10 +89,10 @@ def process_xml_feed_for_new_entries(feed): updated = datetime.datetime.fromtimestamp( time.mktime(p_entry.updated_parsed) - ) if p_entry.updated_parsed else None + ) if 'updated_parsed' in p_entry else None published = datetime.datetime.fromtimestamp( time.mktime(p_entry.published_parsed) - ) if p_entry.published_parsed else None + ) if 'published_parsed' in p_entry else now title = p_entry.get('title') @@ -125,7 +130,7 @@ def process_xml_feed_for_new_entries(feed): def process_html_feed_for_new_entries(feed): - logger.debug('updating feed: %s', feed) + logger.debug('fetching html feed: %s', feed) now = datetime.datetime.utcnow() parsed = mf2util.interpret_feed( @@ -133,9 +138,12 @@ def process_html_feed_for_new_entries(feed): hfeed = parsed.get('entries', []) all_uids = [e.get('uid') or e.get('url') for e in hfeed] - preexisting = set(row[0] for row in session.query(Entry.uid) - .filter(Entry.uid.in_(all_uids)) - .filter(Entry.feed == feed)) + if all_uids: + preexisting = set(row[0] for row in session.query(Entry.uid) + .filter(Entry.uid.in_(all_uids)) + .filter(Entry.feed == feed)) + else: + preexisting = set() # logger.debug('preexisting urls: %r', preexisting) @@ -151,7 +159,7 @@ def process_html_feed_for_new_entries(feed): # uid = hentry.get('uid') or uid entry = Entry( feed=feed, - published=hentry.get('published'), + published=hentry.get('published') or now, updated=hentry.get('updated'), uid=uid, permalink=permalink, diff --git a/woodwind/templates/base.jinja2 b/woodwind/templates/base.jinja2 index 9c563b4..3d19d6d 100644 --- a/woodwind/templates/base.jinja2 +++ b/woodwind/templates/base.jinja2 @@ -7,12 +7,19 @@ {% block head %}{% endblock %} - {% if current_user.is_authenticated() %} -
{{ current_user.domain }}
- {% endif %} - {% for message in get_flashed_messages() %} -
{{ message | safe }}
- {% endfor %} - {% block body %}{% endblock %} +
+ {% if current_user.is_authenticated() %} +
{{ current_user.domain }}
+ {% else %} +
+ + +
+ {% endif %} + {% for message in get_flashed_messages() %} +
{{ message | safe }}
+ {% endfor %} + {% block body %}{% endblock %} +
diff --git a/woodwind/templates/feed.jinja2 b/woodwind/templates/feed.jinja2 index 29e145e..02dc5ea 100644 --- a/woodwind/templates/feed.jinja2 +++ b/woodwind/templates/feed.jinja2 @@ -1,31 +1,51 @@ {% extends "base.jinja2" %} {% block body %} -
- {% for entry in entries %} -
-
- {% if entry.author_photo %} - - {% endif %} - {% if entry.author_name %} - {{ entry.author_name }} - - {% endif %} - {{ entry.feed.name }} -
- {% if entry.title %} -

{{ entry.title }}

+
+ + +
+ + {% for entry in entries %} +
+
+ {% if entry.author_photo %} + {% endif %} - {% if entry.content %} + {% if entry.author_name %} + {{ entry.author_name }} - + {% endif %} + {{ entry.feed.name }} +
+ {% if entry.title %} +

{{ entry.title }}

+ {% endif %} + {% if entry.content %}
{{ entry.content_cleaned() }}
- {% endif %} -
- {{ entry.published }} -
-
- {% endfor %} -
+ {% endif %} +
+ {{ entry.published }} +
+
+ + + + +
+ + + + + {% endfor %} {% endblock body %} diff --git a/woodwind/templates/feeds.jinja2 b/woodwind/templates/feeds.jinja2 index d1f0ff9..b190446 100644 --- a/woodwind/templates/feeds.jinja2 +++ b/woodwind/templates/feeds.jinja2 @@ -1,18 +1,28 @@ {% extends "base.jinja2" %} {% block body %} -
- {% for feed in feeds %} + {% for feed in feeds %} -
+
+ - - + + +
+ + +
+
+ + +
+
- -{% endfor %} -
+ {% endfor %} {% endblock body %} diff --git a/woodwind/templates/login.jinja2 b/woodwind/templates/login.jinja2 index 9d83e59..4e20abb 100644 --- a/woodwind/templates/login.jinja2 +++ b/woodwind/templates/login.jinja2 @@ -1,9 +1,7 @@ {% extends "base.jinja2" %} {% block body %} -
-
- - -
-
+
+ + +
{% endblock %} diff --git a/woodwind/templates/select-feed.jinja2 b/woodwind/templates/select-feed.jinja2 index 2a784ce..5ad3ceb 100644 --- a/woodwind/templates/select-feed.jinja2 +++ b/woodwind/templates/select-feed.jinja2 @@ -1,7 +1,7 @@ {% extends "base.jinja2" %} {% block body %}
-
+ {% for feed in feeds %} diff --git a/woodwind/templates/subscribe.jinja2 b/woodwind/templates/subscribe.jinja2 index 7e2dd2d..7cb1f80 100644 --- a/woodwind/templates/subscribe.jinja2 +++ b/woodwind/templates/subscribe.jinja2 @@ -1,10 +1,7 @@ {% extends "base.jinja2" %} {% block body %} -
- -
{% endblock body %} diff --git a/woodwind/views.py b/woodwind/views.py index 58fc5c0..de47d2a 100644 --- a/woodwind/views.py +++ b/woodwind/views.py @@ -15,9 +15,6 @@ ui = flask.Blueprint('ui', __name__) @ui.route('/') def index(): - import os - print('cwd', os.getcwd(), 'db', db) - if flask_login.current_user.is_authenticated(): feed_ids = [f.id for f in flask_login.current_user.feeds] entries = Entry.query.filter( @@ -52,11 +49,12 @@ def feeds(): def update_feed(): feed_id = flask.request.args.get('id') tasks.update_feed.delay(feed_id) + return flask.redirect(flask.url_for('.feeds')) -@ui.route('/delete_feed') +@ui.route('/delete_feed', methods=['POST']) def delete_feed(): - feed_id = flask.request.args.get('id') + feed_id = flask.request.form.get('id') feed = Feed.query.get(feed_id) db.session.delete(feed) db.session.commit() @@ -83,9 +81,6 @@ def edit_feed(): @ui.route('/login') def login(): - if True: - flask_login.login_user(User.query.all()[0], remember=True) - me = flask.request.args.get('me') if me: return micropub.authorize( @@ -151,27 +146,29 @@ def subscribe(): return flask.render_template('subscribe.jinja2') -def add_subscription(origin, feed, type): +def add_subscription(origin, feed_url, type): feed = None if type == 'html': - parsed = mf2util.interpret_feed(mf2py.parse(url=feed), feed) + flask.current_app.logger.debug('mf2py parsing %s', feed_url) + parsed = mf2util.interpret_feed(mf2py.parse(url=feed_url), feed_url) name = parsed.get('name') if not name or len(name) > 140: p = urllib.parse.urlparse(origin) name = p.netloc + p.path feed = Feed(user=flask_login.current_user, name=name, - origin=origin, feed=feed, type=type) + origin=origin, feed=feed_url, type=type) elif type == 'xml': - parsed = feedparser.parse(feed) + flask.current_app.logger.debug('feedparser parsing %s', feed_url) + parsed = feedparser.parse(feed_url) feed = Feed(user=flask_login.current_user, - name=parsed.feed.title, origin=origin, feed=feed, - type=type) + name=parsed.feed and parsed.feed.title, + origin=origin, feed=feed_url, type=type) if feed: db.session.add(feed) db.session.commit() # go ahead and update the fed tasks.update_feed.delay(feed.id) - return feed + return feed def find_possible_feeds(origin):