ufoLib: also reuse _readLayerContents method

plus fix some redundant 2to3 left-overs
This commit is contained in:
Cosimo Lupo 2018-10-23 20:30:52 +01:00
parent f997005fb7
commit 3167e31be8
No known key found for this signature in database
GPG Key ID: 59D54DB0C9976482

View File

@ -5,6 +5,7 @@ from copy import deepcopy
import logging
import zipfile
import enum
from collections import OrderedDict
import fs
import fs.base
import fs.subfs
@ -961,7 +962,7 @@ class UFOWriter(_PlistWriterMixin, UFOReader):
self.layerContents = {}
if previousFormatVersion is not None and previousFormatVersion >= 3:
# already exists
self._readLayerContents(validate=validate)
self.layerContents = OrderedDict(self._readLayerContents(validate))
else:
# previous < 3
# imply the layer contents
@ -1314,25 +1315,6 @@ class UFOWriter(_PlistWriterMixin, UFOReader):
# glyph sets & layers
def _readLayerContents(self, validate):
"""
Rebuild the layer contents list by checking what glyph sets
are available on disk.
``validate`` will validate the data.
"""
# read the file on disk
raw = self._getPlist(LAYERCONTENTS_FILENAME)
contents = {}
if validate:
valid, error = layerContentsValidator(raw, self.fs)
if not valid:
raise UFOLibError(error)
for entry in raw:
layerName, directoryName = entry
contents[layerName] = directoryName
self.layerContents = contents
def writeLayerContents(self, layerOrder=None, validate=None):
"""
Write the layercontents.plist file. This method *must* be called
@ -1394,7 +1376,7 @@ class UFOWriter(_PlistWriterMixin, UFOReader):
raise UFOLibError("Only the default layer can be writen in UFO %d." % self.formatVersion)
# locate a layer name when None has been given
if layerName is None and defaultLayer:
for existingLayerName, directory in list(self.layerContents.items()):
for existingLayerName, directory in self.layerContents.items():
if directory == DEFAULT_GLYPHS_DIRNAME:
layerName = existingLayerName
if layerName is None:
@ -1442,9 +1424,10 @@ class UFOWriter(_PlistWriterMixin, UFOReader):
# matches the default being written. also make sure that this layer
# name is not already linked to a non-default layer.
if defaultLayer:
for existingLayerName, directory in list(self.layerContents.items()):
for existingLayerName, directory in self.layerContents.items():
if directory == DEFAULT_GLYPHS_DIRNAME:
if existingLayerName != layerName:
print(existingLayerName, layerName)
raise UFOLibError("Another layer is already mapped to the default directory.")
elif existingLayerName == layerName:
raise UFOLibError("The layer name is already mapped to a non-default layer.")
@ -1458,7 +1441,7 @@ class UFOWriter(_PlistWriterMixin, UFOReader):
else:
# not caching this could be slightly expensive,
# but caching it will be cumbersome
existing = [d.lower() for d in list(self.layerContents.values())]
existing = {d.lower() for d in self.layerContents.values()}
if not isinstance(layerName, unicode):
try:
layerName = unicode(layerName)
@ -1506,14 +1489,14 @@ class UFOWriter(_PlistWriterMixin, UFOReader):
if newLayerName in self.layerContents:
raise UFOLibError("A layer named %s already exists." % newLayerName)
# make sure the default layer doesn't already exist
if defaultLayer and DEFAULT_GLYPHS_DIRNAME in list(self.layerContents.values()):
if defaultLayer and DEFAULT_GLYPHS_DIRNAME in self.layerContents.values():
raise UFOLibError("A default layer already exists.")
# get the paths
oldDirectory = self._findDirectoryForLayerName(layerName)
if defaultLayer:
newDirectory = DEFAULT_GLYPHS_DIRNAME
else:
existing = [name.lower() for name in list(self.layerContents.values())]
existing = {name.lower() for name in self.layerContents.values()}
newDirectory = userNameToFileName(newLayerName, existing=existing, prefix="glyphs.")
# update the internal mapping
del self.layerContents[layerName]