/
app.py
100 lines (85 loc) · 2.8 KB
/
app.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# app.py
# Required imports
import os
from flask import Flask, request, jsonify
from firebase_admin import credentials, firestore, initialize_app
import logging
# Initialize Flask app
app = Flask(__name__)
# Initialize Firestore DB
cred = credentials.Certificate("serviceAccountKey.json")
default_app = initialize_app(cred)
db = firestore.client()
collection = db.collection('devfest')
@app.route('/add', methods=['POST'])
def create():
"""
create() : Add document to Firestore collection with request body.
Ensure you pass a custom ID as part of json body in post request,
e.g. json={'id': '1', 'title': 'Write a blog post'}
"""
try:
logging.info(request)
id = request.json['id']
title = request.json['title']
description = request.json['description']
speaker = request.json['speaker']
data = {
'description': description,
'title': title,
'speaker': speaker
}
collection.document(id).set(data)
return jsonify({"success": True}), 200
except Exception as e:
print(e)
return "An Error Occured:"
@app.route('/list', methods=['GET'])
def read():
"""
read() : Fetches documents from Firestore collection as JSON.
todo : Return document that matches query ID.
all_todos : Return all documents.
"""
try:
# Check if ID was passed to URL query
todo_id = request.args.get('id')
if todo_id:
todo = collection.document(todo_id).get()
return jsonify(todo.to_dict()), 200
else:
all_todos = [doc.to_dict() for doc in collection.stream()]
return jsonify(all_todos), 200
except Exception as e:
print(e)
return "An Error Occured:"
@app.route('/update', methods=['POST', 'PUT'])
def update():
"""
update() : Update document in Firestore collection with request body.
Ensure you pass a custom ID as part of json body in post request,
e.g. json={'id': '1', 'title': 'Write a blog post today'}
"""
try:
id = request.json['id']
collection.document(id).update(request.json)
return jsonify({"success": True}), 200
except Exception as e:
print(e)
return "An Error Occured:"
@app.route('/delete', methods=['GET', 'DELETE'])
def delete():
"""
delete() : Delete a document from Firestore collection.
"""
try:
# Check for ID in URL query
todo_id = request.args.get('id')
collection.document(todo_id).delete()
return jsonify({"success": True}), 200
except Exception as e:
print(e)
return "An Error Occured:"
port = int(os.environ.get('PORT', 8080))
if __name__ == '__main__':
app.run(threaded=True, host='0.0.0.0', port=port)