mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-07-10 16:22:22 +03:00
Use pathlib2 for Path objects on Python < 3.4
The pathlib backport module is no longer maintained. The development has moved to the pathlib2 module instead. Quoting from the pathlib's README: "Attention: this backport module isn't maintained anymore. If you want to report issues or contribute patches, please consider the pathlib2 project instead." Other projects have already switched to pathlib2, most notably IPython and its dependencies.
This commit is contained in:
parent
3f372ef54a
commit
7e8a6c61f8
27
PIL/Image.py
27
PIL/Image.py
|
@ -132,6 +132,16 @@ try:
|
||||||
except ImportError:
|
except ImportError:
|
||||||
HAS_CFFI = False
|
HAS_CFFI = False
|
||||||
|
|
||||||
|
try:
|
||||||
|
from pathlib import Path
|
||||||
|
HAS_PATHLIB = True
|
||||||
|
except ImportError:
|
||||||
|
try:
|
||||||
|
from pathlib2 import Path
|
||||||
|
HAS_PATHLIB = True
|
||||||
|
except ImportError:
|
||||||
|
HAS_PATHLIB = False
|
||||||
|
|
||||||
|
|
||||||
def isImageType(t):
|
def isImageType(t):
|
||||||
"""
|
"""
|
||||||
|
@ -1652,11 +1662,9 @@ class Image(object):
|
||||||
if isPath(fp):
|
if isPath(fp):
|
||||||
filename = fp
|
filename = fp
|
||||||
open_fp = True
|
open_fp = True
|
||||||
elif sys.version_info >= (3, 4):
|
elif HAS_PATHLIB and isinstance(fp, Path):
|
||||||
from pathlib import Path
|
filename = str(fp)
|
||||||
if isinstance(fp, Path):
|
open_fp = True
|
||||||
filename = str(fp)
|
|
||||||
open_fp = True
|
|
||||||
if not filename and hasattr(fp, "name") and isPath(fp.name):
|
if not filename and hasattr(fp, "name") and isPath(fp.name):
|
||||||
# only set the name for metadata purposes
|
# only set the name for metadata purposes
|
||||||
filename = fp.name
|
filename = fp.name
|
||||||
|
@ -2267,13 +2275,8 @@ def open(fp, mode="r"):
|
||||||
filename = ""
|
filename = ""
|
||||||
if isPath(fp):
|
if isPath(fp):
|
||||||
filename = fp
|
filename = fp
|
||||||
else:
|
elif HAS_PATHLIB and isinstance(fp, Path):
|
||||||
try:
|
filename = str(fp.resolve())
|
||||||
from pathlib import Path
|
|
||||||
if isinstance(fp, Path):
|
|
||||||
filename = str(fp.resolve())
|
|
||||||
except ImportError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
if filename:
|
if filename:
|
||||||
fp = builtins.open(filename, "rb")
|
fp = builtins.open(filename, "rb")
|
||||||
|
|
|
@ -2,7 +2,6 @@ from helper import unittest, PillowTestCase, hopper
|
||||||
|
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
import os
|
import os
|
||||||
import sys
|
|
||||||
|
|
||||||
|
|
||||||
class TestImage(PillowTestCase):
|
class TestImage(PillowTestCase):
|
||||||
|
@ -50,10 +49,9 @@ class TestImage(PillowTestCase):
|
||||||
im = io.BytesIO(b'')
|
im = io.BytesIO(b'')
|
||||||
self.assertRaises(IOError, lambda: Image.open(im))
|
self.assertRaises(IOError, lambda: Image.open(im))
|
||||||
|
|
||||||
@unittest.skipIf(sys.version_info < (3, 4),
|
@unittest.skipUnless(Image.HAS_PATHLIB, "requires pathlib/pathlib2")
|
||||||
"pathlib only available in Python 3.4 or later")
|
|
||||||
def test_pathlib(self):
|
def test_pathlib(self):
|
||||||
from pathlib import Path
|
from PIL.Image import Path
|
||||||
im = Image.open(Path("Tests/images/hopper.jpg"))
|
im = Image.open(Path("Tests/images/hopper.jpg"))
|
||||||
self.assertEqual(im.mode, "RGB")
|
self.assertEqual(im.mode, "RGB")
|
||||||
self.assertEqual(im.size, (128, 128))
|
self.assertEqual(im.size, (128, 128))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user