diff --git a/Doc/library/imghdr.rst b/Doc/library/imghdr.rst index f11f6dcf8e6..800e919599d 100644 --- a/Doc/library/imghdr.rst +++ b/Doc/library/imghdr.rst @@ -20,6 +20,9 @@ The :mod:`imghdr` module defines the following function: string describing the image type. If optional *h* is provided, the *filename* is ignored and *h* is assumed to contain the byte stream to test. + .. versionchanged:: 3.6 + Accepts a :term:`path-like object`. + The following image types are recognized, as listed below with the return value from :func:`what`: diff --git a/Lib/imghdr.py b/Lib/imghdr.py index b26792539d5..76e8abb2d58 100644 --- a/Lib/imghdr.py +++ b/Lib/imghdr.py @@ -1,5 +1,7 @@ """Recognize image file formats based on their first few bytes.""" +from os import PathLike + __all__ = ["what"] #-------------------------# @@ -10,7 +12,7 @@ def what(file, h=None): f = None try: if h is None: - if isinstance(file, str): + if isinstance(file, (str, PathLike)): f = open(file, 'rb') h = f.read(32) else: diff --git a/Lib/test/test_imghdr.py b/Lib/test/test_imghdr.py index b54daf8e2ca..476ba95f173 100644 --- a/Lib/test/test_imghdr.py +++ b/Lib/test/test_imghdr.py @@ -1,6 +1,7 @@ import imghdr import io import os +import pathlib import unittest import warnings from test.support import findfile, TESTFN, unlink @@ -49,6 +50,12 @@ class TestImghdr(unittest.TestCase): self.assertEqual(imghdr.what(None, data), expected) self.assertEqual(imghdr.what(None, bytearray(data)), expected) + def test_pathlike_filename(self): + for filename, expected in TEST_FILES: + with self.subTest(filename=filename): + filename = findfile(filename, subdir='imghdrdata') + self.assertEqual(imghdr.what(pathlib.Path(filename)), expected) + def test_register_test(self): def test_jumbo(h, file): if h.startswith(b'eggs'): diff --git a/Misc/NEWS b/Misc/NEWS index 62fc004d93e..d3983f2fce1 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -46,6 +46,8 @@ Core and Builtins Library ------- +- Issue #28228: imghdr now supports pathlib. + - Issue #28226: compileall now supports pathlib. - Issue #28314: Fix function declaration (C flags) for the getiterator() method