From 53d05ef5c5d7c2c28a07a85fac3f3b27464c71ce Mon Sep 17 00:00:00 2001 From: Rien Maertens Date: Wed, 3 Oct 2018 01:18:00 +0200 Subject: [PATCH] Attempt to add quotes to mattermore --- app/app.py | 24 ++++++++++++++++++++++-- app/models.py | 29 +++++++++++++++++++++++++++++ app/templates/quotes.html | 24 ++++++++++++++++++++++++ config.py | 3 ++- 4 files changed, 77 insertions(+), 3 deletions(-) create mode 100644 app/templates/quotes.html diff --git a/app/app.py b/app/app.py index 4b95af0..d6d5ba0 100644 --- a/app/app.py +++ b/app/app.py @@ -1,9 +1,11 @@ import json from functools import wraps -from flask import Flask, request, Response, abort +from flask import Flask, request, Response, abort, render_template from flask_sqlalchemy import SQLAlchemy import requests import config +import re +import pdb app = Flask(__name__) @@ -57,7 +59,6 @@ def requires_token(token_name): def decorated_function(*args, **kwargs): expected_token = config.tokens[token_name] token = request.values.get('token') - print(token, expected_token) if expected_token != token: return abort(401) return f(*args, **kwargs) @@ -123,3 +124,22 @@ def door(username): tokens = request.values.get('text').strip().split() command = tokens[0].lower() return mattermost_response(slotmachien_request(username, command)) + + +QUOTEE_REGEX = re.compile('\W*(\w+).*') + +@app.route('/addquote', methods=['POST']) +@requires_token('quote') +def add_quote(): + user = request.values['user_name'] + channel = request.values['channel_name'] + quote_text = request.values['text'] + quote = models.Quote(user, quote_text, channel) + db.session.add(quote) + db.session.commit() + return mattermost_response("Your quote has been added.") + +@app.route('/', methods=['GET']) +def list_quotes(): + return render_template('quotes.html', quotes = models.Quote.query.all()) + diff --git a/app/models.py b/app/models.py index 30896b9..b40784a 100644 --- a/app/models.py +++ b/app/models.py @@ -1,4 +1,6 @@ from .app import db +from datetime import datetime +import re class User(db.Model): @@ -14,3 +16,30 @@ class User(db.Model): super() self.username = username self.admin = admin + +class Quote(db.Model): + id = db.Column(db.Integer, primary_key=True) + quoter = db.Column(db.String(255), unique=False, nullable=False) + quotee = db.Column(db.String(255), unique=False, nullable=True) + channel = db.Column(db.String(255), unique=False, nullable=False) + quote = db.Column(db.String(1023), unique=True, nullable=False) + created_at = db.Column( + db.DateTime, nullable=False, + default=datetime.utcnow + ) + + QUOTEE_REGEX = re.compile('\W*(\w+).*') + + def __repr__(self): + return f"" + + def __init__(self, quoter, quote, channel): + super() + self.quoter = quoter + self.quote = quote + self.channel = channel + self.created_at = datetime.utcnow() + # Experimentally try to find quoted user + quotee_match = Quote.QUOTEE_REGEX.search(quote) + self.quotee = quotee_match.group(1) if quotee_match is not None else None + diff --git a/app/templates/quotes.html b/app/templates/quotes.html new file mode 100644 index 0000000..8ce49c8 --- /dev/null +++ b/app/templates/quotes.html @@ -0,0 +1,24 @@ + + + Zeus WPI Quotes + + +

Zeus WPI Quotes

+ + + + + + + + {% for quote in quotes %} + + + + + + + {% endfor %} +
QuoterQuoteeWhenQuote
{{ quote.quoter }}{{ quote.quotee }}{{ quote.created_at }}{{ quote.quote }}
+ + diff --git a/config.py b/config.py index 1ad584a..20db883 100644 --- a/config.py +++ b/config.py @@ -2,7 +2,8 @@ DATABASE_URL = 'sqlite:////tmp/mattermost.db' tokens = { 'authorize': '123', 'door': '123', - 'revoke': '123' + 'revoke': '123', + 'quote': '123' } slotmachien_url = 'https://kelder.zeus.ugent.be/slotmachien/slack/' slotmachien_token = '123'