From 46f12db2ef1250c9199d7720c5b9f1d5058d21e2 Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Fri, 26 Jul 2024 16:43:49 -0500 Subject: Add monadic wrapper for requests library. --- uploader/monadic_requests.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 uploader/monadic_requests.py diff --git a/uploader/monadic_requests.py b/uploader/monadic_requests.py new file mode 100644 index 0000000..d679fd3 --- /dev/null +++ b/uploader/monadic_requests.py @@ -0,0 +1,38 @@ +"""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) -- cgit v1.2.3