1
0
Fork 0
mirror of https://github.com/YunoHost/apps.git synced 2024-09-03 20:06:07 +02:00
apps/tools/logos_check.py

75 lines
2.1 KiB
Python
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
import sys
import argparse
from pathlib import Path
from PIL import Image
class ImageCheck():
def __init__(self, imgpath: Path) -> None:
self.imgpath = imgpath
self.image = Image.open(imgpath)
self.fails: list[str] = []
def check(self) -> bool:
self.fails.clear()
for fn_name in dir(self):
if fn_name.startswith("check_"):
getattr(self, fn_name)()
if not self.fails:
return True
print(f"Image '{self.imgpath}' failed tests:")
for fail in self.fails:
print(f" - {fail}")
print()
return False
def check_type(self) -> None:
format = self.image.format.lower()
accepted_formats = ["png", "jpeg", "webp"]
if format not in accepted_formats:
self.fails.append(f"Image should be one of {', '.join(accepted_formats)} but is {format}")
def check_dimensions(self) -> None:
dim_min, dim_max = 96, 300
dimensions_range = range(dim_min, dim_max+1)
w, h = self.image.width, self.image.height
if w not in dimensions_range or h not in dimensions_range:
self.fails.append(f"Dimensions should be in [{dim_min}, {dim_max}] but are {w}×{h}")
def check_ratio(self) -> None:
w, h = self.image.width, self.image.height
if w != h:
self.fails.append(f"Image is not square but {w}×{h}")
def check_filesize(self) -> None:
filesize = self.imgpath.stat().st_size
max_size = 80_000
if filesize > max_size:
self.fails.append(f"Filesize should be <={max_size/1000}kB but is {filesize/1000}kB")
def check_compressed(self) -> None:
pass
def main() -> None:
parser = argparse.ArgumentParser()
parser.add_argument("logos", nargs="+", type=Path, help="Logos to check")
args = parser.parse_args()
total_result = True
for logo in args.logos:
checker = ImageCheck(logo)
if checker.check() is not True:
total_result = False
if not total_result:
sys.exit(1)
if __name__ == "__main__":
main()