Mercurial > personal > weather-server
annotate weather_server/common.py @ 39:b77c8e7d2742
Use zoneinfo rather than pytz.
author | Paul Fisher <paul@pfish.zone> |
---|---|
date | Tue, 01 Apr 2025 15:54:21 -0400 |
parents | 52ef21607b31 |
children |
rev | line source |
---|---|
11
52ef21607b31
server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents:
0
diff
changeset
|
1 import datetime |
52ef21607b31
server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents:
0
diff
changeset
|
2 import json |
0
efe7a1eff167
Create initial logger for weather server.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
3 import typing as t |
efe7a1eff167
Create initial logger for weather server.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
4 |
efe7a1eff167
Create initial logger for weather server.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
5 import bson |
efe7a1eff167
Create initial logger for weather server.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
6 |
efe7a1eff167
Create initial logger for weather server.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
7 BSON_OPTIONS = bson.DEFAULT_CODEC_OPTIONS.with_options( |
39
b77c8e7d2742
Use zoneinfo rather than pytz.
Paul Fisher <paul@pfish.zone>
parents:
11
diff
changeset
|
8 tz_aware=True, tzinfo=datetime.UTC) |
0
efe7a1eff167
Create initial logger for weather server.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
9 |
efe7a1eff167
Create initial logger for weather server.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
10 |
efe7a1eff167
Create initial logger for weather server.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
11 def bson_encode(data: t.Dict[str, t.Any]) -> bytes: |
efe7a1eff167
Create initial logger for weather server.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
12 return bson.BSON.encode(data, codec_options=BSON_OPTIONS) |
11
52ef21607b31
server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents:
0
diff
changeset
|
13 |
52ef21607b31
server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents:
0
diff
changeset
|
14 |
52ef21607b31
server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents:
0
diff
changeset
|
15 class DateEncoder(json.JSONEncoder): |
52ef21607b31
server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents:
0
diff
changeset
|
16 |
52ef21607b31
server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents:
0
diff
changeset
|
17 def default(self, o: t.Any) -> t.Any: |
52ef21607b31
server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents:
0
diff
changeset
|
18 if not isinstance(o, datetime.datetime): |
52ef21607b31
server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents:
0
diff
changeset
|
19 return super().default(o) |
52ef21607b31
server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents:
0
diff
changeset
|
20 return o.timestamp() |
52ef21607b31
server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents:
0
diff
changeset
|
21 |
52ef21607b31
server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents:
0
diff
changeset
|
22 |
52ef21607b31
server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents:
0
diff
changeset
|
23 JSON_ENCODER = DateEncoder(sort_keys=True) |
52ef21607b31
server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents:
0
diff
changeset
|
24 |
52ef21607b31
server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents:
0
diff
changeset
|
25 |
52ef21607b31
server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents:
0
diff
changeset
|
26 def json_dumps(data: t.Any) -> str: |
52ef21607b31
server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents:
0
diff
changeset
|
27 return JSON_ENCODER.encode(data) |
52ef21607b31
server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents:
0
diff
changeset
|
28 |
52ef21607b31
server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents:
0
diff
changeset
|
29 |
52ef21607b31
server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents:
0
diff
changeset
|
30 def utc_now(): |
39
b77c8e7d2742
Use zoneinfo rather than pytz.
Paul Fisher <paul@pfish.zone>
parents:
11
diff
changeset
|
31 return datetime.datetime.now(datetime.UTC) |