Re: Bug#1123328: python-typish: FTBFS: dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.14 3.13" returned exit code 13

Colin Watson <[email protected]> Tue, 6 Jan 2026 13:33:29 +0000
Newsgroups gmane.linux.debian.devel.python
Message-ID <[email protected]>
On Tue, Dec 16, 2025 at 07:49:50PM +0000, Santiago Vila wrote:
>=================================== FAILURES ===================================
>__________________ TestClsFunction.test_complex_cls_function ___________________
>
>self = <tests.classes.test_cls_function.TestClsFunction testMethod=test_complex_cls_function>
>
>    def test_complex_cls_function(self):
>        # Test if a more complex ClsFunction can be created without problems.
>        _Size = Union[int, Literal[Any]]
>        _Type = Union[type, Literal[Any]]
>
>>       ClsFunction({
>            _Size: lambda: 1,
>            _Type: lambda: 2,
>            Tuple[_Size, _Type]: lambda: 3,
>            Tuple[_Size, ...]: lambda: 4,
>            Tuple[Tuple[_Size, ...], _Type]: lambda: 5,
>            Tuple[Tuple[_Size, EllipsisType], _Type]: lambda: 6,
>            Tuple[Tuple[Literal[Any], EllipsisType], Literal[Any]]: lambda: 7,
>        })
>
>tests/classes/test_cls_function.py:128:
>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>typish/classes/_cls_function.py:24: in __init__
>    self.body = ClsDict(body)
>                ^^^^^^^^^^^^^
>typish/classes/_cls_dict.py:25: in __new__
>    if not all([is_type_annotation(key) for key in args[0]]):
>                ^^^^^^^^^^^^^^^^^^^^^^^
>typish/functions/_is_type_annotation.py:22: in is_type_annotation
>    or instance_of(item, super_cls)
>       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>typish/functions/_instance_of.py:18: in instance_of
>    return all(_instance_of(obj, clsinfo, state) for clsinfo in args)
>           ^^^
>typish/functions/_instance_of.py:18: in <genexpr>
>    return all(_instance_of(obj, clsinfo, state) for clsinfo in args)
>               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>typish/functions/_instance_of.py:35: in _instance_of
>    return subclass_of(type_, clsinfo)
>           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
>typish/functions/_subclass_of.py:19: in subclass_of
>    return all(_subclass_of(cls, clsinfo) for clsinfo in args)
>           ^^^
>typish/functions/_subclass_of.py:19: in <genexpr>
>    return all(_subclass_of(cls, clsinfo) for clsinfo in args)
>               ^^^^^^^^^^^^^^^^^^^^^^^^^^
>typish/functions/_subclass_of.py:36: in _subclass_of
>    result = _forward_subclass_check(cls, clsinfo)
>             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>typish/functions/_subclass_of.py:54: in _forward_subclass_check
>    cls_args = get_args(cls)
>               ^^^^^^^^^^^^^
>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>
>t = <class 'typing.Union'>
>
>    def get_args(t: type) -> typing.Tuple[type, ...]:
>        """
>        Get the arguments from a collection type (e.g. ``typing.List[int]``) as a
>        ``tuple``.
>        :param t: the collection type.
>        :return: a ``tuple`` containing types.
>        """
>        args_ = getattr(t, '__args__', tuple()) or tuple()
>>       args = tuple([attr for attr in args_
>                                       ^^^^^
>                      if type(attr) != typing.TypeVar])
>E       TypeError: 'member_descriptor' object is not iterable
>
>typish/functions/_get_args.py:12: TypeError
>=========================== short test summary info ============================
>FAILED tests/classes/test_cls_function.py::TestClsFunction::test_complex_cls_function
>======================== 1 failed, 121 passed in 0.25s =========================

This seems to be an abandoned upstream project 
(https://github.com/ramonhagenaars/typish shows the last commit in 
August 2021), which given the pace of development of Python type 
annotations seems a rather risky thing to rely on.  As far as I can see 
nothing else in Debian depends on it.

Roland, you packaged this relatively recently, but 
https://bugs.debian.org/1108191 doesn't say what you needed it for - do 
you actually still need it in Debian?  If so then pragmatically it 
probably needs somewhat more active upstream maintenance ...

Thanks,