55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
import requests
|
|
from flask import redirect, render_template, request, session
|
|
from functools import wraps
|
|
from sympy import *
|
|
import random
|
|
|
|
x, y, z, t, X, Y, Z, T = symbols('x y z t X Y Z T')
|
|
|
|
|
|
def apology(message, code=400):
|
|
"""Render message as an apology to user."""
|
|
def escape(s):
|
|
"""
|
|
Escape special characters.
|
|
|
|
https://github.com/jacebrowning/memegen#special-characters
|
|
"""
|
|
for old, new in [("-", "--"), (" ", "-"), ("_", "__"), ("?", "~q"),
|
|
("%", "~p"), ("#", "~h"), ("/", "~s"), ("\"", "''")]:
|
|
s = s.replace(old, new)
|
|
return s
|
|
return render_template("apology.html", top=code, bottom=escape(message)), code
|
|
|
|
|
|
def login_required(f):
|
|
"""
|
|
Decorate routes to require login.
|
|
|
|
http://flask.pocoo.org/docs/1.0/patterns/viewdecorators/
|
|
"""
|
|
@wraps(f)
|
|
def decorated_function(*args, **kwargs):
|
|
if session.get("user_id") is None:
|
|
return redirect("/login")
|
|
return f(*args, **kwargs)
|
|
return decorated_function
|
|
|
|
|
|
def usd(value):
|
|
"""Format value as USD."""
|
|
return f"${value:,.2f}"
|
|
|
|
def setup_symbols(f):
|
|
f = sympify(f)
|
|
|
|
# replace commonly used variables with x
|
|
for letter in [x, y, z, t, X, Y, Z, T]:
|
|
f = f.subs(letter, x)
|
|
return f
|
|
|
|
def gif_apology(message="oopsy", code=400):
|
|
"Render gif failure"
|
|
PATH = 'static/img/gifs/reaction' + str(random.randint(1,5)) + '.gif'
|
|
return render_template("gif_apology.html", PATH=PATH)
|