[ttLib] replace print statements with logger; deprecate 'quiet' and 'verbose' arguments; deprecate 'debugmsg' func

Previously, when TTX was run in verbose mode, the messages printed to the console would also show the time
each one was logged -- e.g. "blah blah  (15:23:24)" -- using the 'debugmsg' function which is defined here.
Even though the logging package would allow to do the same thing (via 'datefmt' and "%(asctime)s"), I decided
drop this, as I think it's not very interesting...
I'll replace it with the overall elapsed time in seconds, in a follow-up commit.
This commit is contained in:
Cosimo Lupo 2016-01-24 14:25:50 +00:00
parent 0c313bc1d2
commit 769efc3d0d

View File

@ -43,10 +43,14 @@ Dumping 'prep' table...
from __future__ import print_function, division, absolute_import from __future__ import print_function, division, absolute_import
from fontTools.misc.py23 import * from fontTools.misc.py23 import *
from fontTools.misc.loggingTools import deprecateArgument, deprecateFunction
import os import os
import sys import sys
import logging
log = logging.getLogger(__name__)
class TTLibError(Exception): pass class TTLibError(Exception): pass
@ -60,8 +64,8 @@ class TTFont(object):
def __init__(self, file=None, res_name_or_index=None, def __init__(self, file=None, res_name_or_index=None,
sfntVersion="\000\001\000\000", flavor=None, checkChecksums=False, sfntVersion="\000\001\000\000", flavor=None, checkChecksums=False,
verbose=False, recalcBBoxes=True, allowVID=False, ignoreDecompileErrors=False, verbose=None, recalcBBoxes=True, allowVID=False, ignoreDecompileErrors=False,
recalcTimestamp=True, fontNumber=-1, lazy=None, quiet=False): recalcTimestamp=True, fontNumber=-1, lazy=None, quiet=None):
"""The constructor can be called with a few different arguments. """The constructor can be called with a few different arguments.
When reading a font from disk, 'file' should be either a pathname When reading a font from disk, 'file' should be either a pathname
@ -119,8 +123,13 @@ class TTFont(object):
""" """
from fontTools.ttLib import sfnt from fontTools.ttLib import sfnt
self.verbose = verbose
self.quiet = quiet for name in ("verbose", "quiet"):
val = locals().get(name)
if val is not None:
deprecateArgument(name, "configure logging instead")
setattr(self, name, val)
self.lazy = lazy self.lazy = lazy
self.recalcBBoxes = recalcBBoxes self.recalcBBoxes = recalcBBoxes
self.recalcTimestamp = recalcTimestamp self.recalcTimestamp = recalcTimestamp
@ -231,7 +240,7 @@ class TTFont(object):
if closeStream: if closeStream:
file.close() file.close()
def saveXML(self, fileOrPath, progress=None, quiet=False, def saveXML(self, fileOrPath, progress=None, quiet=None,
tables=None, skipTables=None, splitTables=False, disassembleInstructions=True, tables=None, skipTables=None, splitTables=False, disassembleInstructions=True,
bitmapGlyphDataFormat='raw'): bitmapGlyphDataFormat='raw'):
"""Export the font as TTX (an XML-based text file), or as a series of text """Export the font as TTX (an XML-based text file), or as a series of text
@ -244,6 +253,9 @@ class TTFont(object):
from fontTools import version from fontTools import version
from fontTools.misc import xmlWriter from fontTools.misc import xmlWriter
if quiet is not None:
deprecateArgument("quiet", "configure logging instead")
self.disassembleInstructions = disassembleInstructions self.disassembleInstructions = disassembleInstructions
self.bitmapGlyphDataFormat = bitmapGlyphDataFormat self.bitmapGlyphDataFormat = bitmapGlyphDataFormat
if not tables: if not tables:
@ -287,7 +299,7 @@ class TTFont(object):
writer.newline() writer.newline()
else: else:
tableWriter = writer tableWriter = writer
self._tableToXML(tableWriter, tag, progress, quiet) self._tableToXML(tableWriter, tag, progress)
if splitTables: if splitTables:
tableWriter.endtag("ttFont") tableWriter.endtag("ttFont")
tableWriter.newline() tableWriter.newline()
@ -297,10 +309,10 @@ class TTFont(object):
writer.endtag("ttFont") writer.endtag("ttFont")
writer.newline() writer.newline()
writer.close() writer.close()
if self.verbose:
debugmsg("Done dumping TTX")
def _tableToXML(self, writer, tag, progress, quiet): def _tableToXML(self, writer, tag, progress, quiet=None):
if quiet is not None:
deprecateArgument("quiet", "configure logging instead")
if tag in self: if tag in self:
table = self[tag] table = self[tag]
report = "Dumping '%s' table..." % tag report = "Dumping '%s' table..." % tag
@ -308,11 +320,7 @@ class TTFont(object):
report = "No '%s' table found." % tag report = "No '%s' table found." % tag
if progress: if progress:
progress.setLabel(report) progress.setLabel(report)
elif self.verbose: log.info(report)
debugmsg(report)
else:
if not quiet:
print(report)
if tag not in self: if tag not in self:
return return
xmlTag = tagToXML(tag) xmlTag = tagToXML(tag)
@ -332,10 +340,13 @@ class TTFont(object):
writer.newline() writer.newline()
writer.newline() writer.newline()
def importXML(self, fileOrPath, progress=None, quiet=False): def importXML(self, fileOrPath, progress=None, quiet=None):
"""Import a TTX file (an XML-based text format), so as to recreate """Import a TTX file (an XML-based text format), so as to recreate
a font object. a font object.
""" """
if quiet is not None:
deprecateArgument("quiet", "configure logging instead")
if "maxp" in self and "post" in self: if "maxp" in self and "post" in self:
# Make sure the glyph order is loaded, as it otherwise gets # Make sure the glyph order is loaded, as it otherwise gets
# lost if the XML doesn't contain the glyph order, yet does # lost if the XML doesn't contain the glyph order, yet does
@ -345,7 +356,7 @@ class TTFont(object):
from fontTools.misc import xmlReader from fontTools.misc import xmlReader
reader = xmlReader.XMLReader(fileOrPath, self, progress, quiet) reader = xmlReader.XMLReader(fileOrPath, self, progress)
reader.read() reader.read()
def isLoaded(self, tag): def isLoaded(self, tag):
@ -391,21 +402,20 @@ class TTFont(object):
return table return table
if self.reader is not None: if self.reader is not None:
import traceback import traceback
if self.verbose: log.debug("Reading '%s' table from disk", tag)
debugmsg("Reading '%s' table from disk" % tag)
data = self.reader[tag] data = self.reader[tag]
tableClass = getTableClass(tag) tableClass = getTableClass(tag)
table = tableClass(tag) table = tableClass(tag)
self.tables[tag] = table self.tables[tag] = table
if self.verbose: log.debug("Decompiling '%s' table", tag)
debugmsg("Decompiling '%s' table" % tag)
try: try:
table.decompile(data, self) table.decompile(data, self)
except: except:
if not self.ignoreDecompileErrors: if not self.ignoreDecompileErrors:
raise raise
# fall back to DefaultTable, retaining the binary table data # fall back to DefaultTable, retaining the binary table data
print("An exception occurred during the decompilation of the '%s' table" % tag) log.exception(
"An exception occurred during the decompilation of the '%s' table", tag)
from .tables.DefaultTable import DefaultTable from .tables.DefaultTable import DefaultTable
file = StringIO() file = StringIO()
traceback.print_exc(file=file) traceback.print_exc(file=file)
@ -634,8 +644,7 @@ class TTFont(object):
else: else:
done.append(masterTable) done.append(masterTable)
tabledata = self.getTableData(tag) tabledata = self.getTableData(tag)
if self.verbose: log.debug("writing '%s' table to disk", tag)
debugmsg("writing '%s' table to disk" % tag)
writer[tag] = tabledata writer[tag] = tabledata
done.append(tag) done.append(tag)
@ -644,12 +653,10 @@ class TTFont(object):
""" """
tag = Tag(tag) tag = Tag(tag)
if self.isLoaded(tag): if self.isLoaded(tag):
if self.verbose: log.debug("compiling '%s' table", tag)
debugmsg("compiling '%s' table" % tag)
return self.tables[tag].compile(self) return self.tables[tag].compile(self)
elif self.reader and tag in self.reader: elif self.reader and tag in self.reader:
if self.verbose: log.debug("Reading '%s' table from disk", tag)
debugmsg("Reading '%s' table from disk" % tag)
return self.reader[tag] return self.reader[tag]
else: else:
raise KeyError(tag) raise KeyError(tag)
@ -901,6 +908,7 @@ def xmlToTag(tag):
return Tag(tag + " " * (4 - len(tag))) return Tag(tag + " " * (4 - len(tag)))
@deprecateFunction("use logging instead", category=DeprecationWarning)
def debugmsg(msg): def debugmsg(msg):
import time import time
print(msg + time.strftime(" (%H:%M:%S)", time.localtime(time.time()))) print(msg + time.strftime(" (%H:%M:%S)", time.localtime(time.time())))