diff --git a/Lib/fontTools/designspaceLib/__init__.py b/Lib/fontTools/designspaceLib/__init__.py index 24c2247ff..7c0feafd8 100644 --- a/Lib/fontTools/designspaceLib/__init__.py +++ b/Lib/fontTools/designspaceLib/__init__.py @@ -1053,6 +1053,8 @@ class DesignSpaceDocument(LogMixin, AsDictMixin): return f.getvalue() def read(self, path): + if hasattr(path, "__fspath__"): # support os.PathLike objects + path = path.__fspath__() self.path = path self.filename = os.path.basename(path) reader = self.readerClass(path, self) @@ -1061,6 +1063,8 @@ class DesignSpaceDocument(LogMixin, AsDictMixin): self.findDefault() def write(self, path): + if hasattr(path, "__fspath__"): # support os.PathLike objects + path = path.__fspath__() self.path = path self.filename = os.path.basename(path) self.updatePaths() diff --git a/Lib/fontTools/misc/macRes.py b/Lib/fontTools/misc/macRes.py index 20bfa7177..db832ec54 100644 --- a/Lib/fontTools/misc/macRes.py +++ b/Lib/fontTools/misc/macRes.py @@ -33,6 +33,8 @@ class ResourceReader(MutableMapping): @staticmethod def openResourceFork(path): + if hasattr(path, "__fspath__"): # support os.PathLike objects + path = path.__fspath__() with open(path + '/..namedfork/rsrc', 'rb') as resfork: data = resfork.read() infile = BytesIO(data) diff --git a/Lib/fontTools/t1Lib/__init__.py b/Lib/fontTools/t1Lib/__init__.py index 00485e463..db5189a59 100644 --- a/Lib/fontTools/t1Lib/__init__.py +++ b/Lib/fontTools/t1Lib/__init__.py @@ -108,11 +108,12 @@ class T1Font(object): def read(path, onlyHeader=False): """reads any Type 1 font file, returns raw data""" - normpath = path.lower() + _, ext = os.path.splitext(path) + ext = ext.lower() creator, typ = getMacCreatorAndType(path) if typ == 'LWFN': return readLWFN(path, onlyHeader), 'LWFN' - if normpath[-4:] == '.pfb': + if ext == '.pfb': return readPFB(path, onlyHeader), 'PFB' else: return readOther(path), 'OTHER' diff --git a/Tests/designspaceLib/designspace_test.py b/Tests/designspaceLib/designspace_test.py index 5669093ca..24d9d30b9 100644 --- a/Tests/designspaceLib/designspace_test.py +++ b/Tests/designspaceLib/designspace_test.py @@ -4,6 +4,7 @@ from __future__ import (print_function, division, absolute_import, unicode_literals) import os +import sys import pytest import warnings @@ -785,3 +786,19 @@ def test_documentLib(tmpdir): assert dummyKey in new.lib assert new.lib[dummyKey] == dummyData +@pytest.mark.skipif(sys.version_info[:2] < (3, 6), reason="pathlib is only tested on 3.6 and up") +def test_read_with_path_object(): + import pathlib + source = (pathlib.Path(__file__) / "../data/test.designspace").resolve() + assert source.exists() + doc = DesignSpaceDocument() + doc.read(source) + +@pytest.mark.skipif(sys.version_info[:2] < (3, 6), reason="pathlib is only tested on 3.6 and up") +def test_with_with_path_object(tmpdir): + import pathlib + tmpdir = str(tmpdir) + dest = pathlib.Path(tmpdir) / "test.designspace" + doc = DesignSpaceDocument() + doc.write(dest) + assert dest.exists() diff --git a/Tests/t1Lib/t1Lib_test.py b/Tests/t1Lib/t1Lib_test.py index f5e934de3..385dad0d9 100644 --- a/Tests/t1Lib/t1Lib_test.py +++ b/Tests/t1Lib/t1Lib_test.py @@ -2,6 +2,7 @@ from __future__ import print_function, division, absolute_import from fontTools.misc.py23 import * import unittest import os +import sys from fontTools import t1Lib from fontTools.pens.basePen import NullPen import random @@ -50,6 +51,11 @@ class ReadWriteTest(unittest.TestCase): data = self.write(font, 'OTHER', dohex=True) self.assertEqual(font.getData(), data) + @unittest.skipIf(sys.version_info[:2] < (3, 6), "pathlib is only tested on 3.6 and up") + def test_read_with_path(self): + import pathlib + font = t1Lib.T1Font(pathlib.Path(PFB)) + @staticmethod def write(font, outtype, dohex=False): temp = os.path.join(DATADIR, 'temp.' + outtype.lower())