/
server.py
38 lines (32 loc) · 1.31 KB
/
server.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
import flask
import flask_socketio
from models import Weather
app = flask.Flask(__name__)
app.config['SECRET_KEY'] = 'make-a-random-secret!'
socketio = flask_socketio.SocketIO(app)
def replace_stored_data(data):
# Delete existing data
query = Weather.delete().where((Weather.lattitude == data['lat']) & (Weather.longitude==data['long']))
query.execute()
# Save new data
Weather.create(lattitude=data['lat'], longitude=data['long'], temp=data['temp'])
# Process data and broadcast
def handleWeather(data):
if float(data['lat']) and float(data['long']) and float(data['temp']):
replace_stored_data(data);
socketio.emit('data', { 'lattitude':data['lat'], 'longitude':data['long'], 'temp':data['temp'] })
@app.route('/', methods=['GET', 'POST'])
def index():
if flask.request.method == 'POST':
handleWeather(flask.request.values)
return flask.jsonify(status="ok")
else:
return flask.render_template('index.html')
# Initialise Map with already existing values in DB
@socketio.on('connect', namespace='/')
def init_maps():
data = [x.json() for x in Weather.select()] # Python list comprehension, .json() method is defined in models
if data:
socketio.emit('data-multiple',data)
if __name__ == '__main__':
socketio.run(app,host='127.0.0.1',port=5000)