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:
Alessio Sergi 2016-12-17 18:50:50 +01:00
parent 3f372ef54a
commit 7e8a6c61f8
2 changed files with 17 additions and 16 deletions

View File

@ -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,9 +1662,7 @@ 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
if isinstance(fp, Path):
filename = str(fp) filename = str(fp)
open_fp = True 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):
@ -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:
from pathlib import Path
if isinstance(fp, Path):
filename = str(fp.resolve()) filename = str(fp.resolve())
except ImportError:
pass
if filename: if filename:
fp = builtins.open(filename, "rb") fp = builtins.open(filename, "rb")

View File

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