Skip to content

Commit 64b66c8

Browse files
committed
Add more admissible types for convert_image + corresponding tests
1 parent a7fe235 commit 64b66c8

File tree

4 files changed

+34
-6
lines changed

4 files changed

+34
-6
lines changed

src/zimscraperlib/image/convertion.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
#!/usr/bin/env python3
22
# vim: ai ts=4 sts=4 et sw=4 nu
33

4+
import io
45
import pathlib
5-
from typing import Optional
6+
from typing import Union
67

78
import PIL
89

@@ -13,7 +14,9 @@
1314

1415

1516
def convert_image(
16-
src: pathlib.Path, dst: pathlib.Path, **params: Optional[dict]
17+
src: Union[pathlib.Path, io.BytesIO],
18+
dst: Union[pathlib.Path, io.BytesIO],
19+
**params: str,
1720
) -> None:
1821
"""convert an image file from one format to another
1922
params: Image.save() parameters. Depends on dest format.

src/zimscraperlib/image/transformation.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def resize_image(
1919
dst: Optional[Union[pathlib.Path, io.BytesIO]] = None,
2020
method: Optional[str] = "width",
2121
allow_upscaling: Optional[bool] = True, # noqa: FBT002
22-
**params: Optional[dict],
22+
**params: str,
2323
) -> None:
2424
"""resize an image to requested dimensions
2525

src/zimscraperlib/image/utils.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
#!/usr/bin/env python
22
# vim: ai ts=4 sts=4 et sw=4 nu
33

4+
import io
45
import pathlib
5-
from typing import Optional
6+
from typing import Optional, Union
67

78
from PIL import Image
89

910

1011
def save_image(
1112
src: Image, # pyright: ignore
12-
dst: pathlib.Path,
13+
dst: Union[pathlib.Path, io.BytesIO],
1314
fmt: Optional[str] = None,
14-
**params: Optional[dict],
15+
**params: str,
1516
) -> None:
1617
"""PIL.Image.save() wrapper setting default parameters"""
1718
args = {"JPEG": {"quality": 100}, "PNG": {}}.get(fmt, {}) # pyright: ignore

tests/image/test_image.py

+24
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,30 @@ def test_change_image_format_defaults(png_image, tmp_path):
296296
assert dst_image.format == "WEBP"
297297

298298

299+
def test_convert_io_src_dst(png_image: pathlib.Path):
300+
src = io.BytesIO(png_image.read_bytes())
301+
dst = io.BytesIO()
302+
convert_image(src, dst, fmt="PNG")
303+
dst_image = Image.open(dst)
304+
assert dst_image.format == "PNG"
305+
306+
307+
def test_convert_io_src_path_dst(png_image: pathlib.Path, tmp_path: pathlib.Path):
308+
src = io.BytesIO(png_image.read_bytes())
309+
dst = tmp_path / "test.png"
310+
convert_image(src, dst, fmt="PNG")
311+
dst_image = Image.open(dst)
312+
assert dst_image.format == "PNG"
313+
314+
315+
def test_convert_path_src_io_dst(png_image: pathlib.Path):
316+
src = png_image
317+
dst = io.BytesIO()
318+
convert_image(src, dst, fmt="PNG")
319+
dst_image = Image.open(dst)
320+
assert dst_image.format == "PNG"
321+
322+
299323
@pytest.mark.parametrize(
300324
"fmt,exp_size",
301325
[("png", 128), ("jpg", 128)],

0 commit comments

Comments
 (0)