Issue #28228: imghdr now supports pathlib
authorBerker Peksag <berker.peksag@gmail.com>
Sat, 1 Oct 2016 02:01:54 +0000 (05:01 +0300)
committerBerker Peksag <berker.peksag@gmail.com>
Sat, 1 Oct 2016 02:01:54 +0000 (05:01 +0300)
Doc/library/imghdr.rst
Lib/imghdr.py
Lib/test/test_imghdr.py
Misc/NEWS

index f11f6dcf8e676997ac6b12da33477de8f4db48a5..800e919599d9cbf6a15bff1b862b67a8ca25ab59 100644 (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*
    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`:
 
index b26792539d5be169b8a8fbc64cb46ffd49a14fcc..76e8abb2d5833d487ba94e9ebe31f66e1fb9df0c 100644 (file)
@@ -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:
index b54daf8e2ca1a77aea49cbff6db2ee2c010c9d32..476ba95f173c1cd6f2e28ea98c21045ac4ffd3dc 100644 (file)
@@ -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'):
index 62fc004d93ecd0b36909804fcbb5164b8dac8f95..d3983f2fce1f43e55ea3b6aaefe454e5ffcfaaeb 100644 (file)
--- 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