diff --git a/components/ecoindex/utils/screenshots.py b/components/ecoindex/utils/screenshots.py index c2be5b7..c61c778 100644 --- a/components/ecoindex/utils/screenshots.py +++ b/components/ecoindex/utils/screenshots.py @@ -1,10 +1,18 @@ import os from ecoindex.models import ScreenShot -from PIL import Image + +try: + from PIL import Image + + _pillow_available = True +except ImportError: + _pillow_available = False async def convert_screenshot_to_webp(screenshot: ScreenShot) -> None: + if not _pillow_available: + raise ImportError("Pillow is required for WebP conversion. Install it with: pip install ecoindex-scraper[webp]") image = Image.open(rf"{screenshot.get_png()}") width, height = image.size ratio = 800 / height if width > height else 600 / width @@ -17,7 +25,9 @@ async def convert_screenshot_to_webp(screenshot: ScreenShot) -> None: async def set_screenshot_rights( - screenshot: ScreenShot, uid: int | None = None, gid: int | None = None + screenshot: ScreenShot, + uid: int | None = None, + gid: int | None = None, ) -> None: if uid and gid: os.chown(path=screenshot.get_webp(), uid=uid, gid=gid) diff --git a/projects/ecoindex_api/pyproject.toml b/projects/ecoindex_api/pyproject.toml index b052e66..593c2f6 100644 --- a/projects/ecoindex_api/pyproject.toml +++ b/projects/ecoindex_api/pyproject.toml @@ -27,7 +27,7 @@ aiofile = "^3.8.8" alembic = "^1.12.1" celery = "^5.3.4" fastapi = "^0.109.1" -pillow = "^12.0.0" +pillow = { version = "^12.2.0", optional = true } playwright = "^1.39.0" playwright-stealth = "^1.0.6" pydantic = { version = ">=2.1.1,<=2.4.2", extras = ["email"] } @@ -46,7 +46,7 @@ ua-generator = "^2.0.5" uvicorn = "^0.23.2" [tool.poetry.group.worker.dependencies] -pillow = "^12.0.0" +pillow = { version = "^12.2.0", optional = true } playwright = "^1.39.0" playwright-stealth = "^1.0.6" diff --git a/projects/ecoindex_scraper/pyproject.toml b/projects/ecoindex_scraper/pyproject.toml index 825b771..07569df 100644 --- a/projects/ecoindex_scraper/pyproject.toml +++ b/projects/ecoindex_scraper/pyproject.toml @@ -24,10 +24,13 @@ pydantic = "^2.4.2" python = "^3.10" typing-extensions = "^4.8.0" pyyaml = "^6.0.1" -pillow = ">=10.1,<13.0" +pillow = { version = "^12.2.0", optional = true } setuptools = ">=69.5.1,<79.0.0" ua-generator = "^2.0.5" +[tool.poetry.extras] +webp = ["pillow"] + [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api" diff --git a/pyproject.toml b/pyproject.toml index f8ebf3f..27acbe0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,10 +36,12 @@ setuptools = "^78.1.1" cryptography = "^44.0.2" [tool.poetry.group.scraper.dependencies] -pillow = "^12.0.0" playwright = "^1.39.0" playwright-stealth = "^1.0.6" +[tool.poetry.group.scraper-webp.dependencies] +pillow = { version = "^12.2.0", optional = true } + [tool.poetry.group.cli.dependencies] click-spinner = "^0.1.10" jinja2 = "^3.1.3"