comparison weather_server/server.py @ 39:b77c8e7d2742

Use zoneinfo rather than pytz.
author Paul Fisher <paul@pfish.zone>
date Tue, 01 Apr 2025 15:54:21 -0400
parents 7def5611895b
children 1a69004d8e5a
comparison
equal deleted inserted replaced
38:d5a18ecebf47 39:b77c8e7d2742
3 import pathlib 3 import pathlib
4 import sys 4 import sys
5 5
6 import bson 6 import bson
7 import flask 7 import flask
8 import pytz
9 8
10 from . import common 9 from . import common
11 from . import locations 10 from . import locations
12 11
13 12
41 if not hmac.compare_digest(password, loc.password): 40 if not hmac.compare_digest(password, loc.password):
42 flask.abort(400) 41 flask.abort(400)
43 entries = tuple(reader) 42 entries = tuple(reader)
44 except (KeyError, bson.InvalidBSON): 43 except (KeyError, bson.InvalidBSON):
45 flask.abort(400) 44 flask.abort(400)
46 now = datetime.datetime.now(tz=pytz.UTC) 45 now = datetime.datetime.now(tz=datetime.UTC)
47 loc.record(entries, now) 46 loc.record(entries, now)
48 return flask.jsonify({'status': 'OK'}) 47 return flask.jsonify({'status': 'OK'})
49 48
50 @app.route('/<location>') 49 @app.route('/<location>')
51 def show(location: str): 50 def show(location: str):
57 if last_reading: 56 if last_reading:
58 tz = loc.timezone() 57 tz = loc.timezone()
59 date = tz.normalize(last_reading.sample_time.astimezone(tz)) 58 date = tz.normalize(last_reading.sample_time.astimezone(tz))
60 else: 59 else:
61 date = None 60 date = None
62 now = datetime.datetime.now(tz=pytz.UTC) 61 now = datetime.datetime.now(tz=datetime.UTC)
63 diff = (now - date) if date else None 62 diff = (now - date) if date else None
64 is_recent = diff and diff < datetime.timedelta(hours=12) 63 is_recent = diff and diff < datetime.timedelta(hours=12)
65 return flask.render_template( 64 return flask.render_template(
66 'location.html', 65 'location.html',
67 location=loc, 66 location=loc,
68 last_reading=last_reading, 67 last_reading=last_reading,
69 date=date, 68 date=date,
70 date_format=f'%H:%M' if is_recent else '%Y-%m-%d %H:%M') 69 date_format='%H:%M' if is_recent else '%Y-%m-%d %H:%M')
71 70
72 @app.route('/<location>/recent') 71 @app.route('/<location>/recent')
73 def recent(location: str): 72 def recent(location: str):
74 try: 73 try:
75 loc = locs.get(location) 74 loc = locs.get(location)