archive/SmearcarDB/server.py

73 lines
2.2 KiB
Python
Raw Normal View History

2018-01-16 14:13:19 -05:00
import pickle
from flask import Flask
from flask import render_template, jsonify, request
2018-01-21 16:39:19 -05:00
import ulid
2018-01-16 14:13:19 -05:00
app = Flask(__name__)
app.config.update(
DEBUG=True,
TEMPLATES_AUTO_RELOAD=True
)
2018-01-16 14:13:19 -05:00
try:
2018-01-16 22:00:32 -05:00
with open("save.p", "rb") as f:
database = pickle.load(f)
2018-01-21 16:39:19 -05:00
# Can be commented out after non-id languages are all converted
for item in database['values']:
if not 'id' in item:
item['id'] = ulid.new().str
2018-01-16 14:13:19 -05:00
except (FileNotFoundError) as e:
database = {'languages': [],
'phonemes': [],
'values': []}
2018-01-21 16:39:19 -05:00
def saveDatabase():
# Save copy under separate name
with open("newestsave.p", "wb") as f:
pickle.dump(database, f)
2018-01-16 14:13:19 -05:00
# Render the client at the default URL
@app.route("/")
def initial():
return render_template('index.html')
# Place for client to communicate with the server
2018-01-21 16:39:19 -05:00
@app.route("/server", methods=["GET", "POST", "PATCH"])
# TODO add more methods
2018-01-16 14:13:19 -05:00
def backend():
2018-01-21 16:39:19 -05:00
# GET method returns the latest database
2018-01-16 14:13:19 -05:00
if request.method == "GET":
return jsonify(database)
2018-01-21 16:41:27 -05:00
# POST method appends input to database['values']
2018-01-16 14:13:19 -05:00
elif request.method == "POST":
newlanguage = request.get_json()
2018-01-21 16:39:19 -05:00
newlanguage['id'] = ulid.new().str
2018-01-16 22:00:32 -05:00
database['values'].append(newlanguage)
2018-01-16 14:13:19 -05:00
# Add new phonemes
2018-01-16 22:00:32 -05:00
newphonemes = list(newlanguage[ 'phonemes' ])
uniquephonemes = list(set(newphonemes) - set(database[ 'phonemes' ]))
database['phonemes'] = database['phonemes'] + uniquephonemes
2018-01-16 14:13:19 -05:00
# Add new language
2018-01-21 16:39:19 -05:00
newlangname = {newlanguage['name']}
uniquelanguages = list(newlangname - set(database['languages']))
2018-01-16 22:00:32 -05:00
database['languages'] = database['languages'] + uniquelanguages
2018-01-16 14:13:19 -05:00
2018-01-21 16:39:19 -05:00
saveDatabase()
return jsonify(database)
2018-01-16 14:13:19 -05:00
2018-01-21 16:39:19 -05:00
# PATCH method inputs edited language and returns updated database
elif request.method == "PATCH":
newlanguage = request.get_json()
database['values'] = [newlanguage if language['id'] == newlanguage['id'] else language for language in database['values']]
saveDatabase()
2018-01-16 14:13:19 -05:00
return jsonify(database)
else:
return
if __name__ == "__main__":
app.run(host="0.0.0.0")