annotate weather_server/common.py @ 36:e5a03d63b3d9 default tip

Truncate, don’t round, temperatures displayed in HTML.
author Paul Fisher <paul@pfish.zone>
date Fri, 02 Jul 2021 20:38:11 -0400
parents 52ef21607b31
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 import pytz
efe7a1eff167 Create initial logger for weather server.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
7
efe7a1eff167 Create initial logger for weather server.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
8 BSON_OPTIONS = bson.DEFAULT_CODEC_OPTIONS.with_options(
efe7a1eff167 Create initial logger for weather server.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
9 tz_aware=True, tzinfo=pytz.UTC)
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
efe7a1eff167 Create initial logger for weather server.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
12 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
13 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
14
52ef21607b31 server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents: 0
diff changeset
15
52ef21607b31 server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents: 0
diff changeset
16 class DateEncoder(json.JSONEncoder):
52ef21607b31 server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents: 0
diff changeset
17
52ef21607b31 server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents: 0
diff changeset
18 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
19 if not isinstance(o, datetime.datetime):
52ef21607b31 server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents: 0
diff changeset
20 return super().default(o)
52ef21607b31 server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents: 0
diff changeset
21 return o.timestamp()
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
52ef21607b31 server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents: 0
diff changeset
24 JSON_ENCODER = DateEncoder(sort_keys=True)
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
52ef21607b31 server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents: 0
diff changeset
27 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
28 return JSON_ENCODER.encode(data)
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
52ef21607b31 server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents: 0
diff changeset
31 def utc_now():
52ef21607b31 server: Create endpoint to get some recent readings.
Paul Fisher <paul@pfish.zone>
parents: 0
diff changeset
32 return datetime.datetime.utcnow().replace(tzinfo=pytz.UTC)