# HG changeset patch # User Paul Fisher # Date 1569734338 14400 # Node ID b1657de734d59412a2f6f18286f52fa8ee100dcc # Parent d8f38d9923876e3c0ecc0979b53a4cd305ce6326 Add HTTPWriter, which actually writes over HTTP. diff -r d8f38d992387 -r b1657de734d5 requirements.txt --- a/requirements.txt Sat Sep 28 20:21:35 2019 -0400 +++ b/requirements.txt Sun Sep 29 01:18:58 2019 -0400 @@ -3,3 +3,4 @@ attrs pymongo pytz +requests diff -r d8f38d992387 -r b1657de734d5 setup.py --- a/setup.py Sat Sep 28 20:21:35 2019 -0400 +++ b/setup.py Sun Sep 29 01:18:58 2019 -0400 @@ -11,6 +11,7 @@ 'attrs', 'pymongo', 'pytz', + 'requests', ], setup_requires=['wheel'], ) diff -r d8f38d992387 -r b1657de734d5 weatherlog/http_writer.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/weatherlog/http_writer.py Sun Sep 29 01:18:58 2019 -0400 @@ -0,0 +1,25 @@ +"""RemoteWriter which writes BSON to the given HTTP destination.""" + +import typing as t + +import bson +import requests + +from . import logger +from . import types + + +class HTTPWriter(logger.RemoteWriter): + + def __init__(self, url: str): + self._url = url + self._session = requests.Session() + self._session.headers['User-Agent'] = 'weatherlogger/0.0.1' + + def write(self, readings: t.Sequence[types.Reading]) -> None: + try: + data = b''.join(bson.BSON.encode(r.as_dict()) for r in readings) + response = self._session.post(self._url, data=data) + response.raise_for_status() + except requests.exceptions.RequestException as rex: + raise logger.RemoteWriteError("Coulndn't write values") from rex