From 2d27836e291c0bb7bfb04056d8ca0e87eecde63e Mon Sep 17 00:00:00 2001 From: Yaman Qalieh Date: Sun, 21 Jan 2018 16:39:19 -0500 Subject: [PATCH] add PATCH method --- SmearcarDB/server.py | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/SmearcarDB/server.py b/SmearcarDB/server.py index cbba62e..05d24ec 100644 --- a/SmearcarDB/server.py +++ b/SmearcarDB/server.py @@ -1,8 +1,8 @@ import pickle from flask import Flask from flask import render_template, jsonify, request -import time -import random +import ulid + app = Flask(__name__) app.config.update( DEBUG=True, @@ -12,11 +12,19 @@ app.config.update( try: with open("save.p", "rb") as f: database = pickle.load(f) + # 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 except (FileNotFoundError) as e: database = {'languages': [], 'phonemes': [], 'values': []} +def saveDatabase(): + # Save copy under separate name + with open("newestsave.p", "wb") as f: + pickle.dump(database, f) # Render the client at the default URL @app.route("/") @@ -24,16 +32,17 @@ def initial(): return render_template('index.html') # Place for client to communicate with the server -@app.route("/server", methods=["GET", "POST"]) +@app.route("/server", methods=["GET", "POST", "PATCH"]) +# TODO add more methods def backend(): - # Get method returns the latest database + # GET method returns the latest database if request.method == "GET": return jsonify(database) - # Post method currently appends to the languages - # TODO add more methods + # POST method currently appends to the languages elif request.method == "POST": newlanguage = request.get_json() + newlanguage['id'] = ulid.new().str database['values'].append(newlanguage) # Add new phonemes @@ -42,14 +51,18 @@ def backend(): database['phonemes'] = database['phonemes'] + uniquephonemes # Add new language - newlang = {newlanguage['name']} - uniquelanguages = list(newlang - set(database['languages'])) + newlangname = {newlanguage['name']} + uniquelanguages = list(newlangname - set(database['languages'])) database['languages'] = database['languages'] + uniquelanguages - # Save copy under separate name - with open("newestsave.p", "wb") as f: - pickle.dump(database, f) + saveDatabase() + return jsonify(database) + # 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() return jsonify(database) else: