[designspaceLib] [t1Lib] [misc.macRes] fix some cases where pathlib.Path objects were not accepted (#1421)
* fix two cases where pathlib.Path objects were not accepted * make macRes reader accept os.PathLike objects * use __fspath__ explicitly to support os.PathLike paths * use __fspath__ explicitly to support os.PathLike paths * convert tmpdir to str * only test pathlib.Path on Python 3.6 and up
This commit is contained in:
parent
8e080f2a82
commit
327b05d8c0
@ -1053,6 +1053,8 @@ class DesignSpaceDocument(LogMixin, AsDictMixin):
|
|||||||
return f.getvalue()
|
return f.getvalue()
|
||||||
|
|
||||||
def read(self, path):
|
def read(self, path):
|
||||||
|
if hasattr(path, "__fspath__"): # support os.PathLike objects
|
||||||
|
path = path.__fspath__()
|
||||||
self.path = path
|
self.path = path
|
||||||
self.filename = os.path.basename(path)
|
self.filename = os.path.basename(path)
|
||||||
reader = self.readerClass(path, self)
|
reader = self.readerClass(path, self)
|
||||||
@ -1061,6 +1063,8 @@ class DesignSpaceDocument(LogMixin, AsDictMixin):
|
|||||||
self.findDefault()
|
self.findDefault()
|
||||||
|
|
||||||
def write(self, path):
|
def write(self, path):
|
||||||
|
if hasattr(path, "__fspath__"): # support os.PathLike objects
|
||||||
|
path = path.__fspath__()
|
||||||
self.path = path
|
self.path = path
|
||||||
self.filename = os.path.basename(path)
|
self.filename = os.path.basename(path)
|
||||||
self.updatePaths()
|
self.updatePaths()
|
||||||
|
@ -33,6 +33,8 @@ class ResourceReader(MutableMapping):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def openResourceFork(path):
|
def openResourceFork(path):
|
||||||
|
if hasattr(path, "__fspath__"): # support os.PathLike objects
|
||||||
|
path = path.__fspath__()
|
||||||
with open(path + '/..namedfork/rsrc', 'rb') as resfork:
|
with open(path + '/..namedfork/rsrc', 'rb') as resfork:
|
||||||
data = resfork.read()
|
data = resfork.read()
|
||||||
infile = BytesIO(data)
|
infile = BytesIO(data)
|
||||||
|
@ -108,11 +108,12 @@ class T1Font(object):
|
|||||||
|
|
||||||
def read(path, onlyHeader=False):
|
def read(path, onlyHeader=False):
|
||||||
"""reads any Type 1 font file, returns raw data"""
|
"""reads any Type 1 font file, returns raw data"""
|
||||||
normpath = path.lower()
|
_, ext = os.path.splitext(path)
|
||||||
|
ext = ext.lower()
|
||||||
creator, typ = getMacCreatorAndType(path)
|
creator, typ = getMacCreatorAndType(path)
|
||||||
if typ == 'LWFN':
|
if typ == 'LWFN':
|
||||||
return readLWFN(path, onlyHeader), 'LWFN'
|
return readLWFN(path, onlyHeader), 'LWFN'
|
||||||
if normpath[-4:] == '.pfb':
|
if ext == '.pfb':
|
||||||
return readPFB(path, onlyHeader), 'PFB'
|
return readPFB(path, onlyHeader), 'PFB'
|
||||||
else:
|
else:
|
||||||
return readOther(path), 'OTHER'
|
return readOther(path), 'OTHER'
|
||||||
|
@ -4,6 +4,7 @@ from __future__ import (print_function, division, absolute_import,
|
|||||||
unicode_literals)
|
unicode_literals)
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
import pytest
|
import pytest
|
||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
@ -785,3 +786,19 @@ def test_documentLib(tmpdir):
|
|||||||
assert dummyKey in new.lib
|
assert dummyKey in new.lib
|
||||||
assert new.lib[dummyKey] == dummyData
|
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()
|
||||||
|
@ -2,6 +2,7 @@ from __future__ import print_function, division, absolute_import
|
|||||||
from fontTools.misc.py23 import *
|
from fontTools.misc.py23 import *
|
||||||
import unittest
|
import unittest
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
from fontTools import t1Lib
|
from fontTools import t1Lib
|
||||||
from fontTools.pens.basePen import NullPen
|
from fontTools.pens.basePen import NullPen
|
||||||
import random
|
import random
|
||||||
@ -50,6 +51,11 @@ class ReadWriteTest(unittest.TestCase):
|
|||||||
data = self.write(font, 'OTHER', dohex=True)
|
data = self.write(font, 'OTHER', dohex=True)
|
||||||
self.assertEqual(font.getData(), data)
|
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
|
@staticmethod
|
||||||
def write(font, outtype, dohex=False):
|
def write(font, outtype, dohex=False):
|
||||||
temp = os.path.join(DATADIR, 'temp.' + outtype.lower())
|
temp = os.path.join(DATADIR, 'temp.' + outtype.lower())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user