[Python-checkins] cpython (3.6): Issue #28228: imghdr now supports pathlib

berker.peksag python-checkins at python.org
Fri Sep 30 22:00:13 EDT 2016


https://hg.python.org/cpython/rev/929e3adefe7a
changeset:   104207:929e3adefe7a
branch:      3.6
parent:      104205:0fe04467c4b5
user:        Berker Peksag <berker.peksag at gmail.com>
date:        Sat Oct 01 05:01:54 2016 +0300
summary:
  Issue #28228: imghdr now supports pathlib

files:
  Doc/library/imghdr.rst  |  3 +++
  Lib/imghdr.py           |  4 +++-
  Lib/test/test_imghdr.py |  7 +++++++
  Misc/NEWS               |  2 ++
  4 files changed, 15 insertions(+), 1 deletions(-)


diff --git a/Doc/library/imghdr.rst b/Doc/library/imghdr.rst
--- a/Doc/library/imghdr.rst
+++ b/Doc/library/imghdr.rst
@@ -20,6 +20,9 @@
    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
--- 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 @@
     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
--- 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 @@
             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
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -46,6 +46,8 @@
 Library
 -------
 
+- Issue #28228: imghdr now supports pathlib.
+
 - Issue #28226: compileall now supports pathlib.
 
 - Issue #28314: Fix function declaration (C flags) for the getiterator() method

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list