fix up the subscribe/update stuff

This commit is contained in:
Kyle Mahan 2015-01-27 22:14:30 -08:00
parent 8a45968175
commit 73cabc2050
10 changed files with 118 additions and 74 deletions

View file

@ -8,7 +8,7 @@ CELERY_ACCEPT_CONTENT = ['json']
CELERYBEAT_SCHEDULE = { CELERYBEAT_SCHEDULE = {
'tick-every-5-minutes': { 'tick-every-5-minutes': {
'task': 'woodwind.tasks.tick', '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 # recommended to disable if not using -- introduces a lot of complexity

View file

@ -44,6 +44,13 @@ article {
float: left; float: left;
border-radius: 4px; border-radius: 4px;
} }
color: $armadillo;
border-bottom: 1px solid $armadillo;
}
h1 {
font-size: 1.2em;
font-weight: bold;
} }
} }

View file

@ -60,7 +60,7 @@ def process_feed_for_new_entries(feed):
def process_xml_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() now = datetime.datetime.utcnow()
parsed = feedparser.parse(feed.feed) parsed = feedparser.parse(feed.feed)
@ -71,11 +71,16 @@ def process_xml_feed_for_new_entries(feed):
default_author_photo = feed_props.get('logo') default_author_photo = feed_props.get('logo')
all_uids = [e.id or e.link for e in parsed.entries] all_uids = [e.id or e.link for e in parsed.entries]
if all_uids:
preexisting = set(row[0] for row in session.query(Entry.uid) preexisting = set(row[0] for row in session.query(Entry.uid)
.filter(Entry.uid.in_(all_uids)) .filter(Entry.uid.in_(all_uids))
.filter(Entry.feed == feed)) .filter(Entry.feed == feed))
else:
preexisting = set()
logger.debug('found {} entries'.format(len(parsed.entries)))
for p_entry in parsed.entries: for p_entry in parsed.entries:
logger.debug('processing entry {}'.format(p_entry))
permalink = p_entry.link permalink = p_entry.link
uid = p_entry.id or permalink uid = p_entry.id or permalink
@ -84,10 +89,10 @@ def process_xml_feed_for_new_entries(feed):
updated = datetime.datetime.fromtimestamp( updated = datetime.datetime.fromtimestamp(
time.mktime(p_entry.updated_parsed) 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( published = datetime.datetime.fromtimestamp(
time.mktime(p_entry.published_parsed) 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') 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): 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() now = datetime.datetime.utcnow()
parsed = mf2util.interpret_feed( parsed = mf2util.interpret_feed(
@ -133,9 +138,12 @@ def process_html_feed_for_new_entries(feed):
hfeed = parsed.get('entries', []) hfeed = parsed.get('entries', [])
all_uids = [e.get('uid') or e.get('url') for e in hfeed] all_uids = [e.get('uid') or e.get('url') for e in hfeed]
if all_uids:
preexisting = set(row[0] for row in session.query(Entry.uid) preexisting = set(row[0] for row in session.query(Entry.uid)
.filter(Entry.uid.in_(all_uids)) .filter(Entry.uid.in_(all_uids))
.filter(Entry.feed == feed)) .filter(Entry.feed == feed))
else:
preexisting = set()
# logger.debug('preexisting urls: %r', preexisting) # logger.debug('preexisting urls: %r', preexisting)
@ -151,7 +159,7 @@ def process_html_feed_for_new_entries(feed):
# uid = hentry.get('uid') or uid # uid = hentry.get('uid') or uid
entry = Entry( entry = Entry(
feed=feed, feed=feed,
published=hentry.get('published'), published=hentry.get('published') or now,
updated=hentry.get('updated'), updated=hentry.get('updated'),
uid=uid, uid=uid,
permalink=permalink, permalink=permalink,

View file

@ -7,12 +7,19 @@
{% block head %}{% endblock %} {% block head %}{% endblock %}
</head> </head>
<body> <body>
<main>
{% if current_user.is_authenticated() %} {% if current_user.is_authenticated() %}
<div class="logged-in">{{ current_user.domain }}</div> <div class="logged-in">{{ current_user.domain }}</div>
{% else %}
<form action="{{ url_for('.login') }}" method="GET">
<input type="text" name="me" placeholder="mydomain.com" />
<button type="submit">Login</button>
</form>
{% endif %} {% endif %}
{% for message in get_flashed_messages() %} {% for message in get_flashed_messages() %}
<div class="flash">{{ message | safe }}</div> <div class="flash">{{ message | safe }}</div>
{% endfor %} {% endfor %}
{% block body %}{% endblock %} {% block body %}{% endblock %}
</main>
</body> </body>
</html> </html>

View file

@ -1,7 +1,11 @@
{% extends "base.jinja2" %} {% extends "base.jinja2" %}
{% block body %} {% block body %}
<main> <form action="{{ url_for('.subscribe') }}" method="POST">
<input type="text" id="origin" name="origin" placeholder="Feed URL" />
<button type="submit" id="subscribe">Subscribe</button>
</form>
{% for entry in entries %} {% for entry in entries %}
<article> <article>
<header> <header>
@ -24,8 +28,24 @@
<div> <div>
<a href="{{ entry.permalink }}">{{ entry.published }}</a> <a href="{{ entry.permalink }}">{{ entry.published }}</a>
</div> </div>
<form action="{{ current_user.micropub_endpoint }}" method="POST">
<input type="hidden" name="access_token" value="{{current_user.access_token}}"/>
<input type="hidden" name="h" value="entry"/>
<input type="hidden" name="like-of" value="{{ entry.permalink }}"/>
<button type="submit">Like</button>
</form>
<!--
<form action="{{ current_user.micropub_endpoint }}" method="POST">
<input type="hidden" name="access_token" value="{{current_user.access_token}}"/>
<input type="hidden" name="h" value="entry"/>
<input type="hidden" name="in-reply-to" value="{{ entry.permalink }}"/>
<textarea name="content"></textarea>
<button type="submit">Reply</button>
</form>
-->
</article> </article>
{% endfor %} {% endfor %}
</main>
{% endblock body %} {% endblock body %}

View file

@ -1,18 +1,28 @@
{% extends "base.jinja2" %} {% extends "base.jinja2" %}
{% block body %} {% block body %}
<main>
{% for feed in feeds %} {% for feed in feeds %}
<form action="{{ url_for('.edit_feed', id=feed.id) }}" method="POST"> <div>
<form style="display:inline"
action="{{ url_for('.edit_feed') }}" method="POST">
<input type="hidden" name="id" value="{{ feed.id }}"/> <input type="hidden" name="id" value="{{ feed.id }}"/>
<input type="text" name="name" value="{{ feed.name }}"/> <input type="text" name="name" style="width:25%" value="{{ feed.name }}"/>
<input type="text" name="feed" value="{{ feed.feed }}"/> <input type="text" name="feed" style="width:25%" value="{{ feed.feed }}"/>
<button type="submit">Save</button> <button type="submit">Save</button>
</form> </form>
<form style="display:inline;"
action="{{ url_for('.update_feed') }}" method="GET">
<input type="hidden" name="id" value="{{ feed.id }}"/>
<button type="submit">Update</button>
</form>
<form style="display:inline;"
action="{{ url_for('.delete_feed') }}" method="POST">
<input type="hidden" name="id" value="{{ feed.id }}"/>
<button type="submit">Delete</button>
</form>
</div>
{% endfor %} {% endfor %}
</main>
{% endblock body %} {% endblock body %}

View file

@ -1,9 +1,7 @@
{% extends "base.jinja2" %} {% extends "base.jinja2" %}
{% block body %} {% block body %}
<main> <form action="{{ url_for('.login') }}" method="GET">
<form action="{{ url_for('login') }}" method="GET">
<input type="text" name="me" placeholder="mydomain.com" /> <input type="text" name="me" placeholder="mydomain.com" />
<button type="submit">Login</button> <button type="submit">Login</button>
</form> </form>
</main>
{% endblock %} {% endblock %}

View file

@ -1,7 +1,7 @@
{% extends "base.jinja2" %} {% extends "base.jinja2" %}
{% block body %} {% block body %}
<main> <main>
<form action="{{ url_for('subscribe') }}" method="POST"> <form action="{{ url_for('.subscribe') }}" method="POST">
<input type="hidden" id="origin" name="origin" value="{{ origin }}" /> <input type="hidden" id="origin" name="origin" value="{{ origin }}" />
{% for feed in feeds %} {% for feed in feeds %}

View file

@ -1,10 +1,7 @@
{% extends "base.jinja2" %} {% extends "base.jinja2" %}
{% block body %} {% block body %}
<main>
<form method="POST"> <form method="POST">
<input type="text" id="origin" name="origin" placeholder="Feed URL" /> <input type="text" id="origin" name="origin" placeholder="Feed URL" />
<button type="submit" id="subscribe">Subscribe</button> <button type="submit" id="subscribe">Subscribe</button>
</form> </form>
</main>
{% endblock body %} {% endblock body %}

View file

@ -15,9 +15,6 @@ ui = flask.Blueprint('ui', __name__)
@ui.route('/') @ui.route('/')
def index(): def index():
import os
print('cwd', os.getcwd(), 'db', db)
if flask_login.current_user.is_authenticated(): if flask_login.current_user.is_authenticated():
feed_ids = [f.id for f in flask_login.current_user.feeds] feed_ids = [f.id for f in flask_login.current_user.feeds]
entries = Entry.query.filter( entries = Entry.query.filter(
@ -52,11 +49,12 @@ def feeds():
def update_feed(): def update_feed():
feed_id = flask.request.args.get('id') feed_id = flask.request.args.get('id')
tasks.update_feed.delay(feed_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(): def delete_feed():
feed_id = flask.request.args.get('id') feed_id = flask.request.form.get('id')
feed = Feed.query.get(feed_id) feed = Feed.query.get(feed_id)
db.session.delete(feed) db.session.delete(feed)
db.session.commit() db.session.commit()
@ -83,9 +81,6 @@ def edit_feed():
@ui.route('/login') @ui.route('/login')
def login(): def login():
if True:
flask_login.login_user(User.query.all()[0], remember=True)
me = flask.request.args.get('me') me = flask.request.args.get('me')
if me: if me:
return micropub.authorize( return micropub.authorize(
@ -151,21 +146,23 @@ def subscribe():
return flask.render_template('subscribe.jinja2') return flask.render_template('subscribe.jinja2')
def add_subscription(origin, feed, type): def add_subscription(origin, feed_url, type):
feed = None feed = None
if type == 'html': 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') name = parsed.get('name')
if not name or len(name) > 140: if not name or len(name) > 140:
p = urllib.parse.urlparse(origin) p = urllib.parse.urlparse(origin)
name = p.netloc + p.path name = p.netloc + p.path
feed = Feed(user=flask_login.current_user, name=name, 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': 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, feed = Feed(user=flask_login.current_user,
name=parsed.feed.title, origin=origin, feed=feed, name=parsed.feed and parsed.feed.title,
type=type) origin=origin, feed=feed_url, type=type)
if feed: if feed:
db.session.add(feed) db.session.add(feed)
db.session.commit() db.session.commit()