Issue #28228: imghdr now supports pathlib

This commit is contained in:
Berker Peksag 2016-10-01 05:01:54 +03:00
parent 6c63f197df
commit ef223a19f7
4 changed files with 15 additions and 1 deletions

View file

@ -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`:

View file

@ -1,5 +1,7 @@
"""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):
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:

View file

@ -1,6 +1,7 @@
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):
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'):

View file

@ -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