Mercurial > personal > weather-server
comparison weather_server/types.py @ 41:4af79d69b12e v0.2.0
Use units better suited for science.
| author | Paul Fisher <paul@pfish.zone> |
|---|---|
| date | Tue, 01 Apr 2025 16:04:52 -0400 |
| parents | b77c8e7d2742 |
| children | 10bde12a9163 |
comparison
equal
deleted
inserted
replaced
| 40:5cc8ce54ad84 | 41:4af79d69b12e |
|---|---|
| 9 T = t.TypeVar('T') | 9 T = t.TypeVar('T') |
| 10 | 10 |
| 11 | 11 |
| 12 def c_to_f(c: float) -> float: | 12 def c_to_f(c: float) -> float: |
| 13 return c * 9 / 5 + 32 | 13 return c * 9 / 5 + 32 |
| 14 | |
| 15 | |
| 16 def c_to_k(c: float) -> float: | |
| 17 return c + 273.15 | |
| 14 | 18 |
| 15 | 19 |
| 16 # Values from Sontag1990 via Wikipedia: | 20 # Values from Sontag1990 via Wikipedia: |
| 17 # https://en.wikipedia.org/wiki/Dew_point | 21 # https://en.wikipedia.org/wiki/Dew_point |
| 18 _MAGNUS_B = 17.62 | 22 _MAGNUS_B = 17.62 |
| 39 ingest_time = attr.ib(type=datetime.datetime) | 43 ingest_time = attr.ib(type=datetime.datetime) |
| 40 | 44 |
| 41 @property | 45 @property |
| 42 def temp_f(self) -> float: | 46 def temp_f(self) -> float: |
| 43 return c_to_f(self.temp_c) | 47 return c_to_f(self.temp_c) |
| 48 | |
| 49 @property | |
| 50 def temp_k(self) -> float: | |
| 51 return c_to_k(self.temp_k) | |
| 44 | 52 |
| 45 @property | 53 @property |
| 46 def dew_point_c(self) -> float: | 54 def dew_point_c(self) -> float: |
| 47 gamma = self._gamma | 55 gamma = self._gamma |
| 48 return _MAGNUS_C * gamma / (_MAGNUS_B - gamma) | 56 return _MAGNUS_C * gamma / (_MAGNUS_B - gamma) |
| 49 | 57 |
| 50 @property | 58 @property |
| 51 def dew_point_f(self) -> float: | 59 def dew_point_f(self) -> float: |
| 52 return c_to_f(self.dew_point_c) | 60 return c_to_f(self.dew_point_c) |
| 61 | |
| 62 @property | |
| 63 def dew_point_k(self) -> float: | |
| 64 return c_to_k(self.dew_point_c) | |
| 53 | 65 |
| 54 @classmethod | 66 @classmethod |
| 55 def from_dict(cls: t.Type[T], d: t.Dict[str, t.Any]) -> T: | 67 def from_dict(cls: t.Type[T], d: t.Dict[str, t.Any]) -> T: |
| 56 return cls(**{f.name: d[f.name] for f in attr.fields(cls)}) | 68 return cls(**{f.name: d[f.name] for f in attr.fields(cls)}) |
| 57 | 69 |
