/
main.py
executable file
·67 lines (46 loc) · 1.63 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
from google.cloud import ndb
from flask import Flask, request
import json
class Plan(ndb.Model):
name = ndb.StringProperty()
data = ndb.TextProperty()
client = ndb.Client()
# Middleware to obtain new client context for each request. This code borrowed from Google
# at https://cloud.google.com/appengine/docs/standard/python3/migrating-to-cloud-ndb
def ndb_wsgi_middleware(wsgi_app):
def middleware(environ, start_response):
with client.context():
return wsgi_app(environ, start_response)
return middleware
app = Flask(__name__)
# Wrap app in middleware
app.wsgi_app = ndb_wsgi_middleware(app.wsgi_app)
@app.route('/')
def root():
return 'OK'
@app.route('/list/')
def list_plans():
return {'planlist': [{'name': p.name, 'key': p.key.urlsafe().decode('utf-8')} for p in Plan.query()]}
@app.route('/load/')
def load_plan():
plankey = request.args.get('plan')
plan = ndb.Key(urlsafe=plankey).get()
# TODO: Add error handling for bad plankey
return {'plan': plan.data, 'planname': plan.name, 'key': plankey}
@app.route('/save/', methods=['POST'])
def save_plan():
params = request.get_json(force=True)
planname = params['planname']
data = json.dumps(params['data'])
plan = Plan(name=planname, data=data)
key = plan.put()
return {'plankey' : key.urlsafe().decode('utf-8')}
@app.route('/update/', methods=['POST'])
def update_plan():
params = request.get_json(force=True)
plankey = params['plankey']
data = json.dumps(params['data'])
plan = ndb.Key(urlsafe=plankey).get()
plan.data = data
plan.put()
return {'plankey' : plankey.decode('utf-8')}