Mercurial > personal > weatherlog
annotate weatherlog/types.py @ 14:c01f9929ae38
Make logger and HTTP writer more general and resilient.
This makes the logger and HTTP writer more general, by removing
any dependency upon the exact data type they are writing.
They can now handle any type of BSON-serializable dict,
and track what they have sent by keeping track of the last *byte*,
not the last timestamp.
author | Paul Fisher <paul@pfish.zone> |
---|---|
date | Tue, 15 Oct 2019 22:40:24 -0400 |
parents | 885bff085edf |
children | b5625b531d2d |
rev | line source |
---|---|
5
885bff085edf
Add remote logger class for eventual HTTP writer.
Paul Fisher <paul@pfish.zone>
parents:
3
diff
changeset
|
1 """Basic datatypes for the weather station. |
0
18dc6245c91a
Create initial version of weather sensor reader.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
2 """ |
18dc6245c91a
Create initial version of weather sensor reader.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
3 |
18dc6245c91a
Create initial version of weather sensor reader.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
4 import datetime |
18dc6245c91a
Create initial version of weather sensor reader.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
5 |
18dc6245c91a
Create initial version of weather sensor reader.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
6 import attr |
18dc6245c91a
Create initial version of weather sensor reader.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
7 import pytz |
18dc6245c91a
Create initial version of weather sensor reader.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
8 |
18dc6245c91a
Create initial version of weather sensor reader.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
9 |
18dc6245c91a
Create initial version of weather sensor reader.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
10 def _utc_now() -> datetime.datetime: |
18dc6245c91a
Create initial version of weather sensor reader.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
11 """utcnow, but timezone-aware.""" |
14
c01f9929ae38
Make logger and HTTP writer more general and resilient.
Paul Fisher <paul@pfish.zone>
parents:
5
diff
changeset
|
12 return datetime.datetime.now(tz=pytz.UTC) |
0
18dc6245c91a
Create initial version of weather sensor reader.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
13 |
18dc6245c91a
Create initial version of weather sensor reader.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
14 |
18dc6245c91a
Create initial version of weather sensor reader.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
15 @attr.s(frozen=True, slots=True) |
18dc6245c91a
Create initial version of weather sensor reader.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
16 class Reading(object): |
18dc6245c91a
Create initial version of weather sensor reader.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
17 """A single reading from a temperature/humidity sensor.""" |
18dc6245c91a
Create initial version of weather sensor reader.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
18 |
5
885bff085edf
Add remote logger class for eventual HTTP writer.
Paul Fisher <paul@pfish.zone>
parents:
3
diff
changeset
|
19 # The timestamp of the reading. |
885bff085edf
Add remote logger class for eventual HTTP writer.
Paul Fisher <paul@pfish.zone>
parents:
3
diff
changeset
|
20 sample_time = attr.ib(type=datetime.datetime) |
885bff085edf
Add remote logger class for eventual HTTP writer.
Paul Fisher <paul@pfish.zone>
parents:
3
diff
changeset
|
21 |
0
18dc6245c91a
Create initial version of weather sensor reader.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
22 # The temperature, in degrees Celsius. |
18dc6245c91a
Create initial version of weather sensor reader.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
23 temp_c = attr.ib(type=float) |
18dc6245c91a
Create initial version of weather sensor reader.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
24 |
18dc6245c91a
Create initial version of weather sensor reader.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
25 # The relative humidity, in percent. |
18dc6245c91a
Create initial version of weather sensor reader.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
26 rh_pct = attr.ib(type=float) |
18dc6245c91a
Create initial version of weather sensor reader.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
27 |
5
885bff085edf
Add remote logger class for eventual HTTP writer.
Paul Fisher <paul@pfish.zone>
parents:
3
diff
changeset
|
28 @classmethod |
885bff085edf
Add remote logger class for eventual HTTP writer.
Paul Fisher <paul@pfish.zone>
parents:
3
diff
changeset
|
29 def from_now(cls, **kwargs) -> 'Reading': |
885bff085edf
Add remote logger class for eventual HTTP writer.
Paul Fisher <paul@pfish.zone>
parents:
3
diff
changeset
|
30 """Creates a new reading taken at the current time.""" |
885bff085edf
Add remote logger class for eventual HTTP writer.
Paul Fisher <paul@pfish.zone>
parents:
3
diff
changeset
|
31 return cls(sample_time=_utc_now(), **kwargs) |
0
18dc6245c91a
Create initial version of weather sensor reader.
Paul Fisher <paul@pfish.zone>
parents:
diff
changeset
|
32 |
5
885bff085edf
Add remote logger class for eventual HTTP writer.
Paul Fisher <paul@pfish.zone>
parents:
3
diff
changeset
|
33 def as_dict(self): |
885bff085edf
Add remote logger class for eventual HTTP writer.
Paul Fisher <paul@pfish.zone>
parents:
3
diff
changeset
|
34 return attr.asdict(self, recurse=False) |