-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathapp.py
More file actions
executable file
·82 lines (61 loc) · 2.01 KB
/
app.py
File metadata and controls
executable file
·82 lines (61 loc) · 2.01 KB
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/env python3
from flask import Flask, jsonify, request
from json import dumps
from flask_restful import Resource, Api
import sqlalchemy
from jinja2.utils import markupsafe
from markupsafe import Markup
app = Flask(__name__)
pulpapi = Api(app)
# Load quotes from sqlite database
db = sqlalchemy.create_engine('sqlite:///quote.db')
class PulpResource(Resource):
'''Flask Resource with database connection'''
def __init__(self):
'''init db'''
self.db = db.connect()
def query_to_json(self, key='result', query=''):
result = {key: [dict(row) for row in self.db.execute(query)]}
return jsonify(result)
class Health(PulpResource):
'''
[GET] / - Returns 200 for health check because AWS is a pain in my ass
'''
def get(self):
return 'Healthy!'
class Characters(PulpResource):
'''
[GET] Character - Pulp Fiction Movie Characters
'''
def get(self):
'''
List all tables for each character
'''
query = self.db.execute("SELECT name FROM sqlite_master WHERE type='table';")
result = {'Available Characters': [dict(zip(tuple(query.keys()), i)) for i in query.cursor]}
return jsonify(result)
class Quote(PulpResource):
'''
[GET, POST] Quote - Pulp Fiction Movie Quotes
'''
def get(self, name):
'''
List random quote from passed character
'''
query = f"SELECT * FROM {name} ORDER BY RANDOM() LIMIT 1;"
return self.query_to_json(f"{name} says...", query)
def post(self, name):
'''
Inserts a quote into the database
'''
self.db.execute(f"INSERT INTO {name} VALUES('{request.form['quote']}');")
return jsonify({'status': 'success'})
# Routing
pulpapi.add_resource(Health, '/')
pulpapi.add_resource(Characters, '/characters')
pulpapi.add_resource(Quote, '/quote/<name>')
if __name__ == '__main__':
'''
No port/host neccessary since the docker launch specificies it.
'''
app.run(host='0.0.0.0')