-
Notifications
You must be signed in to change notification settings - Fork 0
/
application.py
95 lines (75 loc) · 3.63 KB
/
application.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
'''
This is the Flask backend for the server that will display a map for the user and
and empty table. Javascript in the HTML will geolocate the map so that it is centered
on the user's location. When the user clicks on the map, a handler executes a Ajax call
POST that comes to the server (here) with the <lat,lng> of the location that the user
clicked on. The server contatcs the National Weather Service (NWS) Data feed
http://graphical.weather.gov/xml/rest.php
and retrieves a one day forecest for that <lat,lng> which (currently) consists of the
Temperature, and Dew Poing. This is then sent back to the frontend via json where
the front end uses the data to replace the table in the DOM of the web page.
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-flask.html
Using application.py as the filename and providing a callable application object
(the Flask object, in this case) allows AWS Elastic Beanstalk to easily find your
application's code.
Deployed at...
http://gwmap-env-ze2z8wipcu.elasticbeanstalk.com/
Create a virtualenv at a parallel level to this directory for running locally....
$ virtualenv -p python2.7 ./gmap_app_venv
$ gmap_app_venv/bin/pip install -r ./gmap_app/requirements.txt
$ . ./gmap_app_venv/bin/activate
Copywrite (c) 2015 Charles P Kollar
'''
from flask import Flask, send_file, request, json, jsonify, send_from_directory
import os
from utils import geo, nws, ca
'''
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-flask.html
Using application.py as the filename and providing a callable application object
(the Flask object, in this case) allows AWS Elastic Beanstalk to easily find your
application's code.
Flask will look for templates in the /templates folder
'''
application = Flask(__name__, static_url_path='')
@application.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'GET':
# This will put up a map that is geolocated to the user...
return send_file('templates/gmap.html')
# This should be a POST method with the moused lat and lng...
#import ipdb; ipdb.set_trace()
lat = request.json['lat']
lng = request.json['lng']
countrycode = geo.get_countrycode(lat, lng)
readings = []
if countrycode == 'US':
# XML REST api to get the 24-hr forecast for this lat/lng
# from the National Weather Service...
readings = nws.get_day_time_temp_dewpt(lat, lng)
elif countrycode == 'CA':
readings = ca.get_forecast(lat, lng)
# return the data to the front end...
json_ret = jsonify(countrycode=countrycode, readings=readings)
return json_ret
# http://stackoverflow.com/questions/20646822/how-to-serve-static-files-in-flask
@application.route('/js/<path:path>')
def send_js(path):
return send_from_directory('js', path)
@application.route('/css/<path:path>')
def send_css(path):
return send_from_directory('css', path)
# http://flask.pocoo.org/docs/0.10/patterns/favicon/
# http://www.freefavicon.com/freefavicons/objects/iconinfo/map-pin-152-195874.html
@application.route('/favicon.ico')
def favicon():
return send_from_directory(os.path.join(application.root_path, 'static'),
'favicon.ico',
mimetype='image/vnd.microsoft.icon')
if __name__ == "__main__":
# Setting debug to True enables debug output, and reload on code changes.
# This line should be removed before deploying a production app.
application.debug = True
# http://flask.pocoo.org/docs/0.10/quickstart/
# Externally Visible Server
# This tells your operating system to listen on all public IPs.
application.run(host='0.0.0.0')