diff options
| author | akiyamn | 2023-11-02 22:29:09 +1100 |
|---|---|---|
| committer | akiyamn | 2023-11-02 22:29:09 +1100 |
| commit | 5461621c421130bd359efff4a10c3e1ba330e85c (patch) | |
| tree | 32ab149b5993b89c42a46449c23c102858faa3a2 /be | |
| download | jacbday-5461621c421130bd359efff4a10c3e1ba330e85c.tar.gz jacbday-5461621c421130bd359efff4a10c3e1ba330e85c.zip | |
Init
Diffstat (limited to 'be')
| -rw-r--r-- | be/.gitignore | 3 | ||||
| -rw-r--r-- | be/app.py | 65 | ||||
| -rw-r--r-- | be/points.py | 79 | ||||
| -rw-r--r-- | be/requirements.txt | 1 | ||||
| -rwxr-xr-x | be/run.sh | 2 |
5 files changed, 150 insertions, 0 deletions
diff --git a/be/.gitignore b/be/.gitignore new file mode 100644 index 0000000..853bb7a --- /dev/null +++ b/be/.gitignore @@ -0,0 +1,3 @@ +venv +__pycache__ +*.db diff --git a/be/app.py b/be/app.py new file mode 100644 index 0000000..399ce97 --- /dev/null +++ b/be/app.py @@ -0,0 +1,65 @@ +from flask import Flask, request +from flask_cors import CORS +from werkzeug.middleware.proxy_fix import ProxyFix +import points + +app = Flask(__name__) + +app.wsgi_app = ProxyFix( + app.wsgi_app, x_for=1, x_proto=1, x_host=1, x_prefix=1 +) + +CORS(app) + +@app.route("/") +def ping(): + return "🀄" + +TEAMS = ["green", "purple"] +points.init_databases(TEAMS) + +def sanitise(string): + return string.lower() + +@app.route('/increment/<team>/<username>', methods=["POST"]) +def increment_user_points(team, username): + team = team.lower() + multiplier = points.get_multiplier(team) + return {"points": points.increment_points(sanitise(team), sanitise(username), float(multiplier))} + +@app.route('/points/<team>/<username>', methods=["GET"]) +def user_points(team, username): + return {"points": points.get_user_points(sanitise(team), sanitise(username))} + +@app.route('/points/<team>/', methods=["GET"]) +def get_team_points(team): + return {"points": points.get_team_points(sanitise(team))} + +@app.route("/leaderboard/", methods=["GET"]) +def get_leaderboard(): + return points.get_leaderboard() + +@app.route("/multiplier/<team>", methods=["GET", "POST"]) +def multiplier(team): + if request.method == "GET": + return {"multiplier": points.get_multiplier(sanitise(team))} + else: + data = request.get_json() + if "multiplier" in data: + return {"multiplier": points.set_multiplier(sanitise(team), data["multiplier"])} + return "", 400 + +@app.route("/prompt/", methods=["GET", "POST"]) +def prompt(): + if request.method == "GET": + return {"prompt": points.get_prompt()} + else: + data = request.get_json() + if "prompt" in data: + return {"prompt": points.set_prompt(data["prompt"])} + return "", 400 + +@app.route("/clear/", methods=["POST"]) +def clear(): + points.init_databases(TEAMS, clear=True) + return "" diff --git a/be/points.py b/be/points.py new file mode 100644 index 0000000..9ad693b --- /dev/null +++ b/be/points.py @@ -0,0 +1,79 @@ +import shelve + + +def init_databases(teams, clear=False): + with shelve.open("points.db", writeback=True) as db: + for team in teams: + if team not in db or clear: + db[team] = {} + db[team]["__total"] = 0 + with shelve.open("settings.db", writeback=True) as db: + if "multiplier" not in db or clear: + db["multiplier"] = {} + for team in teams: + if team not in db["multiplier"] or clear: + db["multiplier"][team] = 1 + db["prompt"] = "" + + +# def init_settings(clear=False): +# with shelve.open("settings.db") as db: +# if "multiplier" not in db or clear: +# db["multiplier"] = 1 + + +def increment_points(team, username, amount): + with shelve.open("points.db", writeback=True) as db: + if username not in db[team]: + db[team][username] = 0 + db[team][username] += amount + db[team]["__total"] += amount + return db[team][username] + + +def get_user_points(team, username): + with shelve.open("points.db") as db: + if username in db[team]: + return db[team][username] + return 0 + + +def get_team_points(team): + return get_user_points(team, "__total") + + +def get_leaderboard(): + multipliers = None + with shelve.open("settings.db") as db: + multipliers = db["multiplier"] + with shelve.open("points.db") as db: + return { + "settings": { + "prompt": get_prompt(), + "multiplier": multipliers + } + , + "points": dict(db), + } + + +def get_multiplier(team): + with shelve.open("settings.db") as db: + return db["multiplier"][team] + + +def set_multiplier(team, multiplier): + with shelve.open("settings.db", writeback=True) as db: + db["multiplier"][team] = multiplier + return db["multiplier"][team] + + +def get_prompt(): + with shelve.open("settings.db") as db: + return db["prompt"] + + +def set_prompt(prompt): + with shelve.open("settings.db", writeback=True) as db: + db["prompt"] = prompt + return db["prompt"] diff --git a/be/requirements.txt b/be/requirements.txt new file mode 100644 index 0000000..b81f683 --- /dev/null +++ b/be/requirements.txt @@ -0,0 +1 @@ +Flask>=3.0.0
\ No newline at end of file diff --git a/be/run.sh b/be/run.sh new file mode 100755 index 0000000..bbb2676 --- /dev/null +++ b/be/run.sh @@ -0,0 +1,2 @@ +source venv/bin/activate +flask run --host 0.0.0.0 --port 1997 |
