-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathapp.py
51 lines (43 loc) · 1.91 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
import os
import json
from flask import Flask, request, make_response, jsonify
app = Flask(__name__)
ACCUWEATHER = None
NOAA = None
WEATHERDOTCOM = None
@app.route('/accuweather', methods=['GET'])
def accuweather():
latitude_param, longitude_param = 'latitude', 'longitude'
try:
# validate that the user provided 'latitude' and 'longitude' as separate float values
lat, lon = float(request.args.get(latitude_param)), float(request.args.get(longitude_param))
except:
return make_response('Must provide the "{:s}" and "{:s}" query params as float values\n'.format(latitude_param, longitude_param), 400)
return jsonify(ACCUWEATHER)
@app.route('/noaa', methods=['GET'])
def noaa():
param_name = 'latlon'
try:
# validate that the user provided the 'latlon' param as comma-separated floats
lat, lon = map(float, request.args.get(param_name).split(','))
except:
return make_response('Must provide the "{:s}" query parameter in the form "30.2335595,-97.7797051"\n'.format(param_name), 400)
return jsonify(NOAA)
@app.route('/weatherdotcom', methods=['POST'])
def weatherdotcom():
try:
# validate that the user provided the 'lat' and 'lon' params in a JSON body
lat_param, lon_param = 'lat', 'lon'
json_data = request.get_json()
lat = float(json_data[lat_param])
lon = float(json_data[lon_param])
except:
return make_response('Must provide the "{:s}" and "{:s}" query params as float values\n'.format(lat_param, lon_param), 400)
return jsonify(WEATHERDOTCOM)
data_path = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'data')
with open(os.path.join(data_path, 'accuweather.json'), 'r') as f:
ACCUWEATHER = json.load(f)
with open(os.path.join(data_path, 'noaa.json'), 'r') as f:
NOAA = json.load(f)
with open(os.path.join(data_path, 'weatherdotcom.json'), 'r') as f:
WEATHERDOTCOM = json.load(f)