| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 | 
							- import io
 
- import PIL
 
- import PIL.Image
 
- import base64
 
- import pathlib
 
- from .exception import image_exception
 
- class image:
 
-     """ 
 
-     This class is responsible for image storing. It get image coded as base64
 
-     validate it, and when all went well, it could be saved and also thumbnail 
 
-     could be generated.
 
-     """
 
-     def __init__(
 
-         self, 
 
-         coded: str, 
 
-         max_size: int = 2 * 1024 * 1024 * 16
 
-     ) -> None:
 
-         """
 
-         This initialize new image saver.
 
-         Parameters:
 
-             coded (str): Image as base64 content
 
-             thumbnail (int): Diameters of image thumbnail (default = 400)
 
-             max_size (int): Max size of image file (default = 16Mb)
 
-         """
 
-         if len(coded) > max_size:
 
-             raise image_exception()
 
-         self.__content = base64.standard_b64decode(coded)
 
-         if not self.valid:
 
-             raise image_exception()
 
-     @property
 
-     def content(self) -> bytes:
 
-         """ Image as bytes. """
 
-         return self.__content
 
-     @property
 
-     def __file(self) -> io.BytesIO:
 
-         """  Image bytes as IO file like buffer. """
 
-         return io.BytesIO(self.content)
 
-     @property
 
-     def __image(self) -> PIL.Image:
 
-         """ New PIL Image object from received bytes. """
 
-         try:
 
-             return PIL.Image.open(self.__file)
 
-         
 
-         except:
 
-             raise image_exception()
 
-         
 
-     def save_thumbnail(
 
-         self, 
 
-         location: pathlib.Path,
 
-         diameter: int = 400
 
-     ) -> object:
 
-         """
 
-         This save generated thumbnail in given location. Format of the 
 
-         thumbnail is defined by location extension.
 
-         
 
-         Parameters:
 
-             location (pathlib.Path): Place to store thumbnail
 
-         Returns:
 
-             (image): Self to chain dot calls
 
-         """
 
-         with self.__image as image:
 
-             image.thumbnail((diameter, diameter))
 
-             image.save(location)
 
-         
 
-         return self
 
-     def save_full(self, location: pathlib.Path) -> object:
 
-         """
 
-         This save received image in given location. Format of the image is 
 
-         based on the location extension.
 
-         Parameters:
 
-             location (pathlib.Path): Place to store image
 
-         Returns:
 
-             (image): Self to chain dot calls
 
-         """
 
-         with self.__image as image:
 
-             image.save(location)
 
-         return self
 
-     @property
 
-     def valid(self) -> bool:   
 
-         """ True when image is valid, false when not. """
 
-         try:
 
-             with self.__image as image:
 
-                 image.verify()
 
-                 return True
 
-         
 
-         except:
 
-             return False
 
 
  |