Skip to content

Instantly share code, notes, and snippets.

@cryocaustik
Last active July 8, 2021 01:57
Show Gist options
  • Save cryocaustik/03b1441f3cf5bb1f7085e3e491389a01 to your computer and use it in GitHub Desktop.
Save cryocaustik/03b1441f3cf5bb1f7085e3e491389a01 to your computer and use it in GitHub Desktop.
Example of using python for RESTful data validation
import requests
import logging
from datetime import datetime
from pathlib import Path
LOG_DIR = Path("./logs")
logger = logging.getLogger("py-api-data-validation")
logging.basicConfig(
level=logging.INFO,
filename=LOG_DIR /
"{nm}_{dt}.log".format(
nm=logger.name, dt=datetime.now().strftime("%Y-%m-%d")),
filemode="a",
format="%(asctime)s - %(levelname)s - %(name)s - %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)
def error(caller, err, msgs=[]):
err_msg = f"{caller} - {type(err).__name__} - {err.args}"
logger.error(err_msg)
print(err_msg)
if msgs and len(msgs) > 0:
for m in msgs:
_m = f"{caller} - {m}"
logger.error(_m)
print(_m)
def get(url):
try:
response = requests.get(url)
if response.status_code != 200:
response.raise_for_status()
return response.json()
except Exception as err:
error("get", err, [{"url": url}])
def test_1():
try:
data = get("https://reqres.in/api/users/2")
assert "data" in data, "data not found in response json"
expected_keys = ["id", "email", "first_namee"]
for ek in expected_keys:
assert ek in data["data"], f"{ek} not found in data"
return True
except AssertionError as err:
error("test_1 - assert", err)
return False
except Exception as err:
error("test_1", err)
return False
if __name__ == "__main__":
print(f"test 1 pass: {test_1()}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment