2020-12-07 20:57:57 +01:00
|
|
|
from flask import Flask, request
|
2020-12-07 23:27:41 +01:00
|
|
|
import sys
|
2020-12-07 20:31:03 +01:00
|
|
|
import json
|
|
|
|
import string
|
|
|
|
import random
|
|
|
|
import atexit
|
|
|
|
|
|
|
|
app = Flask(__name__)
|
|
|
|
|
2020-12-07 23:27:41 +01:00
|
|
|
filename = sys.argv[1] if len(sys.argv) > 1 else 'db.json'
|
2020-12-07 20:57:57 +01:00
|
|
|
id_length = 16
|
2020-12-07 20:31:03 +01:00
|
|
|
|
|
|
|
data = {}
|
|
|
|
|
|
|
|
|
|
|
|
def startup():
|
2020-12-07 20:57:57 +01:00
|
|
|
|
2020-12-07 20:31:03 +01:00
|
|
|
global data
|
|
|
|
try:
|
|
|
|
fd = open(filename)
|
|
|
|
data = json.load(fd)
|
2021-11-11 19:33:45 +01:00
|
|
|
fd.close()
|
2020-12-07 20:31:03 +01:00
|
|
|
except FileNotFoundError:
|
2021-11-11 18:56:36 +01:00
|
|
|
print("DB file not found, creating on POST/write.")
|
2020-12-07 20:31:03 +01:00
|
|
|
|
2021-11-11 19:03:45 +01:00
|
|
|
print("Read", len(data), "quizzes from DB")
|
|
|
|
|
2020-12-07 20:31:03 +01:00
|
|
|
|
2020-12-07 21:37:41 +01:00
|
|
|
@app.route('/db/<id>', methods = ['GET'])
|
2020-12-07 20:31:03 +01:00
|
|
|
def get(id):
|
2020-12-07 20:57:57 +01:00
|
|
|
return data[id] if id in data else ('Error: Not found', 404)
|
2020-12-07 20:31:03 +01:00
|
|
|
|
|
|
|
|
|
|
|
def generateRandomString():
|
|
|
|
return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(id_length))
|
|
|
|
|
2020-12-07 20:57:57 +01:00
|
|
|
def generateNewKey():
|
|
|
|
|
|
|
|
id = generateRandomString()
|
|
|
|
while id in data:
|
|
|
|
id = generateRandomString()
|
|
|
|
|
|
|
|
return id
|
|
|
|
|
2020-12-07 21:37:41 +01:00
|
|
|
@app.route('/db', methods = ['POST'])
|
2020-12-07 20:31:03 +01:00
|
|
|
def post():
|
2020-12-07 20:57:57 +01:00
|
|
|
|
|
|
|
id = generateNewKey()
|
2020-12-07 20:31:03 +01:00
|
|
|
data[id] = request.data.decode('UTF-8')
|
2020-12-07 20:57:57 +01:00
|
|
|
|
2021-11-11 19:03:45 +01:00
|
|
|
print("Received new quiz. ID:", id)
|
|
|
|
|
2020-12-07 20:31:03 +01:00
|
|
|
try:
|
2020-12-07 20:57:57 +01:00
|
|
|
fd = open(filename, 'w+')
|
2021-11-11 18:56:36 +01:00
|
|
|
json.dump(data, fd, indent=2)
|
2021-11-11 19:33:45 +01:00
|
|
|
fd.close()
|
2021-11-11 18:56:36 +01:00
|
|
|
except e:
|
|
|
|
print("Failed to open/create DB file for writing:", e)
|
2020-12-07 20:31:03 +01:00
|
|
|
|
2021-11-11 18:56:36 +01:00
|
|
|
return id, 201
|
|
|
|
|
2020-12-07 20:31:03 +01:00
|
|
|
|
|
|
|
startup()
|