Commit 2fb885cc authored by Berker Peksag's avatar Berker Peksag

Issue #28228: imghdr now supports pathlib

parent 1ffee9a0
...@@ -20,6 +20,9 @@ The :mod:`imghdr` module defines the following function: ...@@ -20,6 +20,9 @@ The :mod:`imghdr` module defines the following function:
string describing the image type. If optional *h* is provided, the *filename* 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. 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 The following image types are recognized, as listed below with the return value
from :func:`what`: from :func:`what`:
......
"""Recognize image file formats based on their first few bytes.""" """Recognize image file formats based on their first few bytes."""
from os import PathLike
__all__ = ["what"] __all__ = ["what"]
#-------------------------# #-------------------------#
...@@ -10,7 +12,7 @@ def what(file, h=None): ...@@ -10,7 +12,7 @@ def what(file, h=None):
f = None f = None
try: try:
if h is None: if h is None:
if isinstance(file, str): if isinstance(file, (str, PathLike)):
f = open(file, 'rb') f = open(file, 'rb')
h = f.read(32) h = f.read(32)
else: else:
......
import imghdr import imghdr
import io import io
import os import os
import pathlib
import unittest import unittest
import warnings import warnings
from test.support import findfile, TESTFN, unlink from test.support import findfile, TESTFN, unlink
...@@ -49,6 +50,12 @@ class TestImghdr(unittest.TestCase): ...@@ -49,6 +50,12 @@ class TestImghdr(unittest.TestCase):
self.assertEqual(imghdr.what(None, data), expected) self.assertEqual(imghdr.what(None, data), expected)
self.assertEqual(imghdr.what(None, bytearray(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_register_test(self):
def test_jumbo(h, file): def test_jumbo(h, file):
if h.startswith(b'eggs'): if h.startswith(b'eggs'):
......
...@@ -46,6 +46,8 @@ Core and Builtins ...@@ -46,6 +46,8 @@ Core and Builtins
Library Library
------- -------
- Issue #28228: imghdr now supports pathlib.
- Issue #28226: compileall now supports pathlib. - Issue #28226: compileall now supports pathlib.
- Issue #28314: Fix function declaration (C flags) for the getiterator() method - Issue #28314: Fix function declaration (C flags) for the getiterator() method
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment