Jupyter-ITVitae/assignment.ipynb

150 lines
2.4 MiB
Plaintext
Raw Normal View History

2024-02-29 13:25:58 +01:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [
{
"data": {
"image/jpeg": "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
"image/png": "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
"text/plain": [
"<PIL.Image.Image image mode=RGB size=1080x720>"
]
},
"execution_count": 75,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import requests\n",
"from PIL import Image\n",
"from io import BytesIO\n",
"\n",
"\n",
"class Cat:\n",
" \"\"\"Cat object storing the request data and image file from the cat API.\"\"\"\n",
"\n",
" def __init__(self, id, url, width, height):\n",
" self.id = id\n",
" self.url = url\n",
" self.width = width\n",
" self.height = height\n",
" self.image = get_cat_image(url)\n",
"\n",
" def get_image(self) -> Image:\n",
" \"\"\"Return the image of the cat object, cropped correctly if the width and height are changed.\n",
"\n",
" Returns:\n",
" Image: Image object that has been edited by the crop function.\n",
" \"\"\"\n",
" if (self.width, self.height) != self.image.size:\n",
" return self.image.resize((self.width, self.height))\n",
" return self.image\n",
"\n",
"\n",
"def get_cat_data() -> list[dict]:\n",
" \"\"\"Fetch a cat from the cat API, return a parsed JSON object.\n",
"\n",
" Returns:\n",
" list[dict]: Returns the parsed data, the cat API returns a list with length 1 with a dict in it.\n",
" \"\"\"\n",
" response = requests.get(\"https://api.thecatapi.com/v1/images/search\")\n",
" if response.status_code != 200:\n",
" return None\n",
" return response.json()\n",
"\n",
"\n",
"def get_cat(cat_json) -> Cat:\n",
" \"\"\"Create a cat image from a JSON object formatted like the cat API\n",
"\n",
" Args:\n",
" cat_json (list[dict]): Expects a list with length 1 with a dict in it that contains at least the fields:\n",
" (String) id\n",
" (String) url\n",
" (String) width\n",
" (String) height\n",
"\n",
" Returns:\n",
" Cat: a Cat object to store all the received data.\n",
" \"\"\"\n",
" return Cat(\n",
" cat_json[0].get(\"id\"),\n",
" cat_json[0].get(\"url\"),\n",
" cat_json[0].get(\"width\"),\n",
" cat_json[0].get(\"height\"),\n",
" )\n",
"\n",
"\n",
"def get_cat_image(url) -> Image:\n",
" \"\"\"Fetch an image of the cat provided, returns an image file.\n",
"\n",
" Returns:\n",
" Image: An image file parsed with the PIL library, read from a bytestream from the cats API.\n",
" \"\"\"\n",
" cr = requests.get(url)\n",
" if cr.status_code != 200:\n",
" print(f\"Error fetching cat image, error code {cr.status_code}\")\n",
" return None\n",
" return Image.open(BytesIO(cr.content))\n",
"\n",
"\n",
"cat = get_cat(get_cat_data())\n",
"cat.height = 720\n",
"cat.width = 1080\n",
"cat.get_image()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {},
"outputs": [
{
"data": {
"image/jpeg": "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
"image/png": "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
"text/plain": [
"<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=500x585>"
]
},
"execution_count": 74,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cat.image"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.8"
}
},
"nbformat": 4,
"nbformat_minor": 2
}