[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#975829: marked as done (ufo2ft: FTBFS: dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.8 3.9" returned exit code 13)



Your message dated Thu, 26 Nov 2020 14:50:39 +0000
with message-id <E1kiIbX-0005ig-7y@fasolo.debian.org>
and subject line Bug#975829: fixed in ufo2ft 2.18.1-1
has caused the Debian Bug report #975829,
regarding ufo2ft: FTBFS: dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.8 3.9" returned exit code 13
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
975829: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=975829
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- 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 ---
--- Begin Message ---
Source: ufo2ft
Source-Version: 2.18.1-1
Done: =?utf-8?b?WWFvIFdlaSAo6a2P6YqY5bu3KQ==?= <mwei@debian.org>

We believe that the bug you reported is fixed in the latest version of
ufo2ft, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 975829@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Yao Wei (魏銘廷) <mwei@debian.org> (supplier of updated ufo2ft package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmaster@ftp-master.debian.org)


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

Format: 1.8
Date: Thu, 26 Nov 2020 21:42:53 +0800
Source: ufo2ft
Architecture: source
Version: 2.18.1-1
Distribution: unstable
Urgency: medium
Maintainer: Debian Fonts Task Force <debian-fonts@lists.debian.org>
Changed-By: Yao Wei (魏銘廷) <mwei@debian.org>
Closes: 975829
Changes:
 ufo2ft (2.18.1-1) unstable; urgency=medium
 .
   * New upstream version 2.18.1
   * debian/control:
     - Bump Standards-Version to 4.5.1.  No changes needed.
     - Update dependencies.
   * d/patches: Remove upstreamed patch
   * Fixes tests about COLR/CPAL support (Closes: #975829)
Checksums-Sha1:
 e02a2cd1ee82a676658dd58033432ea6e5b2b34b 2312 ufo2ft_2.18.1-1.dsc
 7e3a1782fd1b043faac693b131836bcdee53de63 143378 ufo2ft_2.18.1.orig.tar.gz
 61fac0334fd68ea6d80ed37d0a51bb9f6b8e6d34 4864 ufo2ft_2.18.1-1.debian.tar.xz
 05accf7ff2e0e86ada71b93583149de4c0545631 7606 ufo2ft_2.18.1-1_amd64.buildinfo
Checksums-Sha256:
 29ca4adec6ba5a89a970d680dae42706fb1636847e62bd850b6348edff83ac7b 2312 ufo2ft_2.18.1-1.dsc
 29f04d923012b6fbcfc76e80b3739efa8bad581a91b8f8113edfb1916cce4bd8 143378 ufo2ft_2.18.1.orig.tar.gz
 fd147f753c607905bf0eea64f91c46756538c1938f87ab186d00ee9c6121d8c6 4864 ufo2ft_2.18.1-1.debian.tar.xz
 6d399904deb9d17f5747fcd6330318745e8cf75686540940e2dfeea2f4acea61 7606 ufo2ft_2.18.1-1_amd64.buildinfo
Files:
 caee6c76dab92705a6fdad48ae43241f 2312 fonts optional ufo2ft_2.18.1-1.dsc
 f74efc76f7a5354415675658e1215bc8 143378 fonts optional ufo2ft_2.18.1.orig.tar.gz
 393dda28773e7e8df34b352572d164c9 4864 fonts optional ufo2ft_2.18.1-1.debian.tar.xz
 6f6e8890fcb96bbe3c0ff9d1ca98696a 7606 fonts optional ufo2ft_2.18.1-1_amd64.buildinfo

-----BEGIN PGP SIGNATURE-----

iQJEBAEBCgAuFiEE8htgli/cvAeDZWXRl1ewRNNETDMFAl+/sgwQHG13ZWlAZGVi
aWFuLm9yZwAKCRCXV7BE00RMMxSUEADGvj84vXYUwf58UYWIqmLndZ/uByoFbS0N
EF/3z1wZ4RGBU+JOiOYNlxHNRabvkqL/yjqoMhEf/SUdslz0TxBvhDTLJZGEij32
b5ZtWByF+N7Pr0QPuGERANKlwIxfQy+15m0pLQ5OY1eBp3j2aal7wUQRV8O9nkYK
5vncyZIXwC9KN7YPmK+dX6nCPbV6jsUScEUEQ1Oj90PXzAfdH7mxXso2SasQw+ZN
jPnllTROWcs3pYGGu15cFQi3jSSo+1kZinDk8GVgRbdzkmyysln4JBDGyGxFnBrA
CdWfql9/MUFch6RHs0Odr/MPu820YM+mkrcsz8VGyYO0qqenPL9zkmbLRL9n+Xim
ABUwTchCtRhii/9ek7yomlXIvhqYp2MfSjOSg8t86cFjhrs9eDt4dw4zfHJOu9wV
77+138A/JOI0i4Lb5lf20Dakzz5qc96d/FaEMf6+e0Ehb+eW8CcFYMlG/pj2VxTb
Y9FM1BmeS/mAslY1eek2zEO3yWjNbdXr/dyZEFHCI92ZCSay+ggHECbMR9MVDuFs
OME6NmzXHe2Qgh8qHJX1YEF9J9wKTkCFGSEGW0NkXZ1xUAnNkIvpKUnTA0I06g9f
OlCAwq9dS7REW/A1SWFtjr3Cl9L5cgotNv8SIdHTxzrdjwdMPl3CcSYAVZ+y0J2b
WZr/BivE7Q==
=2jTn
-----END PGP SIGNATURE-----

--- End Message ---

Reply to: