From fdefd2732d416f56c3cdb5c1e1822c569a28ba39 Mon Sep 17 00:00:00 2001 From: yamanq Date: Mon, 29 Jan 2018 16:35:37 -0500 Subject: [PATCH] Start patch method --- SmearcarDB/server.py | 77 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 63 insertions(+), 14 deletions(-) diff --git a/SmearcarDB/server.py b/SmearcarDB/server.py index ca004e9..081d982 100644 --- a/SmearcarDB/server.py +++ b/SmearcarDB/server.py @@ -12,6 +12,8 @@ app.config.update( ) db = SQLAlchemy(app) +# TODO Updates table (add, edit, delete) (author, date, title, content) +# TODO convert pickle to db class Frequency(db.Model): language_id = db.Column(db.Integer, db.ForeignKey('language.id'), primary_key=True) @@ -29,7 +31,7 @@ class Language(db.Model): class Phoneme(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) - name = db.Column(db.String(5), nullable=False) + name = db.Column(db.String(5), nullable=False, unique=True) def database(): @@ -46,6 +48,44 @@ def database(): final['values'].append(languageobject) return final +patch_functions = { + "phoneme_add": phoneme_add, # Add and edit value + "phoneme_remove": phoneme_remove, # Remove association and phoneme if necessary + # "language_name_edit": language_name_edit, # Change language name + # "language_source_add": language_source_add # Add/edit source +} + + +def phoneme_add(info): + """Add or edit value associated with phoneme.""" + # info = { + # language_id: language_id, + # phoneme: phoneme_name, + # value: phoneme_value + # } + phoneme = Phoneme.query.filter_by(name=info['phoneme']).first() + language = Language.query.filter_by(id=info['language_id']).first() + if phoneme: + link = Frequency.query.filter_by(language_id=language.id, phoneme_id=phoneme.id).first() + link.value = info['value'] + else: + phoneme = Phoneme(name=info['phoneme']) + link = Frequency(value=info['value']) + link.phoneme = phoneme + language.phonemes.append(link) + db.session.add_all([phoneme, link]) + + +def phoneme_remove(info): + """Remove a phoneme from a language.""" + # info = { + # language_id: language_id, + # phoneme_id: phoneme_id + # } + pass + + + # Render the client at the default URL @app.route("/") @@ -53,16 +93,22 @@ def initial(): return render_template('index.html') +# GET method for files +@app.route("/server/") +def file_return(lang_id): + return Language.query.filter_by(id=lang_id).first().source + + # Place for client to communicate with the server @app.route("/server", methods=["GET", "POST", "PATCH"]) # TODO add more methods def backend(): - # GET method returns the latest database - if request.method == "GET": - return jsonify(database()) + # # GET method returns the latest database + # if request.method == "GET": + # return jsonify(database()) # POST method appends input to database['values'] - elif request.method == "POST": + if request.method == "POST": recieved = request.get_json() language = Language(name=recieved['name'], source=recieved['source']) db.session.add(language) @@ -78,16 +124,19 @@ def backend(): language.phonemes.append(link) db.session.add(link) db.session.commit() - return jsonify(database()) + # 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()) + # PATCH method inputs edited language and returns updated database + elif request.method == "PATCH": + recieved = request.get_json() + patch_functions[recieved['action']](recieved['data']) + db.session.commit() + # database['values'] = [newlanguage if language['id'] == newlanguage['id'] else language for language in database['values']] + # saveDatabase() + + return jsonify(database()) -if __name__ == "__main__": - app.run(host="0.0.0.0") +# if __name__ == "__main__": +# app.run(host="0.0.0.0")