|
18 | 18 | from flask_pyoidc.flask_pyoidc import OIDCAuthentication |
19 | 19 | from flask_pyoidc.provider_configuration import ProviderConfiguration, ClientMetadata |
20 | 20 | from flask_sqlalchemy import SQLAlchemy |
21 | | -from sqlalchemy import func |
| 21 | +from sqlalchemy.sql.expression import func |
22 | 22 |
|
23 | 23 | app = Flask(__name__) |
24 | 24 | # look for a config file to associate with a db/port/ip/servername |
@@ -198,13 +198,13 @@ def submit(): |
198 | 198 | ), 200 |
199 | 199 |
|
200 | 200 |
|
201 | | -def get_quote_query(speaker: str = "", submitter: str = "", include_hidden: bool = False): |
| 201 | +def get_quote_query(speaker: str = "", submitter: str = "", include_hidden: bool = False, order = Quote.quote_time.desc()): |
202 | 202 | """Return a query based on the args, with vote count attached to the quotes""" |
203 | 203 | # Get all the quotes with their votes |
204 | 204 | quote_query = db.session.query(Quote, |
205 | 205 | func.sum(Vote.direction).label('votes')).outerjoin(Vote).group_by(Quote) |
206 | 206 | # Put the most recent first |
207 | | - quote_query = quote_query.order_by(Quote.quote_time.desc()) |
| 207 | + quote_query = quote_query.order_by(order) |
208 | 208 | # Filter hidden quotes |
209 | 209 | if not include_hidden: |
210 | 210 | quote_query = quote_query.filter(Quote.hidden == False) |
@@ -426,6 +426,14 @@ def hidden(): |
426 | 426 | metadata=metadata |
427 | 427 | ) |
428 | 428 |
|
| 429 | +@app.route('/random', methods=['GET']) |
| 430 | +@auth.oidc_auth |
| 431 | +def random_quote(): |
| 432 | + quote = get_quote_query(speaker = request.args.get('speaker'), \ |
| 433 | + submitter = request.args.get('submitter'), order = func.random()).limit(1).all()[0][0] |
| 434 | + out = f"{quote.quote} -{quote.speaker} (Submitted by {quote.submitter})" |
| 435 | + return out, 200 |
| 436 | + |
429 | 437 | @app.errorhandler(403) |
430 | 438 | def forbidden(e): |
431 | 439 | return render_template('bootstrap/403.html', metadata=get_metadata()), 403 |
|
0 commit comments