Mercurial > personal > weatherlog
diff weatherlog/http_writer.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 | 6dbd9825b3f5 |
children | 9daa281d996b |
line wrap: on
line diff
--- a/weatherlog/http_writer.py Sun Sep 29 12:11:16 2019 -0400 +++ b/weatherlog/http_writer.py Tue Oct 15 22:40:24 2019 -0400 @@ -2,24 +2,22 @@ import typing as t -import bson import requests from . import logger -from . import types class HTTPWriter(logger.RemoteWriter): - def __init__(self, url: str, preamble: t.Dict[str, t.Any]): + def __init__(self, url: str, preamble: t.Dict[str, object]): self._url = url self._session = requests.Session() self._session.headers['User-Agent'] = 'weatherlogger/0.0.1' - self._preamble = bson.BSON.encode(preamble) + self._preamble = logger.bson_encode(preamble) - def write(self, readings: t.Sequence[types.Reading]) -> None: + def write(self, readings: t.Iterable[t.Dict[str, object]]) -> None: try: - data = b''.join(bson.BSON.encode(r.as_dict()) for r in readings) + data = b''.join(map(logger.bson_encode, readings)) response = self._session.post(self._url, data=self._preamble + data) response.raise_for_status() except requests.exceptions.RequestException as rex: