|
12 | 12 | from flask_migrate import Migrate
|
13 | 13 | from flask_pyoidc.flask_pyoidc import OIDCAuthentication
|
14 | 14 | from flask_sqlalchemy import SQLAlchemy
|
15 |
| -from sqlalchemy import func |
| 15 | +from sqlalchemy.sql.expression import func |
16 | 16 |
|
17 | 17 | app = Flask(__name__)
|
18 | 18 | # look for a config file to associate with a db/port/ip/servername
|
@@ -186,13 +186,13 @@ def submit():
|
186 | 186 | ), 200
|
187 | 187 |
|
188 | 188 |
|
189 |
| -def get_quote_query(speaker: str = "", submitter: str = "", include_hidden: bool = False): |
| 189 | +def get_quote_query(speaker: str = "", submitter: str = "", include_hidden: bool = False, order = Quote.quote_time.desc()): |
190 | 190 | """Return a query based on the args, with vote count attached to the quotes"""
|
191 | 191 | # Get all the quotes with their votes
|
192 | 192 | quote_query = db.session.query(Quote,
|
193 | 193 | func.sum(Vote.direction).label('votes')).outerjoin(Vote).group_by(Quote)
|
194 | 194 | # Put the most recent first
|
195 |
| - quote_query = quote_query.order_by(Quote.quote_time.desc()) |
| 195 | + quote_query = quote_query.order_by(order) |
196 | 196 | # Filter hidden quotes
|
197 | 197 | if not include_hidden:
|
198 | 198 | quote_query = quote_query.filter(Quote.hidden == False)
|
@@ -377,8 +377,9 @@ def hidden():
|
377 | 377 | @app.route('/random', methods=['GET'])
|
378 | 378 | @auth.oidc_auth
|
379 | 379 | def random_quote():
|
380 |
| - quote = db.session.execute("SELECT * FROM quotefault.quote WHERE hidden=0 ORDER BY RAND() LIMIT 1;").all()[0] |
381 |
| - out = f"{quote[2]} -{quote[3]} (Submitted by {quote[1]})" |
| 380 | + quote = get_quote_query(speaker = request.args.get('speaker'), \ |
| 381 | + submitter = request.args.get('submitter'), order = func.random()).limit(1).all()[0][0] |
| 382 | + out = f"{quote.quote} -{quote.speaker} (Submitted by {quote.submitter})" |
382 | 383 | return out, 200
|
383 | 384 |
|
384 | 385 | @app.errorhandler(403)
|
|
0 commit comments