import typing import collections.abc from .directory_image import directory_image from .product import product from .exception import not_ready_exception class product_response: def __init__(self, images: directory_image) -> None: self.__images = images @property def images(self) -> directory_image: return self.__images def single(self, target: product) -> dict: if not target.ready: raise not_ready_exception(target) covers = directory_image.server_path() + "/" return { "name": target.name, "description": target.description, "author": target.author, "image": covers + self.images.get_full_name(target), "thumbnail": covers + self.images.get_thumbnail_name(target), "stock_count": target.stock_count, "on_stock": target.on_stock, "barcode": target.barcode } def collection(self, targets: typing.Iterable[product]) -> list: result = list() for count in targets: if not isinstance(count, product): raise TypeError("Product list must contain only products.") result.append(self.single(count)) return result