--- Begin Message ---
Source: ufo2ft
Version: 2.16.0-1
Severity: serious
Justification: FTBFS on amd64
Tags: bullseye sid ftbfs
Usertags: ftbfs-20201125 ftbfs-bullseye
Hi,
During a rebuild of all packages in sid, your package failed to build
on amd64.
Relevant part (hopefully):
> make[1]: Entering directory '/<<PKGBUILDDIR>>'
> dh_auto_test
> I: pybuild base:232: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_ufo2ft/build;
> python3.8 -m pytest tests
> ============================= test session starts
> ==============================
> platform linux -- Python 3.8.6, pytest-4.6.11, py-1.9.0, pluggy-0.13.0
> rootdir: /<<PKGBUILDDIR>>, inifile: setup.cfg, testpaths: tests
> collected 519 items
>
> tests/featureCompiler_test.py ........... [
> 2%]
> tests/fontInfoData_test.py ............... [
> 5%]
> tests/integration_test.py .....s.s.................... [
> 10%]
> tests/outlineCompiler_test.py ........................................F. [
> 18%]
> ........................................ [
> 26%]
> tests/preProcessor_test.py ................. [
> 29%]
> tests/featureWriters/featureWriters_test.py ........ [
> 31%]
> tests/featureWriters/kernFeatureWriter_test.py ................... [
> 34%]
> tests/featureWriters/markFeatureWriter_test.py ............... [
> 37%]
> tests/filters/decomposeComponents_test.py .. [
> 37%]
> tests/filters/decomposeTransformedComponents_test.py . [
> 38%]
> tests/filters/flattenComponents_test.py ...... [
> 39%]
> tests/filters/propagateAnchors_test.py ............. [
> 41%]
> tests/filters/sortContours_test.py .... [
> 42%]
> tests/filters/transformations_test.py .......................... [
> 47%]
> tests/featureCompiler_test.py ........... [
> 49%]
> tests/fontInfoData_test.py ............... [
> 52%]
> tests/integration_test.py .....s.s.................... [
> 57%]
> tests/outlineCompiler_test.py ........................................F. [
> 66%]
> ........................................ [
> 73%]
> tests/preProcessor_test.py ................. [
> 77%]
> tests/featureWriters/featureWriters_test.py ........ [
> 78%]
> tests/featureWriters/kernFeatureWriter_test.py ................... [
> 82%]
> tests/featureWriters/markFeatureWriter_test.py ............... [
> 85%]
> tests/filters/decomposeComponents_test.py .. [
> 85%]
> tests/filters/decomposeTransformedComponents_test.py . [
> 85%]
> tests/filters/flattenComponents_test.py ...... [
> 86%]
> tests/filters/propagateAnchors_test.py ............. [
> 89%]
> tests/filters/sortContours_test.py .... [
> 90%]
> tests/filters/transformations_test.py .......................... [
> 95%]
> tests/fontInfoData_test.py .. [
> 95%]
> tests/featureWriters/markFeatureWriter_test.py ......... [
> 97%]
> tests/filters/filters_test.py ............. [
> 99%]
> tests/filters/transformations_test.py .
> [100%]
>
> =================================== FAILURES
> ===================================
> ___________________ ColrCpalTest.test_colr_cpal_raw[defcon]
> ____________________
>
> colorGlyphs = {'a': [['a.color1', 0], ['a.color2', 1]]}, glyphMap = None
>
> def buildColrV1(
> colorGlyphs: _ColorGlyphsDict,
> glyphMap: Optional[Mapping[str, int]] = None,
> ) -> Tuple[ot.LayerV1List, ot.BaseGlyphV1List]:
> if glyphMap is not None:
> colorGlyphItems = sorted(
> colorGlyphs.items(), key=lambda item: glyphMap[item[0]]
> )
> else:
> colorGlyphItems = colorGlyphs.items()
>
> errors = {}
> baseGlyphs = []
> layerBuilder = LayerV1ListBuilder()
> for baseGlyph, paint in colorGlyphItems:
> try:
> > baseGlyphs.append(buildBaseGlyphV1Record(baseGlyph,
> > layerBuilder, paint))
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:676:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> baseGlyph = 'a'
> layerBuilder = <fontTools.colorLib.builder.LayerV1ListBuilder object at
> 0x7f1b82fd4d90>
> paint = [['a.color1', 0], ['a.color2', 1]]
>
> def buildBaseGlyphV1Record(
> baseGlyph: str, layerBuilder: LayerV1ListBuilder, paint: _PaintInput
> ) -> ot.BaseGlyphV1List:
> self = ot.BaseGlyphV1Record()
> self.BaseGlyph = baseGlyph
> > self.Paint = layerBuilder.buildPaint(paint)
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:649:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> self = <fontTools.colorLib.builder.LayerV1ListBuilder object at
> 0x7f1b82fd4d90>
> paint = [['a.color1', 0], ['a.color2', 1]]
>
> def buildPaint(self, paint: _PaintInput) -> ot.Paint:
> if isinstance(paint, ot.Paint):
> return paint
> elif isinstance(paint, int):
> paletteIndex = paint
> return self.buildPaintSolid(paletteIndex)
> elif isinstance(paint, tuple):
> layerGlyph, paint = paint
> return self.buildPaintGlyph(layerGlyph, paint)
> elif isinstance(paint, list):
> # implicit PaintColrLayers for a list of > 1
> if len(paint) == 0:
> raise ValueError("An empty list is hard to paint")
> elif len(paint) == 1:
> return self.buildPaint(paint[0])
> else:
> > return self.buildColrLayers(paint)
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:602:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> self = <fontTools.colorLib.builder.LayerV1ListBuilder object at
> 0x7f1b82fd4d90>
> paints = [['a.color1', 0], ['a.color2', 1]]
>
> def buildColrLayers(self, paints: List[_PaintInput]) -> ot.Paint:
> ot_paint = ot.Paint()
> ot_paint.Format = int(ot.Paint.Format.PaintColrLayers)
> self.slices.append(ot_paint)
>
> > paints = [self.buildPaint(p) for p in paints]
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:550:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> .0 = <list_iterator object at 0x7f1b82fd48b0>
>
> > paints = [self.buildPaint(p) for p in paints]
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:550:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> self = <fontTools.colorLib.builder.LayerV1ListBuilder object at
> 0x7f1b82fd4d90>
> paint = ['a.color1', 0]
>
> def buildPaint(self, paint: _PaintInput) -> ot.Paint:
> if isinstance(paint, ot.Paint):
> return paint
> elif isinstance(paint, int):
> paletteIndex = paint
> return self.buildPaintSolid(paletteIndex)
> elif isinstance(paint, tuple):
> layerGlyph, paint = paint
> return self.buildPaintGlyph(layerGlyph, paint)
> elif isinstance(paint, list):
> # implicit PaintColrLayers for a list of > 1
> if len(paint) == 0:
> raise ValueError("An empty list is hard to paint")
> elif len(paint) == 1:
> return self.buildPaint(paint[0])
> else:
> > return self.buildColrLayers(paint)
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:602:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> self = <fontTools.colorLib.builder.LayerV1ListBuilder object at
> 0x7f1b82fd4d90>
> paints = ['a.color1', 0]
>
> def buildColrLayers(self, paints: List[_PaintInput]) -> ot.Paint:
> ot_paint = ot.Paint()
> ot_paint.Format = int(ot.Paint.Format.PaintColrLayers)
> self.slices.append(ot_paint)
>
> > paints = [self.buildPaint(p) for p in paints]
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:550:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> .0 = <list_iterator object at 0x7f1b82fd4a00>
>
> > paints = [self.buildPaint(p) for p in paints]
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:550:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> self = <fontTools.colorLib.builder.LayerV1ListBuilder object at
> 0x7f1b82fd4d90>
> paint = 'a.color1'
>
> def buildPaint(self, paint: _PaintInput) -> ot.Paint:
> if isinstance(paint, ot.Paint):
> return paint
> elif isinstance(paint, int):
> paletteIndex = paint
> return self.buildPaintSolid(paletteIndex)
> elif isinstance(paint, tuple):
> layerGlyph, paint = paint
> return self.buildPaintGlyph(layerGlyph, paint)
> elif isinstance(paint, list):
> # implicit PaintColrLayers for a list of > 1
> if len(paint) == 0:
> raise ValueError("An empty list is hard to paint")
> elif len(paint) == 1:
> return self.buildPaint(paint[0])
> else:
> return self.buildColrLayers(paint)
> elif isinstance(paint, collections.abc.Mapping):
> kwargs = dict(paint)
> fmt = kwargs.pop("format")
> try:
> return LayerV1ListBuilder._buildFunctions[fmt](self, **kwargs)
> except KeyError:
> raise NotImplementedError(fmt)
> > raise TypeError(f"Not sure what to do with {type(paint).__name__}:
> > {paint!r}")
> E TypeError: Not sure what to do with str: 'a.color1'
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:610: TypeError
>
> The above exception was the direct cause of the following exception:
>
> self = <tests.outlineCompiler_test.ColrCpalTest object at 0x7f1b88076550>
> FontClass = <class 'defcon.objects.font.Font'>
>
> def test_colr_cpal_raw(self, FontClass):
> testufo = FontClass(getpath("ColorTestRaw.ufo"))
> assert "com.github.googlei18n.ufo2ft.colorLayers" in testufo.lib
> assert "com.github.googlei18n.ufo2ft.colorPalettes" in testufo.lib
> > result = compileTTF(testufo)
>
> tests/outlineCompiler_test.py:792:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
> ufo2ft/__init__.py:221: in compileTTF
> otf = outlineCompiler.compile()
> ufo2ft/outlineCompiler.py:142: in compile
> self.setupTable_COLR()
> ufo2ft/outlineCompiler.py:917: in setupTable_COLR
> self.otf["COLR"] = buildCOLR(layerInfo)
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:153: in buildCOLR
> colr.LayerV1List, colr.BaseGlyphV1List = buildColrV1(colorGlyphsV1,
> glyphMap)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> colorGlyphs = {'a': [['a.color1', 0], ['a.color2', 1]]}, glyphMap = None
>
> def buildColrV1(
> colorGlyphs: _ColorGlyphsDict,
> glyphMap: Optional[Mapping[str, int]] = None,
> ) -> Tuple[ot.LayerV1List, ot.BaseGlyphV1List]:
> if glyphMap is not None:
> colorGlyphItems = sorted(
> colorGlyphs.items(), key=lambda item: glyphMap[item[0]]
> )
> else:
> colorGlyphItems = colorGlyphs.items()
>
> errors = {}
> baseGlyphs = []
> layerBuilder = LayerV1ListBuilder()
> for baseGlyph, paint in colorGlyphItems:
> try:
> baseGlyphs.append(buildBaseGlyphV1Record(baseGlyph,
> layerBuilder, paint))
>
> except (ColorLibError, OverflowError, ValueError, TypeError) as e:
> errors[baseGlyph] = e
>
> if errors:
> failed_glyphs = _format_glyph_errors(errors)
> exc = ColorLibError(f"Failed to build
> BaseGlyphV1List:\n{failed_glyphs}")
> exc.errors = errors
> > raise exc from next(iter(errors.values()))
> E fontTools.colorLib.errors.ColorLibError: Failed to build
> BaseGlyphV1List:
> E a => TypeError: Not sure what to do with str: 'a.color1'
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:685:
> ColorLibError
> ___________________ ColrCpalTest.test_colr_cpal_raw[ufoLib2]
> ___________________
>
> colorGlyphs = {'a': [['a.color1', 0], ['a.color2', 1]]}, glyphMap = None
>
> def buildColrV1(
> colorGlyphs: _ColorGlyphsDict,
> glyphMap: Optional[Mapping[str, int]] = None,
> ) -> Tuple[ot.LayerV1List, ot.BaseGlyphV1List]:
> if glyphMap is not None:
> colorGlyphItems = sorted(
> colorGlyphs.items(), key=lambda item: glyphMap[item[0]]
> )
> else:
> colorGlyphItems = colorGlyphs.items()
>
> errors = {}
> baseGlyphs = []
> layerBuilder = LayerV1ListBuilder()
> for baseGlyph, paint in colorGlyphItems:
> try:
> > baseGlyphs.append(buildBaseGlyphV1Record(baseGlyph,
> > layerBuilder, paint))
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:676:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> baseGlyph = 'a'
> layerBuilder = <fontTools.colorLib.builder.LayerV1ListBuilder object at
> 0x7f1b82c69310>
> paint = [['a.color1', 0], ['a.color2', 1]]
>
> def buildBaseGlyphV1Record(
> baseGlyph: str, layerBuilder: LayerV1ListBuilder, paint: _PaintInput
> ) -> ot.BaseGlyphV1List:
> self = ot.BaseGlyphV1Record()
> self.BaseGlyph = baseGlyph
> > self.Paint = layerBuilder.buildPaint(paint)
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:649:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> self = <fontTools.colorLib.builder.LayerV1ListBuilder object at
> 0x7f1b82c69310>
> paint = [['a.color1', 0], ['a.color2', 1]]
>
> def buildPaint(self, paint: _PaintInput) -> ot.Paint:
> if isinstance(paint, ot.Paint):
> return paint
> elif isinstance(paint, int):
> paletteIndex = paint
> return self.buildPaintSolid(paletteIndex)
> elif isinstance(paint, tuple):
> layerGlyph, paint = paint
> return self.buildPaintGlyph(layerGlyph, paint)
> elif isinstance(paint, list):
> # implicit PaintColrLayers for a list of > 1
> if len(paint) == 0:
> raise ValueError("An empty list is hard to paint")
> elif len(paint) == 1:
> return self.buildPaint(paint[0])
> else:
> > return self.buildColrLayers(paint)
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:602:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> self = <fontTools.colorLib.builder.LayerV1ListBuilder object at
> 0x7f1b82c69310>
> paints = [['a.color1', 0], ['a.color2', 1]]
>
> def buildColrLayers(self, paints: List[_PaintInput]) -> ot.Paint:
> ot_paint = ot.Paint()
> ot_paint.Format = int(ot.Paint.Format.PaintColrLayers)
> self.slices.append(ot_paint)
>
> > paints = [self.buildPaint(p) for p in paints]
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:550:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> .0 = <list_iterator object at 0x7f1b82c55fd0>
>
> > paints = [self.buildPaint(p) for p in paints]
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:550:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> self = <fontTools.colorLib.builder.LayerV1ListBuilder object at
> 0x7f1b82c69310>
> paint = ['a.color1', 0]
>
> def buildPaint(self, paint: _PaintInput) -> ot.Paint:
> if isinstance(paint, ot.Paint):
> return paint
> elif isinstance(paint, int):
> paletteIndex = paint
> return self.buildPaintSolid(paletteIndex)
> elif isinstance(paint, tuple):
> layerGlyph, paint = paint
> return self.buildPaintGlyph(layerGlyph, paint)
> elif isinstance(paint, list):
> # implicit PaintColrLayers for a list of > 1
> if len(paint) == 0:
> raise ValueError("An empty list is hard to paint")
> elif len(paint) == 1:
> return self.buildPaint(paint[0])
> else:
> > return self.buildColrLayers(paint)
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:602:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> self = <fontTools.colorLib.builder.LayerV1ListBuilder object at
> 0x7f1b82c69310>
> paints = ['a.color1', 0]
>
> def buildColrLayers(self, paints: List[_PaintInput]) -> ot.Paint:
> ot_paint = ot.Paint()
> ot_paint.Format = int(ot.Paint.Format.PaintColrLayers)
> self.slices.append(ot_paint)
>
> > paints = [self.buildPaint(p) for p in paints]
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:550:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> .0 = <list_iterator object at 0x7f1b82c559a0>
>
> > paints = [self.buildPaint(p) for p in paints]
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:550:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> self = <fontTools.colorLib.builder.LayerV1ListBuilder object at
> 0x7f1b82c69310>
> paint = 'a.color1'
>
> def buildPaint(self, paint: _PaintInput) -> ot.Paint:
> if isinstance(paint, ot.Paint):
> return paint
> elif isinstance(paint, int):
> paletteIndex = paint
> return self.buildPaintSolid(paletteIndex)
> elif isinstance(paint, tuple):
> layerGlyph, paint = paint
> return self.buildPaintGlyph(layerGlyph, paint)
> elif isinstance(paint, list):
> # implicit PaintColrLayers for a list of > 1
> if len(paint) == 0:
> raise ValueError("An empty list is hard to paint")
> elif len(paint) == 1:
> return self.buildPaint(paint[0])
> else:
> return self.buildColrLayers(paint)
> elif isinstance(paint, collections.abc.Mapping):
> kwargs = dict(paint)
> fmt = kwargs.pop("format")
> try:
> return LayerV1ListBuilder._buildFunctions[fmt](self, **kwargs)
> except KeyError:
> raise NotImplementedError(fmt)
> > raise TypeError(f"Not sure what to do with {type(paint).__name__}:
> > {paint!r}")
> E TypeError: Not sure what to do with str: 'a.color1'
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:610: TypeError
>
> The above exception was the direct cause of the following exception:
>
> self = <tests.outlineCompiler_test.ColrCpalTest object at 0x7f1b82c76310>
> FontClass = <function FontClass.<locals>.ctor at 0x7f1b82e92280>
>
> def test_colr_cpal_raw(self, FontClass):
> testufo = FontClass(getpath("ColorTestRaw.ufo"))
> assert "com.github.googlei18n.ufo2ft.colorLayers" in testufo.lib
> assert "com.github.googlei18n.ufo2ft.colorPalettes" in testufo.lib
> > result = compileTTF(testufo)
>
> tests/outlineCompiler_test.py:792:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
> ufo2ft/__init__.py:221: in compileTTF
> otf = outlineCompiler.compile()
> ufo2ft/outlineCompiler.py:142: in compile
> self.setupTable_COLR()
> ufo2ft/outlineCompiler.py:917: in setupTable_COLR
> self.otf["COLR"] = buildCOLR(layerInfo)
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:153: in buildCOLR
> colr.LayerV1List, colr.BaseGlyphV1List = buildColrV1(colorGlyphsV1,
> glyphMap)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> colorGlyphs = {'a': [['a.color1', 0], ['a.color2', 1]]}, glyphMap = None
>
> def buildColrV1(
> colorGlyphs: _ColorGlyphsDict,
> glyphMap: Optional[Mapping[str, int]] = None,
> ) -> Tuple[ot.LayerV1List, ot.BaseGlyphV1List]:
> if glyphMap is not None:
> colorGlyphItems = sorted(
> colorGlyphs.items(), key=lambda item: glyphMap[item[0]]
> )
> else:
> colorGlyphItems = colorGlyphs.items()
>
> errors = {}
> baseGlyphs = []
> layerBuilder = LayerV1ListBuilder()
> for baseGlyph, paint in colorGlyphItems:
> try:
> baseGlyphs.append(buildBaseGlyphV1Record(baseGlyph,
> layerBuilder, paint))
>
> except (ColorLibError, OverflowError, ValueError, TypeError) as e:
> errors[baseGlyph] = e
>
> if errors:
> failed_glyphs = _format_glyph_errors(errors)
> exc = ColorLibError(f"Failed to build
> BaseGlyphV1List:\n{failed_glyphs}")
> exc.errors = errors
> > raise exc from next(iter(errors.values()))
> E fontTools.colorLib.errors.ColorLibError: Failed to build
> BaseGlyphV1List:
> E a => TypeError: Not sure what to do with str: 'a.color1'
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:685:
> ColorLibError
> =============================== warnings summary
> ===============================
> ufo2ft/outlineCompiler.py:964
>
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_ufo2ft/build/ufo2ft/outlineCompiler.py:964:
> DeprecationWarning: invalid escape sequence \s
> '(^<ttFont\s+)(sfntVersion=".*"\s+)(.*>$)', flags=re.MULTILINE
>
> tests/filters/transformations_test.py:79
>
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_ufo2ft/build/tests/filters/transformations_test.py:79:
> DeprecationWarning: invalid escape sequence \.
> excinfo.match("is not a valid (TransformationsFilter\.)?Origin")
>
> -- Docs: https://docs.pytest.org/en/latest/warnings.html
> =========================== short test summary info
> ============================
> SKIPPED [2] .pybuild/cpython3_3.8_ufo2ft/build/tests/integration_test.py:110:
> skia-pathops is unavailable in debian yet
> SKIPPED [2] .pybuild/cpython3_3.8_ufo2ft/build/tests/integration_test.py:119:
> skia-pathops is unavailable in debian yet
> FAILED tests/outlineCompiler_test.py::ColrCpalTest::test_colr_cpal_raw[defcon]
> FAILED
> tests/outlineCompiler_test.py::ColrCpalTest::test_colr_cpal_raw[ufoLib2]
> ========= 2 failed, 513 passed, 4 skipped, 2 warnings in 6.10 seconds
> ==========
> E: pybuild pybuild:353: test: plugin distutils failed with: exit code=1: cd
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8_ufo2ft/build; python3.8 -m pytest tests
> I: pybuild base:232: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_ufo2ft/build;
> python3.9 -m pytest tests
> ============================= test session starts
> ==============================
> platform linux -- Python 3.9.0+, pytest-4.6.11, py-1.9.0, pluggy-0.13.0
> rootdir: /<<PKGBUILDDIR>>, inifile: setup.cfg, testpaths: tests
> collected 519 items
>
> tests/featureCompiler_test.py ........... [
> 2%]
> tests/fontInfoData_test.py ............... [
> 5%]
> tests/integration_test.py .....s.s.................... [
> 10%]
> tests/outlineCompiler_test.py ........................................F. [
> 18%]
> ........................................ [
> 26%]
> tests/preProcessor_test.py ................. [
> 29%]
> tests/featureWriters/featureWriters_test.py ........ [
> 31%]
> tests/featureWriters/kernFeatureWriter_test.py ................... [
> 34%]
> tests/featureWriters/markFeatureWriter_test.py ............... [
> 37%]
> tests/filters/decomposeComponents_test.py .. [
> 37%]
> tests/filters/decomposeTransformedComponents_test.py . [
> 38%]
> tests/filters/flattenComponents_test.py ...... [
> 39%]
> tests/filters/propagateAnchors_test.py ............. [
> 41%]
> tests/filters/sortContours_test.py .... [
> 42%]
> tests/filters/transformations_test.py .......................... [
> 47%]
> tests/featureCompiler_test.py ........... [
> 49%]
> tests/fontInfoData_test.py ............... [
> 52%]
> tests/integration_test.py .....s.s.................... [
> 57%]
> tests/outlineCompiler_test.py ........................................F. [
> 66%]
> ........................................ [
> 73%]
> tests/preProcessor_test.py ................. [
> 77%]
> tests/featureWriters/featureWriters_test.py ........ [
> 78%]
> tests/featureWriters/kernFeatureWriter_test.py ................... [
> 82%]
> tests/featureWriters/markFeatureWriter_test.py ............... [
> 85%]
> tests/filters/decomposeComponents_test.py .. [
> 85%]
> tests/filters/decomposeTransformedComponents_test.py . [
> 85%]
> tests/filters/flattenComponents_test.py ...... [
> 86%]
> tests/filters/propagateAnchors_test.py ............. [
> 89%]
> tests/filters/sortContours_test.py .... [
> 90%]
> tests/filters/transformations_test.py .......................... [
> 95%]
> tests/fontInfoData_test.py .. [
> 95%]
> tests/featureWriters/markFeatureWriter_test.py ......... [
> 97%]
> tests/filters/filters_test.py ............. [
> 99%]
> tests/filters/transformations_test.py .
> [100%]
>
> =================================== FAILURES
> ===================================
> ___________________ ColrCpalTest.test_colr_cpal_raw[defcon]
> ____________________
>
> colorGlyphs = {'a': [['a.color1', 0], ['a.color2', 1]]}, glyphMap = None
>
> def buildColrV1(
> colorGlyphs: _ColorGlyphsDict,
> glyphMap: Optional[Mapping[str, int]] = None,
> ) -> Tuple[ot.LayerV1List, ot.BaseGlyphV1List]:
> if glyphMap is not None:
> colorGlyphItems = sorted(
> colorGlyphs.items(), key=lambda item: glyphMap[item[0]]
> )
> else:
> colorGlyphItems = colorGlyphs.items()
>
> errors = {}
> baseGlyphs = []
> layerBuilder = LayerV1ListBuilder()
> for baseGlyph, paint in colorGlyphItems:
> try:
> > baseGlyphs.append(buildBaseGlyphV1Record(baseGlyph,
> > layerBuilder, paint))
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:676:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> baseGlyph = 'a'
> layerBuilder = <fontTools.colorLib.builder.LayerV1ListBuilder object at
> 0x7fa1e04a1f10>
> paint = [['a.color1', 0], ['a.color2', 1]]
>
> def buildBaseGlyphV1Record(
> baseGlyph: str, layerBuilder: LayerV1ListBuilder, paint: _PaintInput
> ) -> ot.BaseGlyphV1List:
> self = ot.BaseGlyphV1Record()
> self.BaseGlyph = baseGlyph
> > self.Paint = layerBuilder.buildPaint(paint)
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:649:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> self = <fontTools.colorLib.builder.LayerV1ListBuilder object at
> 0x7fa1e04a1f10>
> paint = [['a.color1', 0], ['a.color2', 1]]
>
> def buildPaint(self, paint: _PaintInput) -> ot.Paint:
> if isinstance(paint, ot.Paint):
> return paint
> elif isinstance(paint, int):
> paletteIndex = paint
> return self.buildPaintSolid(paletteIndex)
> elif isinstance(paint, tuple):
> layerGlyph, paint = paint
> return self.buildPaintGlyph(layerGlyph, paint)
> elif isinstance(paint, list):
> # implicit PaintColrLayers for a list of > 1
> if len(paint) == 0:
> raise ValueError("An empty list is hard to paint")
> elif len(paint) == 1:
> return self.buildPaint(paint[0])
> else:
> > return self.buildColrLayers(paint)
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:602:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> self = <fontTools.colorLib.builder.LayerV1ListBuilder object at
> 0x7fa1e04a1f10>
> paints = [['a.color1', 0], ['a.color2', 1]]
>
> def buildColrLayers(self, paints: List[_PaintInput]) -> ot.Paint:
> ot_paint = ot.Paint()
> ot_paint.Format = int(ot.Paint.Format.PaintColrLayers)
> self.slices.append(ot_paint)
>
> > paints = [self.buildPaint(p) for p in paints]
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:550:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> .0 = <list_iterator object at 0x7fa1e04a1340>
>
> > paints = [self.buildPaint(p) for p in paints]
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:550:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> self = <fontTools.colorLib.builder.LayerV1ListBuilder object at
> 0x7fa1e04a1f10>
> paint = ['a.color1', 0]
>
> def buildPaint(self, paint: _PaintInput) -> ot.Paint:
> if isinstance(paint, ot.Paint):
> return paint
> elif isinstance(paint, int):
> paletteIndex = paint
> return self.buildPaintSolid(paletteIndex)
> elif isinstance(paint, tuple):
> layerGlyph, paint = paint
> return self.buildPaintGlyph(layerGlyph, paint)
> elif isinstance(paint, list):
> # implicit PaintColrLayers for a list of > 1
> if len(paint) == 0:
> raise ValueError("An empty list is hard to paint")
> elif len(paint) == 1:
> return self.buildPaint(paint[0])
> else:
> > return self.buildColrLayers(paint)
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:602:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> self = <fontTools.colorLib.builder.LayerV1ListBuilder object at
> 0x7fa1e04a1f10>
> paints = ['a.color1', 0]
>
> def buildColrLayers(self, paints: List[_PaintInput]) -> ot.Paint:
> ot_paint = ot.Paint()
> ot_paint.Format = int(ot.Paint.Format.PaintColrLayers)
> self.slices.append(ot_paint)
>
> > paints = [self.buildPaint(p) for p in paints]
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:550:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> .0 = <list_iterator object at 0x7fa1e04a1190>
>
> > paints = [self.buildPaint(p) for p in paints]
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:550:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> self = <fontTools.colorLib.builder.LayerV1ListBuilder object at
> 0x7fa1e04a1f10>
> paint = 'a.color1'
>
> def buildPaint(self, paint: _PaintInput) -> ot.Paint:
> if isinstance(paint, ot.Paint):
> return paint
> elif isinstance(paint, int):
> paletteIndex = paint
> return self.buildPaintSolid(paletteIndex)
> elif isinstance(paint, tuple):
> layerGlyph, paint = paint
> return self.buildPaintGlyph(layerGlyph, paint)
> elif isinstance(paint, list):
> # implicit PaintColrLayers for a list of > 1
> if len(paint) == 0:
> raise ValueError("An empty list is hard to paint")
> elif len(paint) == 1:
> return self.buildPaint(paint[0])
> else:
> return self.buildColrLayers(paint)
> elif isinstance(paint, collections.abc.Mapping):
> kwargs = dict(paint)
> fmt = kwargs.pop("format")
> try:
> return LayerV1ListBuilder._buildFunctions[fmt](self, **kwargs)
> except KeyError:
> raise NotImplementedError(fmt)
> > raise TypeError(f"Not sure what to do with {type(paint).__name__}:
> > {paint!r}")
> E TypeError: Not sure what to do with str: 'a.color1'
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:610: TypeError
>
> The above exception was the direct cause of the following exception:
>
> self = <tests.outlineCompiler_test.ColrCpalTest object at 0x7fa1e04b62e0>
> FontClass = <class 'defcon.objects.font.Font'>
>
> def test_colr_cpal_raw(self, FontClass):
> testufo = FontClass(getpath("ColorTestRaw.ufo"))
> assert "com.github.googlei18n.ufo2ft.colorLayers" in testufo.lib
> assert "com.github.googlei18n.ufo2ft.colorPalettes" in testufo.lib
> > result = compileTTF(testufo)
>
> tests/outlineCompiler_test.py:792:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
> ufo2ft/__init__.py:221: in compileTTF
> otf = outlineCompiler.compile()
> ufo2ft/outlineCompiler.py:142: in compile
> self.setupTable_COLR()
> ufo2ft/outlineCompiler.py:917: in setupTable_COLR
> self.otf["COLR"] = buildCOLR(layerInfo)
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:153: in buildCOLR
> colr.LayerV1List, colr.BaseGlyphV1List = buildColrV1(colorGlyphsV1,
> glyphMap)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> colorGlyphs = {'a': [['a.color1', 0], ['a.color2', 1]]}, glyphMap = None
>
> def buildColrV1(
> colorGlyphs: _ColorGlyphsDict,
> glyphMap: Optional[Mapping[str, int]] = None,
> ) -> Tuple[ot.LayerV1List, ot.BaseGlyphV1List]:
> if glyphMap is not None:
> colorGlyphItems = sorted(
> colorGlyphs.items(), key=lambda item: glyphMap[item[0]]
> )
> else:
> colorGlyphItems = colorGlyphs.items()
>
> errors = {}
> baseGlyphs = []
> layerBuilder = LayerV1ListBuilder()
> for baseGlyph, paint in colorGlyphItems:
> try:
> baseGlyphs.append(buildBaseGlyphV1Record(baseGlyph,
> layerBuilder, paint))
>
> except (ColorLibError, OverflowError, ValueError, TypeError) as e:
> errors[baseGlyph] = e
>
> if errors:
> failed_glyphs = _format_glyph_errors(errors)
> exc = ColorLibError(f"Failed to build
> BaseGlyphV1List:\n{failed_glyphs}")
> exc.errors = errors
> > raise exc from next(iter(errors.values()))
> E fontTools.colorLib.errors.ColorLibError: Failed to build
> BaseGlyphV1List:
> E a => TypeError: Not sure what to do with str: 'a.color1'
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:685:
> ColorLibError
> ___________________ ColrCpalTest.test_colr_cpal_raw[ufoLib2]
> ___________________
>
> colorGlyphs = {'a': [['a.color1', 0], ['a.color2', 1]]}, glyphMap = None
>
> def buildColrV1(
> colorGlyphs: _ColorGlyphsDict,
> glyphMap: Optional[Mapping[str, int]] = None,
> ) -> Tuple[ot.LayerV1List, ot.BaseGlyphV1List]:
> if glyphMap is not None:
> colorGlyphItems = sorted(
> colorGlyphs.items(), key=lambda item: glyphMap[item[0]]
> )
> else:
> colorGlyphItems = colorGlyphs.items()
>
> errors = {}
> baseGlyphs = []
> layerBuilder = LayerV1ListBuilder()
> for baseGlyph, paint in colorGlyphItems:
> try:
> > baseGlyphs.append(buildBaseGlyphV1Record(baseGlyph,
> > layerBuilder, paint))
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:676:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> baseGlyph = 'a'
> layerBuilder = <fontTools.colorLib.builder.LayerV1ListBuilder object at
> 0x7fa1e0284e50>
> paint = [['a.color1', 0], ['a.color2', 1]]
>
> def buildBaseGlyphV1Record(
> baseGlyph: str, layerBuilder: LayerV1ListBuilder, paint: _PaintInput
> ) -> ot.BaseGlyphV1List:
> self = ot.BaseGlyphV1Record()
> self.BaseGlyph = baseGlyph
> > self.Paint = layerBuilder.buildPaint(paint)
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:649:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> self = <fontTools.colorLib.builder.LayerV1ListBuilder object at
> 0x7fa1e0284e50>
> paint = [['a.color1', 0], ['a.color2', 1]]
>
> def buildPaint(self, paint: _PaintInput) -> ot.Paint:
> if isinstance(paint, ot.Paint):
> return paint
> elif isinstance(paint, int):
> paletteIndex = paint
> return self.buildPaintSolid(paletteIndex)
> elif isinstance(paint, tuple):
> layerGlyph, paint = paint
> return self.buildPaintGlyph(layerGlyph, paint)
> elif isinstance(paint, list):
> # implicit PaintColrLayers for a list of > 1
> if len(paint) == 0:
> raise ValueError("An empty list is hard to paint")
> elif len(paint) == 1:
> return self.buildPaint(paint[0])
> else:
> > return self.buildColrLayers(paint)
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:602:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> self = <fontTools.colorLib.builder.LayerV1ListBuilder object at
> 0x7fa1e0284e50>
> paints = [['a.color1', 0], ['a.color2', 1]]
>
> def buildColrLayers(self, paints: List[_PaintInput]) -> ot.Paint:
> ot_paint = ot.Paint()
> ot_paint.Format = int(ot.Paint.Format.PaintColrLayers)
> self.slices.append(ot_paint)
>
> > paints = [self.buildPaint(p) for p in paints]
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:550:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> .0 = <list_iterator object at 0x7fa1e0284310>
>
> > paints = [self.buildPaint(p) for p in paints]
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:550:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> self = <fontTools.colorLib.builder.LayerV1ListBuilder object at
> 0x7fa1e0284e50>
> paint = ['a.color1', 0]
>
> def buildPaint(self, paint: _PaintInput) -> ot.Paint:
> if isinstance(paint, ot.Paint):
> return paint
> elif isinstance(paint, int):
> paletteIndex = paint
> return self.buildPaintSolid(paletteIndex)
> elif isinstance(paint, tuple):
> layerGlyph, paint = paint
> return self.buildPaintGlyph(layerGlyph, paint)
> elif isinstance(paint, list):
> # implicit PaintColrLayers for a list of > 1
> if len(paint) == 0:
> raise ValueError("An empty list is hard to paint")
> elif len(paint) == 1:
> return self.buildPaint(paint[0])
> else:
> > return self.buildColrLayers(paint)
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:602:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> self = <fontTools.colorLib.builder.LayerV1ListBuilder object at
> 0x7fa1e0284e50>
> paints = ['a.color1', 0]
>
> def buildColrLayers(self, paints: List[_PaintInput]) -> ot.Paint:
> ot_paint = ot.Paint()
> ot_paint.Format = int(ot.Paint.Format.PaintColrLayers)
> self.slices.append(ot_paint)
>
> > paints = [self.buildPaint(p) for p in paints]
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:550:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> .0 = <list_iterator object at 0x7fa1e0284550>
>
> > paints = [self.buildPaint(p) for p in paints]
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:550:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> self = <fontTools.colorLib.builder.LayerV1ListBuilder object at
> 0x7fa1e0284e50>
> paint = 'a.color1'
>
> def buildPaint(self, paint: _PaintInput) -> ot.Paint:
> if isinstance(paint, ot.Paint):
> return paint
> elif isinstance(paint, int):
> paletteIndex = paint
> return self.buildPaintSolid(paletteIndex)
> elif isinstance(paint, tuple):
> layerGlyph, paint = paint
> return self.buildPaintGlyph(layerGlyph, paint)
> elif isinstance(paint, list):
> # implicit PaintColrLayers for a list of > 1
> if len(paint) == 0:
> raise ValueError("An empty list is hard to paint")
> elif len(paint) == 1:
> return self.buildPaint(paint[0])
> else:
> return self.buildColrLayers(paint)
> elif isinstance(paint, collections.abc.Mapping):
> kwargs = dict(paint)
> fmt = kwargs.pop("format")
> try:
> return LayerV1ListBuilder._buildFunctions[fmt](self, **kwargs)
> except KeyError:
> raise NotImplementedError(fmt)
> > raise TypeError(f"Not sure what to do with {type(paint).__name__}:
> > {paint!r}")
> E TypeError: Not sure what to do with str: 'a.color1'
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:610: TypeError
>
> The above exception was the direct cause of the following exception:
>
> self = <tests.outlineCompiler_test.ColrCpalTest object at 0x7fa1e02610d0>
> FontClass = <function FontClass.<locals>.ctor at 0x7fa1e04ddd30>
>
> def test_colr_cpal_raw(self, FontClass):
> testufo = FontClass(getpath("ColorTestRaw.ufo"))
> assert "com.github.googlei18n.ufo2ft.colorLayers" in testufo.lib
> assert "com.github.googlei18n.ufo2ft.colorPalettes" in testufo.lib
> > result = compileTTF(testufo)
>
> tests/outlineCompiler_test.py:792:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
> ufo2ft/__init__.py:221: in compileTTF
> otf = outlineCompiler.compile()
> ufo2ft/outlineCompiler.py:142: in compile
> self.setupTable_COLR()
> ufo2ft/outlineCompiler.py:917: in setupTable_COLR
> self.otf["COLR"] = buildCOLR(layerInfo)
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:153: in buildCOLR
> colr.LayerV1List, colr.BaseGlyphV1List = buildColrV1(colorGlyphsV1,
> glyphMap)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> colorGlyphs = {'a': [['a.color1', 0], ['a.color2', 1]]}, glyphMap = None
>
> def buildColrV1(
> colorGlyphs: _ColorGlyphsDict,
> glyphMap: Optional[Mapping[str, int]] = None,
> ) -> Tuple[ot.LayerV1List, ot.BaseGlyphV1List]:
> if glyphMap is not None:
> colorGlyphItems = sorted(
> colorGlyphs.items(), key=lambda item: glyphMap[item[0]]
> )
> else:
> colorGlyphItems = colorGlyphs.items()
>
> errors = {}
> baseGlyphs = []
> layerBuilder = LayerV1ListBuilder()
> for baseGlyph, paint in colorGlyphItems:
> try:
> baseGlyphs.append(buildBaseGlyphV1Record(baseGlyph,
> layerBuilder, paint))
>
> except (ColorLibError, OverflowError, ValueError, TypeError) as e:
> errors[baseGlyph] = e
>
> if errors:
> failed_glyphs = _format_glyph_errors(errors)
> exc = ColorLibError(f"Failed to build
> BaseGlyphV1List:\n{failed_glyphs}")
> exc.errors = errors
> > raise exc from next(iter(errors.values()))
> E fontTools.colorLib.errors.ColorLibError: Failed to build
> BaseGlyphV1List:
> E a => TypeError: Not sure what to do with str: 'a.color1'
>
> /usr/lib/python3/dist-packages/fontTools/colorLib/builder.py:685:
> ColorLibError
> =============================== warnings summary
> ===============================
> ufo2ft/outlineCompiler.py:964
>
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_ufo2ft/build/ufo2ft/outlineCompiler.py:964:
> DeprecationWarning: invalid escape sequence \s
> '(^<ttFont\s+)(sfntVersion=".*"\s+)(.*>$)', flags=re.MULTILINE
>
> tests/filters/transformations_test.py:79
>
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_ufo2ft/build/tests/filters/transformations_test.py:79:
> DeprecationWarning: invalid escape sequence \.
> excinfo.match("is not a valid (TransformationsFilter\.)?Origin")
>
> <unknown>:79
> <unknown>:79: DeprecationWarning: invalid escape sequence \.
>
> -- Docs: https://docs.pytest.org/en/latest/warnings.html
> =========================== short test summary info
> ============================
> SKIPPED [2] .pybuild/cpython3_3.9_ufo2ft/build/tests/integration_test.py:110:
> skia-pathops is unavailable in debian yet
> SKIPPED [2] .pybuild/cpython3_3.9_ufo2ft/build/tests/integration_test.py:119:
> skia-pathops is unavailable in debian yet
> FAILED tests/outlineCompiler_test.py::ColrCpalTest::test_colr_cpal_raw[defcon]
> FAILED
> tests/outlineCompiler_test.py::ColrCpalTest::test_colr_cpal_raw[ufoLib2]
> ========= 2 failed, 513 passed, 4 skipped, 3 warnings in 6.14 seconds
> ==========
> E: pybuild pybuild:353: test: plugin distutils failed with: exit code=1: cd
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_ufo2ft/build; python3.9 -m pytest tests
> dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.8
> 3.9" returned exit code 13
The full build log is available from:
http://qa-logs.debian.net/2020/11/25/ufo2ft_2.16.0-1_unstable.log
A list of current common problems and possible solutions is available at
http://wiki.debian.org/qa.debian.org/FTBFS . You're welcome to contribute!
About the archive rebuild: The rebuild was done on EC2 VM instances from
Amazon Web Services, using a clean, minimal and up-to-date chroot. Every
failed build was retried once to eliminate random failures.
--- End Message ---