From a4dc0f1766b5924fc9cb58a7c45ed04611f52371 Mon Sep 17 00:00:00 2001 From: Joseph Abbate Date: Thu, 18 Nov 2021 14:37:18 -0500 Subject: [PATCH 1/3] Add Route for Random Plaintext Quote Added /random route which will provide a non-hidden quote selected at random from the database. --- quotefault/__init__.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/quotefault/__init__.py b/quotefault/__init__.py index edf2e46..284e377 100644 --- a/quotefault/__init__.py +++ b/quotefault/__init__.py @@ -374,6 +374,15 @@ def hidden(): metadata=metadata ) +@app.route('/random', methods=['GET']) +@auth.oidc_auth +def random_quote(): + quote = db.session.execute("SELECT * FROM quotefault.quote WHERE hidden=0 ORDER BY RAND() LIMIT 1;").all()[0] + #quote = get_quote_query(speaker = request.args.get('speaker'), + # submitter = request.args.get('submitter')).order_by(func.rand()).limit(1).all()[0][0] + out = f"{quote[2]} -{quote[3]} (Submitted by {quote[1]})" + return out, 200 + @app.errorhandler(403) def forbidden(e): return render_template('bootstrap/403.html', metadata=get_metadata()), 403 From 220a6383dc5e8862e5eef3a7796d82ee72304688 Mon Sep 17 00:00:00 2001 From: Joe Abbate Date: Tue, 15 Feb 2022 19:34:04 -0500 Subject: [PATCH 2/3] Remove filter comment --- quotefault/__init__.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/quotefault/__init__.py b/quotefault/__init__.py index 284e377..2c05697 100644 --- a/quotefault/__init__.py +++ b/quotefault/__init__.py @@ -378,8 +378,6 @@ def hidden(): @auth.oidc_auth def random_quote(): quote = db.session.execute("SELECT * FROM quotefault.quote WHERE hidden=0 ORDER BY RAND() LIMIT 1;").all()[0] - #quote = get_quote_query(speaker = request.args.get('speaker'), - # submitter = request.args.get('submitter')).order_by(func.rand()).limit(1).all()[0][0] out = f"{quote[2]} -{quote[3]} (Submitted by {quote[1]})" return out, 200 From 0196cf40348e8ff74264056a304dab3df4a4af8a Mon Sep 17 00:00:00 2001 From: Joe Abbate Date: Sun, 27 Mar 2022 13:08:51 -0400 Subject: [PATCH 3/3] Use Built in Query Function --- quotefault/__init__.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/quotefault/__init__.py b/quotefault/__init__.py index 2c05697..8820788 100644 --- a/quotefault/__init__.py +++ b/quotefault/__init__.py @@ -12,7 +12,7 @@ from flask_migrate import Migrate from flask_pyoidc.flask_pyoidc import OIDCAuthentication from flask_sqlalchemy import SQLAlchemy -from sqlalchemy import func +from sqlalchemy.sql.expression import func app = Flask(__name__) # look for a config file to associate with a db/port/ip/servername @@ -186,13 +186,13 @@ def submit(): ), 200 -def get_quote_query(speaker: str = "", submitter: str = "", include_hidden: bool = False): +def get_quote_query(speaker: str = "", submitter: str = "", include_hidden: bool = False, order = Quote.quote_time.desc()): """Return a query based on the args, with vote count attached to the quotes""" # Get all the quotes with their votes quote_query = db.session.query(Quote, func.sum(Vote.direction).label('votes')).outerjoin(Vote).group_by(Quote) # Put the most recent first - quote_query = quote_query.order_by(Quote.quote_time.desc()) + quote_query = quote_query.order_by(order) # Filter hidden quotes if not include_hidden: quote_query = quote_query.filter(Quote.hidden == False) @@ -377,8 +377,9 @@ def hidden(): @app.route('/random', methods=['GET']) @auth.oidc_auth def random_quote(): - quote = db.session.execute("SELECT * FROM quotefault.quote WHERE hidden=0 ORDER BY RAND() LIMIT 1;").all()[0] - out = f"{quote[2]} -{quote[3]} (Submitted by {quote[1]})" + quote = get_quote_query(speaker = request.args.get('speaker'), \ + submitter = request.args.get('submitter'), order = func.random()).limit(1).all()[0][0] + out = f"{quote.quote} -{quote.speaker} (Submitted by {quote.submitter})" return out, 200 @app.errorhandler(403)