From 58b7cde11fb15ae8df482cb677e4bb58e4437b5f Mon Sep 17 00:00:00 2001 From: 201st-Luka Date: Fri, 25 Aug 2023 20:13:41 +0200 Subject: [PATCH] feat: implemented image download --- README.md | 1 - pyclasher/api/models/base_models.py | 19 ++++++++++++++----- pyclasher/api/models/base_models.pyi | 10 ++++++---- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 7947f2e..9ada5a6 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,6 @@ good as I can. - more bulk requests - pytests for every request - pytests for the models -- possibility to download files (images, etc) from `api-assets.clashofclans.com` ### Planned utils diff --git a/pyclasher/api/models/base_models.py b/pyclasher/api/models/base_models.py index 6ab8327..4a00721 100644 --- a/pyclasher/api/models/base_models.py +++ b/pyclasher/api/models/base_models.py @@ -1,18 +1,27 @@ from datetime import datetime +from aiohttp import ClientSession + from .abc import BaseModel -from ...exceptions import InvalidTimeFormat +from ...exceptions import InvalidTimeFormat, MISSING class ImageUrl: - __url = None - def __init__(self, url): self.__url = url return - async def get_image(self): - raise NotImplementedError + async def get_image(self, logger=MISSING) -> bytes: + async with ClientSession() as session: + async with session.get(self.url) as request: + if request.status == 200: + logger.info(f"Successfully downloaded {self.url}") + return await request.read() + + async def save_image(self, filename, logger=MISSING): + image = await self.get_image(logger) + with open(filename, "wb") as file: + file.write(image) @property def url(self): diff --git a/pyclasher/api/models/base_models.pyi b/pyclasher/api/models/base_models.pyi index 3b5a2a5..d9d4369 100644 --- a/pyclasher/api/models/base_models.pyi +++ b/pyclasher/api/models/base_models.pyi @@ -1,6 +1,7 @@ """ base models for this API wrapper client """ +from logging import Logger from .abc import BaseModel from ...exceptions import MISSING, Missing @@ -10,19 +11,20 @@ class ImageUrl: """ image URL model - :cvar __url: URL of the image + :ivar __url: URL of the image :type __url: str """ - __url: str = None - def __init__(self, url: str) -> None: """ initialisation of the image url model """ self.__url = url - async def get_image(self): + async def get_image(self, logger: Logger = MISSING) -> bytes: + ... + + async def save_image(self, logger: Logger): """ NOT IMPLEMENTED YET