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.