Merge pull request #486 from anthrotype/lazy-file-load

[ttLib] don't load whole input file in memory if 'lazy' is True
This commit is contained in:
Cosimo Lupo 2016-01-26 14:39:28 +00:00
commit 6832b56385

View File

@ -159,6 +159,7 @@ class TTFont(object):
else:
# assume "file" is a readable file object
closeStream = False
if not self.lazy:
# read input file in memory and wrap a stream around it to allow overwriting
tmp = BytesIO(file.read())
if hasattr(file, 'name'):
@ -166,7 +167,8 @@ class TTFont(object):
tmp.name = file.name
if closeStream:
file.close()
self.reader = sfnt.SFNTReader(tmp, checkChecksums, fontNumber=fontNumber)
file = tmp
self.reader = sfnt.SFNTReader(file, checkChecksums, fontNumber=fontNumber)
self.sfntVersion = self.reader.sfntVersion
self.flavor = self.reader.flavor
self.flavorData = self.reader.flavorData
@ -183,6 +185,9 @@ class TTFont(object):
"""
from fontTools.ttLib import sfnt
if not hasattr(file, "write"):
if self.lazy and self.reader.file.name == file:
raise TTLibError(
"Can't overwrite TTFont when 'lazy' attribute is True")
closeStream = 1
file = open(file, "wb")
else: