Mercurial > personal > weather-server
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) |