"""Wrap requests functions with monads.""" import requests from pymonad.either import Left, Right, Either SUCCESS_CODES = (200, 201, 202, 203, 204, 205, 206, 207, 208, 226) def get(url, params=None, **kwargs) -> Either: """ A wrapper around `requests.get` function. Takes the same arguments as `requests.get`. :rtype: pymonad.either.Either """ try: resp = requests.get(url, params=params, **kwargs) if resp.status_code in SUCCESS_CODES: return Right(resp.json()) return Left(resp) except requests.exceptions.RequestException as _exc: return Left(exc) def post(url, data=None, json=None, **kwargs) -> Either: """ A wrapper around `requests.post` function. Takes the same arguments as `requests.post`. :rtype: pymonad.either.Either """ try: resp = requests.post(url, data=data, json=json, **kwargs) if resp.status_code in SUCCESS_CODES: return Right(resp.json()) return Left(resp) except requests.exceptions.RequestException as _exc: return Left(exc)