-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathflask_app.py
114 lines (93 loc) · 3.57 KB
/
flask_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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
from flask import Flask, jsonify
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import Session
from sqlalchemy import create_engine
# Database Setup
#####################################################
engine = create_engine("sqlite:///data/reduced_data.sqlite", echo=False)
#reflect database to new model and table
Base= automap_base()
#tables
Base.prepare(autoload_with=engine)
#save references to table
reduced_data= Base.classes.reduced_data
#Create session link from python to the DB
session= Session(engine)
#Flask Setup
#####################################################
app = Flask(__name__)
#####################################################
#Flask Routes
#####################################################
@app.route("/")
def home():
return (
"Welcome to the Electric Charge Station Finder Tool Home Page!<br/><br/>"
"Available Routes:<br/>"
"/api/v1.0/chargers_by_city/<town><br/>"
"/api/v1.0/chargers_by_state/<state>"
)
#Query results
@app.route("/api/v1.0/chargers_by_city/<town>")
def chargers_by_city(town):
results = session.query(reduced_data.Title,
reduced_data.AddressLine1,
reduced_data.Town,
reduced_data.StateOrProvince,
reduced_data.Postcode,
reduced_data.Latitude,
reduced_data.Longitude,
reduced_data.ConnectionTypeIDs).filter(reduced_data.Town == town).all()
session.close()
if not results:
return jsonify({'message': 'No results for the given city'}), 404
#Dictionary first API
address_list = []
for results in results:
address = {
"Location Name": results.Title,
"Address": results.AddressLine1,
"Town": results.Town,
"State": results.StateOrProvince,
"Zip Code": results.Postcode,
"Latitude": results.Latitude,
"Longitude": results.Longitude,
"ConnectionType": results.ConnectionTypeIDs
}
address_list.append(address)
#Return JSON
return jsonify(address_list)
#Query by State
@app.route("/api/v1.0/chargers_by_state/<state>")
def chargers_by_state(state):
results = session.query(reduced_data.Title,
reduced_data.AddressLine1,
reduced_data.Town,
reduced_data.StateOrProvince,
reduced_data.Postcode,
reduced_data.Latitude,
reduced_data.Longitude,
reduced_data.ConnectionTypeIDs).filter(reduced_data.StateOrProvince == state).all()
session.close()
if not results:
return jsonify({'message': 'No results for the given state'}), 404
#Dictionary first API
state_address_list = []
for results in results:
state_address = {
"Location Name": results.Title,
"Address": results.AddressLine1,
"Town": results.Town,
"State": results.StateOrProvince,
"Zip Code": results.Postcode,
"Latitude": results.Latitude,
"Longitude": results.Longitude,
"ConnectionType": results.ConnectionTypeIDs
}
state_address_list.append(state_address)
#Return JSON
return jsonify(state_address_list)
######################################################
if __name__ == "__main__":
app.run(debug=True)
session.close()