users to posts many-to-many so we don't have lots of duplicate posts

This commit is contained in:
Kyle Mahan 2015-01-30 02:50:05 +00:00
parent 8dd5b2ea1a
commit 85f1e9bc96
4 changed files with 28 additions and 21 deletions

1
.gitignore vendored
View file

@ -2,3 +2,4 @@
.sass-cacheconfig.py .sass-cacheconfig.py
celerybeat-schedule celerybeat-schedule
.sass-cache .sass-cache
__pycache__

View file

@ -8,6 +8,13 @@ bleach.ALLOWED_ATTRIBUTES.update({
}) })
users_to_feeds = db.Table(
'users_to_feeds', db.Model.metadata,
db.Column('user_id', db.Integer, db.ForeignKey('user.id'), index=True),
db.Column('feed_id', db.Integer, db.ForeignKey('feed.id'), index=True))
class User(db.Model): class User(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
domain = db.Column(db.String(256)) domain = db.Column(db.String(256))
@ -38,8 +45,7 @@ class User(db.Model):
class Feed(db.Model): class Feed(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey(User.id)) users = db.relationship(User, secondary='users_to_feeds', backref='feeds')
user = db.relationship(User, backref='feeds')
# the name of this feed # the name of this feed
name = db.Column(db.String(256)) name = db.Column(db.String(256))
# url that we subscribed to; periodically check if the feed url # url that we subscribed to; periodically check if the feed url

View file

@ -32,7 +32,7 @@ $(attachListeners);
{% block header %} {% block header %}
{% if current_user.is_authenticated() %} {% if current_user.is_authenticated() %}
<form action="{{ url_for('.subscribe') }}" method="POST"> <form action="{{ url_for('.subscribe') }}" method="POST">
<input type="text" id="origin" name="origin" placeholder="Feed URL" /> <input type="url" id="origin" name="origin" placeholder="Feed URL" />
<button type="submit" id="subscribe">Subscribe</button> <button type="submit" id="subscribe">Subscribe</button>
</form> </form>
{% endif %} {% endif %}

View file

@ -36,7 +36,7 @@ def install():
@ui.route('/feeds') @ui.route('/feeds')
def feeds(): def feeds():
feeds = Feed.query.filter(Feed.user == flask_login.current_user).all() feeds = flask_login.current_user.feeds
return flask.render_template('feeds.jinja2', feeds=feeds) return flask.render_template('feeds.jinja2', feeds=feeds)
@ -142,7 +142,8 @@ def subscribe():
def add_subscription(origin, feed_url, type): def add_subscription(origin, feed_url, type):
feed = None feed = Feed.query.filter_by(feed=feed_url, type=type).first()
if not feed:
if type == 'html': if type == 'html':
flask.current_app.logger.debug('mf2py parsing %s', feed_url) flask.current_app.logger.debug('mf2py parsing %s', feed_url)
parsed = mf2util.interpret_feed(mf2py.parse(url=feed_url), feed_url) parsed = mf2util.interpret_feed(mf2py.parse(url=feed_url), feed_url)
@ -150,16 +151,15 @@ def add_subscription(origin, feed_url, type):
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(name=name, origin=origin, feed=feed_url, type=type)
origin=origin, feed=feed_url, type=type)
elif type == 'xml': elif type == 'xml':
flask.current_app.logger.debug('feedparser parsing %s', feed_url) flask.current_app.logger.debug('feedparser parsing %s', feed_url)
parsed = feedparser.parse(feed_url) parsed = feedparser.parse(feed_url)
feed = Feed(user=flask_login.current_user, feed = Feed(name=parsed.feed and parsed.feed.title,
name=parsed.feed and parsed.feed.title,
origin=origin, feed=feed_url, type=type) origin=origin, feed=feed_url, type=type)
if feed: if feed:
db.session.add(feed) db.session.add(feed)
flask_login.current_user.feeds.append(feed)
db.session.commit() db.session.commit()
# go ahead and update the fed # go ahead and update the fed
tasks.update_feed.delay(feed.id) tasks.update_feed.delay(feed.id)