|
6 | 6 | import pytz
|
7 | 7 |
|
8 | 8 |
|
9 |
| -class PersonMap: |
10 |
| - def __init__(self, name): |
11 |
| - self.name = name |
12 |
| - self.latitude = 0.0 |
13 |
| - self.longitude = 0.0 |
14 |
| - self.map_id = name + '_map' |
15 |
| - self.map = Map(identifier=self.map_id, lat=self.latitude, |
16 |
| - lng=self.longitude, markers=[(self.latitude, self.longitude)]) |
17 |
| - self.last_update = None |
18 |
| - |
19 |
| - def update_location(self, lat, lon, dt=None): |
20 |
| - self.latitude = lat |
21 |
| - self.longitude = lon |
22 |
| - self.map = Map(identifier=self.map_id, lat=self.latitude, |
23 |
| - lng=self.longitude, markers=[(self.latitude, self.longitude)]) |
24 |
| - self.last_update = dt |
25 |
| - |
26 |
| - |
27 |
| -device_owners = { |
28 |
| - '0529CF2B-AEBD-4E81-8DD0-A99DDCC4EA60': 'Greg', |
29 |
| - |
30 |
| -} |
31 |
| - |
32 |
| -owner_maps = { |
33 |
| - 'Greg': PersonMap('Greg L.'), |
34 |
| -} |
35 |
| - |
36 |
| - |
37 | 9 | app = Flask(__name__)
|
38 | 10 | GoogleMaps(app)
|
39 | 11 | tz = pytz.timezone('America/New_York')
|
40 | 12 |
|
41 | 13 |
|
| 14 | +# Waldo APIs |
| 15 | +devices = {} |
| 16 | + |
| 17 | + |
42 | 18 | @app.route('/')
|
43 | 19 | def home():
|
44 |
| - return render_template('home.html', owner_maps=owner_maps) |
| 20 | + return render_template('home.html', devices=devices) |
45 | 21 |
|
46 | 22 |
|
47 | 23 | @app.route('/about')
|
48 | 24 | def about():
|
49 | 25 | return render_template('about.html')
|
50 | 26 |
|
51 | 27 |
|
52 |
| -@app.route('/location', methods=['POST', 'GET']) |
53 |
| -def location(): |
| 28 | +class UserMap: |
| 29 | + def __init__(self, name): |
| 30 | + self.name = name |
| 31 | + self.latitude = 42.4343779 |
| 32 | + self.longitude = -83.9891627 |
| 33 | + self.map_id = name + '_map' |
| 34 | + self.map = Map(identifier=self.map_id, lat=self.latitude, |
| 35 | + lng=self.longitude, markers=[(self.latitude, self.longitude)]) |
| 36 | + self.last_update = None |
| 37 | + |
| 38 | + def update_location(self, lat, lon, dt=None): |
| 39 | + self.latitude = lat |
| 40 | + self.longitude = lon |
| 41 | + self.map = Map(identifier=self.map_id, lat=self.latitude, |
| 42 | + lng=self.longitude, markers=[(self.latitude, self.longitude)]) |
| 43 | + self.last_update = dt |
| 44 | + |
54 | 45 |
|
55 |
| - device = request.args.get('p') |
56 |
| - # get time in tz |
57 |
| - posix_timestamp = request.args.get('t') |
58 |
| - dt = datetime.fromtimestamp(float(posix_timestamp), tz) |
59 |
| - latitude = request.args.get('lat') |
60 |
| - longitude = request.args.get('lng') |
| 46 | +class Device: |
| 47 | + def __init__(self, device_id, user_id, name): |
| 48 | + self.device_id = device_id |
| 49 | + self.name = name |
| 50 | + self.user_id = user_id |
| 51 | + self.map = UserMap(name) |
61 | 52 |
|
62 |
| - if device in device_owners: |
63 |
| - owner = device_owners[device] |
64 |
| - owner_map = owner_maps[owner] |
65 |
| - owner_map.update_location(latitude, longitude, dt) |
66 |
| - else: |
67 |
| - owner = 'unknown (device: ' + device + ')' |
| 53 | + def update_device(self, user_id, name): |
| 54 | + self.user_id = user_id |
| 55 | + self.name = name |
68 | 56 |
|
69 |
| - result = 'Lifeguard location updated at ' + dt.strftime('%Y-%m-%d %I:%M:%S %p') + ' for ' + owner + ': ' + latitude + ',' + longitude |
70 |
| - print(result) |
71 |
| - return result |
72 | 57 |
|
| 58 | +@app.route('/devicecheckin', methods=['POST']) |
| 59 | +def device_check_in(): |
| 60 | + checkin_data = request.get_json() |
73 | 61 |
|
74 |
| -@app.route('/register', methods=['POST', 'GET']) |
75 |
| -def register_user(): |
| 62 | + device_id = checkin_data['id'] |
| 63 | + lat = checkin_data['lat'] |
| 64 | + lng = checkin_data['lng'] |
| 65 | + time = checkin_data['time'] |
| 66 | + #mode = checkin_data['mode'] |
| 67 | + dt = datetime.fromtimestamp(float(time), tz) |
76 | 68 |
|
77 |
| - device = request.args.get('p') |
78 |
| - # get time in tz |
79 |
| - posix_timestamp = request.args.get('t') |
80 |
| - dt = datetime.fromtimestamp(float(posix_timestamp), tz) |
81 |
| - user_id = request.args.get('uid') |
82 |
| - latitude = request.args.get('lat') |
83 |
| - longitude = request.args.get('lng') |
| 69 | + result = "Waldo device check in API result: " |
84 | 70 |
|
85 |
| - if device in device_owners: |
86 |
| - owner_maps[device_owners[device]].update_location(latitude, longitude, dt) |
| 71 | + if device_id in devices: |
| 72 | + device = devices[device_id] |
| 73 | + map = device.map |
| 74 | + map.update_location(lat, lng, dt) |
| 75 | + result = result + "updating device {} with location (lat,ln) ({},{}) at {}.".format(device_id, lat, lng, dt) |
87 | 76 | else:
|
88 |
| - owner_maps[user_id] = PersonMap(user_id) |
89 |
| - owner_maps[user_id].update_location(latitude, longitude, dt) |
90 |
| - device_owners[device] = user_id |
91 |
| - |
92 |
| - result = 'Lifeguard user registered with user name ' + user_id |
93 |
| - print(result) |
| 77 | + result = result + "error due to unknown device." |
94 | 78 | return result
|
95 | 79 |
|
96 | 80 |
|
97 |
| -@app.route('/visit', methods=['POST', 'GET']) |
98 |
| -def visit(): |
| 81 | +@app.route('/registration', methods=['POST']) |
| 82 | +def device_registration(): |
| 83 | + registration_data = request.get_json() |
99 | 84 |
|
100 |
| - user = request.args.get('user') |
101 |
| - # get time in tz |
102 |
| - timestamp = request.args.get('t') |
| 85 | + device_id = registration_data['deviceId'] |
| 86 | + user_id = registration_data['userId'] |
| 87 | + name = registration_data['name'] |
103 | 88 |
|
104 |
| - latitude = request.args.get('lat') |
105 |
| - longitude = request.args.get('lng') |
106 |
| - arrive = request.args.get('arrive') |
107 |
| - depart = request.args.get('depart') |
| 89 | + result = "Waldo user registration API result: " |
108 | 90 |
|
109 |
| - if user in owner_maps: |
110 |
| - owner_map = owner_maps[user] |
111 |
| - owner_map.update_location(latitude, longitude) |
| 91 | + if device_id in devices: |
| 92 | + devices[device_id].update_device(user_id, name) |
| 93 | + result = result + "updating device {} with user name {} with user ID of {}.".format(device_id, name, user_id) |
112 | 94 | else:
|
113 |
| - user = 'Unknown user: ' + user |
114 |
| - |
115 |
| - result = 'Lifeguard visit update at ' + timestamp + ' for ' + user + ': ' + ' arrived at ' + arrive + \ |
116 |
| - ', departed at ' + depart + ', at location ' + latitude + ',' + longitude |
| 95 | + device = Device(device_id, user_id, name) |
| 96 | + devices[device_id] = device |
| 97 | + result = result + "adding device {} for user name {} with user ID of {}.".format(device_id, name, user_id) |
117 | 98 |
|
118 |
| - print(result) |
119 | 99 | return result
|
120 | 100 |
|
121 | 101 |
|
122 |
| -# Waldo APIs |
123 |
| -@app.route('/devicecheckin', methods=['POST']) |
124 |
| -def device_check_in(): |
125 |
| - checkin_data = request.get_json() |
126 |
| - |
127 |
| - device_id = checkin_data['id'] |
128 |
| - lat = checkin_data['lat'] |
129 |
| - lng = checkin_data['lng'] |
130 |
| - time = checkin_data['time'] |
131 |
| - mode = checkin_data['mode'] |
132 |
| - |
133 |
| - |
134 | 102 | if __name__ == '__main__':
|
135 | 103 | app.debug = True
|
136 | 104 | app.run()
|
0 commit comments