From 148267d8d7099ef0dc56e1b6e870abe861c094dd Mon Sep 17 00:00:00 2001 From: Wire Date: Mon, 13 Jul 2020 02:10:51 +0200 Subject: [PATCH] New version --- app/forms.py | 4 +++ app/routes.py | 66 +++++++++++++++++++++++++++++++++-- app/static/img/404.png | Bin 0 -> 42666 bytes app/templates/404.html | 10 ++++++ app/templates/_post.html | 2 +- app/templates/base.html | 2 ++ app/templates/following.html | 35 +++++++++++++++++++ app/templates/search.html | 18 ++++++++++ 8 files changed, 133 insertions(+), 4 deletions(-) create mode 100644 app/static/img/404.png create mode 100644 app/templates/404.html create mode 100644 app/templates/following.html create mode 100644 app/templates/search.html diff --git a/app/forms.py b/app/forms.py index eb5ab64..adb4feb 100644 --- a/app/forms.py +++ b/app/forms.py @@ -10,6 +10,10 @@ class LoginForm(FlaskForm): remember_me = BooleanField('Remember Me') submit = SubmitField('Sign In') +class SearchForm(FlaskForm): + username = StringField('Username') + submit = SubmitField('Search') + class RegistrationForm(FlaskForm): username = StringField('Username', validators=[DataRequired()]) diff --git a/app/routes.py b/app/routes.py index b1aaaa2..6dca8cb 100644 --- a/app/routes.py +++ b/app/routes.py @@ -1,6 +1,6 @@ from flask_login import login_user, logout_user, current_user, login_required from flask import render_template, flash, redirect, url_for, request -from app.forms import LoginForm, RegistrationForm, EmptyForm +from app.forms import LoginForm, RegistrationForm, EmptyForm, SearchForm from app.models import User, twitterPost from werkzeug.urls import url_parse from flask import Markup @@ -132,16 +132,66 @@ def unfollow(username): return redirect(url_for('user', username=username)) current_user.unfollow(user) db.session.commit() - flash('You are not following {}.'.format(username)) + flash('You are no longer following {}.'.format(username)) return redirect(url_for('user', username=username)) else: return redirect(url_for('index')) +@app.route('/unfollowList/', methods=['POST']) +@login_required +def unfollowList(username): + form = EmptyForm() + if form.validate_on_submit(): + user = User.query.filter_by(username=username).first() + if user is None: + flash('User {} not found.'.format(username)) + return redirect(url_for('index')) + if user == current_user: + flash('You cannot unfollow yourself!') + return redirect(url_for('user', username=username)) + current_user.unfollow(user) + db.session.commit() + flash('You are no longer following {}!'.format(username)) + return redirect(url_for('following')) + else: + return redirect(url_for('index')) + +@app.route('/following') +@login_required +def following(): + form = EmptyForm() + following = current_user.following_list() + followed = current_user.followed.count() + return render_template('following.html', accounts = following, count = followed, form = form) + +@app.route('/search', methods=['GET', 'POST']) +@login_required +def search(): + form = SearchForm() + if form.validate_on_submit(): + user = form.username.data + if isTwitterUser(user): + return redirect(url_for('user', username=user)) + else: + flash("User {} does not exist!".format(user)) + return render_template('search.html', form = form) + else: + return render_template('search.html', form = form) + + + +@app.route('/notfound') +def notfound(): + return render_template('404.html') + @app.route('/user/') @login_required def user(username): user = User.query.filter_by(username=username).first() isTwitter = True + rssFeed = feedparser.parse('https://nitter.net/{}/rss'.format(username)) + if rssFeed.entries == []: + isTwitter = False if user is None and isTwitter: x = ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(16)) newUser = User(username=username, email="{}@person.is".format(x)) @@ -149,6 +199,9 @@ def user(username): db.session.commit() #flash('User {} not found.'.format(username)) + elif not isTwitter and user is None: + return redirect(url_for('notfound')) + #Gather profile info. rssFeed = feedparser.parse('https://nitter.net/{}/rss'.format(username)) @@ -177,6 +230,7 @@ def user(username): posts.append(newPost) form = EmptyForm() + user = User.query.filter_by(username=username).first() return render_template('user.html', user=user, posts=posts, form=form, profilePic=rssFeed.channel.image.url) def getTimeDiff(t): @@ -194,4 +248,10 @@ def getTimeDiff(t): timeString = "{}m".format(minutes) else: timeString = "{}d".format(diff.days) - return timeString \ No newline at end of file + return timeString + +def isTwitterUser(username): + rssFeed = feedparser.parse('https://nitter.net/{}/rss'.format(username)) + if rssFeed.entries == []: + return False + return True \ No newline at end of file diff --git a/app/static/img/404.png b/app/static/img/404.png new file mode 100644 index 0000000000000000000000000000000000000000..0f5921a88c350342847edb8e47b400de698ade83 GIT binary patch literal 42666 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 z%0A+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 literal 0 HcmV?d00001 diff --git a/app/templates/404.html b/app/templates/404.html new file mode 100644 index 0000000..7103500 --- /dev/null +++ b/app/templates/404.html @@ -0,0 +1,10 @@ +{% extends "base.html" %} + +{% block content %} +
+ +
+
+

This page is not on the map.

+
+{% endblock %} \ No newline at end of file diff --git a/app/templates/_post.html b/app/templates/_post.html index d771856..eea25ac 100644 --- a/app/templates/_post.html +++ b/app/templates/_post.html @@ -3,7 +3,7 @@
- +
diff --git a/app/templates/base.html b/app/templates/base.html index aff58fc..501f4d4 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -19,6 +19,8 @@ {% if current_user.is_anonymous %} Login {% else %} + Search + Following Logout {% endif %}
diff --git a/app/templates/following.html b/app/templates/following.html new file mode 100644 index 0000000..68513b7 --- /dev/null +++ b/app/templates/following.html @@ -0,0 +1,35 @@ +{% extends "base.html" %} + +{% block content %} +
+
+ +
+
+

Accounts you follow ({{ count }}):

+
+
+
+ +
+
+ {% for acc in accounts %} +
+
+

+

+ {{ form.hidden_tag() }} + {{ form.submit(value='Unfollow') }} +
+

+
+ +
+ {{acc.username}} +
+
+ {% endfor %} +
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/templates/search.html b/app/templates/search.html new file mode 100644 index 0000000..f185fa1 --- /dev/null +++ b/app/templates/search.html @@ -0,0 +1,18 @@ +{% extends "base.html" %} + +{% block content %} +
+
+ {{ form.hidden_tag() }} +

+ {{ form.username.label }}
+ {{ form.username(size=32) }}
+ {% for error in form.username.errors %} + [{{ error }}] + {% endfor %} +

+

{{ form.submit() }}

+
+
+ +{% endblock %} \ No newline at end of file