def home(): query = db_session.query(Quote) \ .filter(Quote.approved == True) order = request.args.get('order', 'desc').lower() if order == 'asc': query = query.order_by(Quote.submitted_at.asc()) \ .order_by(Quote.id.asc()) else: query = query.order_by(Quote.submitted_at.desc()) \ .order_by(Quote.id.desc()) search = request.args.get('s') if search: query = query.filter(Quote.body.ilike('%'+search+'%')) page = int(request.args.get('p', 1)) if page < 1: page = 1 paginator = Paginator(query, page, request.url) quotes = paginator.items if request.headers.get('Accept') == 'application/json': return jsonify(quotes=paginator) return render_template('list.html.jinja', quotes=quotes, paginator=paginator)
def jinja_globals(): context = dict() if session.get('logged_in'): context['pending_count'] = db_session.query(Quote) \ .filter(Quote.approved == False) \ .count() # cache busting URLs if not app.debug: url_cache = {} def dated_url_for(endpoint, **values): if endpoint == 'static': filename = values.get('filename') if filename: if filename not in url_cache: file_path = os.path.join(app.static_folder, filename) if os.path.isfile(file_path): timestamp = int(os.stat(file_path).st_mtime) directory, filename = os.path.split(filename) filename, extension = filename.split('.', 1) filename = '{}.{}.{}'.format(filename, timestamp, extension) url_cache[filename] = os.path.join(directory, filename) else: url_cache[filename] = filename values['filename'] = url_cache[filename] return url_for(endpoint, **values) context['url_for'] = dated_url_for return context
def show(quote_id): quote = db_session.query(Quote).filter(Quote.id == quote_id).first() if not quote: return abort(404) if request.method in ("GET", "HEAD"): if request.headers.get("Accept") == "application/json": return jsonify(quote=quote) return render_template("show.html.jinja", quote=quote) if not session.get("logged_in"): return abort(401) if request.method == "DELETE": db_session.delete(quote) db_session.commit() return "OK" quote.body = prepare_quote( request.form["body"], strip_timestamps=bool(request.form.get("strip_timestamps")), ) db_session.add(quote) db_session.commit() return "OK"
def home(): query = db_session.query(Quote).filter(Quote.approved == True) order = request.args.get("order", "desc").lower() if order == "asc": query = query.order_by(Quote.submitted_at.asc()).order_by( Quote.id.asc()) else: query = query.order_by(Quote.submitted_at.desc()).order_by( Quote.id.desc()) search = request.args.get("s") if search: query = query.filter(Quote.body.ilike("%" + search + "%")) try: page = int(request.args.get("p", 1)) except ValueError: resp = jsonify(error="invalid page number") resp.status_code = 400 return resp if page < 1: page = 1 paginator = Paginator(query, page, request.url) quotes = paginator.items if request.headers.get("Accept") == "application/json": return jsonify(quotes=paginator) return render_template("list.html.jinja", quotes=quotes, paginator=paginator)
def show(quote_id): quote = db_session.query(Quote) \ .filter(Quote.id == quote_id) \ .first() if not quote: return abort(404) if request.method == 'GET' or request.method == 'HEAD': if request.headers.get('Accept') == 'application/json': return jsonify(quote=quote) return render_template('show.html.jinja', quote=quote) if not session.get('logged_in'): return abort(401) if request.method == 'DELETE': db_session.delete(quote) db_session.commit() return 'OK' body = Quote.prepare(request.form['body']) quote.body = body db_session.add(quote) db_session.commit() return 'OK'
def home(): query = db_session.query(Quote) \ .filter(Quote.approved == True) order = request.args.get('order', 'desc').lower() if order == 'asc': query = query.order_by(Quote.submitted_at.asc()) \ .order_by(Quote.id.asc()) else: query = query.order_by(Quote.submitted_at.desc()) \ .order_by(Quote.id.desc()) search = request.args.get('s') if search: query = query.filter(Quote.body.ilike('%' + search + '%')) page = int(request.args.get('p', 1)) if page < 1: page = 1 paginator = Paginator(query, page, request.url) quotes = paginator.items if request.headers.get('Accept') == 'application/json': return jsonify(quotes=paginator) return render_template('list.html.jinja', quotes=quotes, paginator=paginator)
def jinja_globals(): context = dict() if session.get('logged_in'): context['pending_count'] = db_session.query(Quote) \ .filter(Quote.approved == False) \ .count() return context
def reject(quote_id): if not session.get("logged_in"): return abort(401) quote = db_session.query(Quote).filter(Quote.id == quote_id).first() if not quote: return abort(404) quote.approved = False db_session.add(quote) db_session.commit() return "OK"
def pending(): if not session.get("logged_in"): flash("You must be logged in to do that!") return redirect(url_for("home")) query = (db_session.query(Quote).filter(Quote.approved == None).order_by( Quote.submitted_at.desc())) quotes = query.all() if request.headers.get("Accept") == "application/json": return jsonify(quotes=quotes) return render_template("list.html.jinja", quotes=quotes)
def pending(): if not session.get('logged_in'): flash('You must be logged in to do that!') return redirect(url_for('home')) query = db_session.query(Quote) \ .filter(Quote.approved == False) \ .order_by(Quote.submitted_at.desc()) quotes = query.all() if request.headers.get('Accept') == 'application/json': return jsonify(quotes=quotes) return render_template('list.html.jinja', quotes=quotes)
def random(): query = db_session.query(Quote) search = request.args.get("s") if search: query = query.filter(Quote.body.ilike("%" + search + "%")) query = query.filter(Quote.approved == True).order_by( func.random()).limit(10) quotes = query.all() if request.headers.get("Accept") == "application/json": return jsonify(quotes=quotes) return render_template("list.html.jinja", quotes=quotes)
def get_all(): query = db_session.query(Quote).filter(Quote.approved == True) order = request.args.get("order", "desc").lower() if order == "asc": query = query.order_by(Quote.submitted_at.asc()).order_by( Quote.id.asc()) else: query = query.order_by(Quote.submitted_at.desc()).order_by( Quote.id.desc()) quotes = query.all() if request.headers.get("Accept") == "application/json": return jsonify(quotes=quotes) return render_template("list.html.jinja", quotes=quotes)
def approve(quote_id): if not session.get("logged_in"): return abort(401) quote = db_session.query(Quote).filter(Quote.id == quote_id).first() if not quote: return abort(404) quote.approved = True db_session.add(quote) db_session.commit() if app.config.get("ENABLE_IRCBOT_WEBHOOKS"): ircbot.notify_bot(quote) return "OK"
def random(): query = db_session.query(Quote) search = request.args.get('s') if search: query = query.filter(Quote.body.ilike('%' + search + '%')) query = query.filter(Quote.approved == True) \ .order_by(func.random()) \ .limit(10) quotes = query.all() if request.headers.get('Accept') == 'application/json': return jsonify(quotes=quotes) return render_template('list.html.jinja', quotes=quotes)
def random(): query = db_session.query(Quote) search = request.args.get('s') if search: query = query.filter(Quote.body.ilike('%'+search+'%')) query = query.filter(Quote.approved == True) \ .order_by(func.random()) \ .limit(10) quotes = query.all() if request.headers.get('Accept') == 'application/json': return jsonify(quotes=quotes) return render_template('list.html.jinja', quotes=quotes)
def get_all(): query = db_session.query(Quote) \ .filter(Quote.approved == True) order = request.args.get('order', 'desc').lower() if order == 'asc': query = query.order_by(Quote.submitted_at.asc()) \ .order_by(Quote.id.asc()) else: query = query.order_by(Quote.submitted_at.desc()) \ .order_by(Quote.id.desc()) quotes = query.all() if request.headers.get('Accept') == 'application/json': return jsonify(quotes=quotes) return render_template('list.html.jinja', quotes=quotes)
def approve(quote_id): if not session.get('logged_in'): return abort(401) quote = db_session.query(Quote) \ .filter(Quote.id == quote_id) \ .first() if not quote: return abort(404) quote.approved = True db_session.add(quote) db_session.commit() if app.config.get('ENABLE_IRCBOT_WEBHOOKS'): ircbot.notify_bot(quote) return 'OK'
def jinja_globals(): # inject global jinja variables from qdb.database import db_session from qdb.models import Quote context = dict() if session.get('logged_in'): context['pending_count'] = db_session.query(Quote) \ .filter(Quote.approved == None) \ .count() # cache busting URLs if not app.debug: url_cache = {} def dated_url_for(endpoint, **values): if endpoint == 'static': filename = values.get('filename') if filename: if filename not in url_cache: file_path = os.path.join(app.static_folder, filename) if os.path.isfile(file_path): timestamp = int(os.stat(file_path).st_mtime) directory, filename = os.path.split(filename) filename, extension = filename.split('.', 1) filename = '{}.{}.{}'.format( filename, timestamp, extension) url_cache[filename] = os.path.join( directory, filename) else: url_cache[filename] = filename values['filename'] = url_cache[filename] return url_for(endpoint, **values) context['url_for'] = dated_url_for return context
def rejected(): query = db_session.query(Quote).filter(Quote.approved == False) order = request.args.get("order", "desc").lower() if order == "asc": query = query.order_by(Quote.submitted_at.asc()).order_by( Quote.id.asc()) else: query = query.order_by(Quote.submitted_at.desc()).order_by( Quote.id.desc()) page = int(request.args.get("p", 1)) if page < 1: page = 1 paginator = Paginator(query, page, request.url) quotes = paginator.items if request.headers.get("Accept") == "application/json": return jsonify(quotes=paginator) return render_template("list.html.jinja", quotes=quotes, paginator=paginator)