Bug#1082205: python-deprecated FTBFS with Python 3.13

Stefano Rivera stefanor at debian.org
Thu Sep 19 12:02:10 BST 2024


Source: python-deprecated
Version: 1.2.14-1
Severity: normal
User: debian-python at lists.debian.org
Usertags: python3.13
Forwarded: https://github.com/laurent-laporte-pro/deprecated/pull/73

This package failed build from source when test-built against a version of
python3-defaults that includes 3.13 as a supported version.

To reproduce this issue, build against python3-defaults (python3-all-dev etc.)
from Debian experimental.

What's new in Python 3.13:
https://docs.python.org/3.13/whatsnew/3.13.html

Log snippet:

I: pybuild base:311: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_deprecated/build; python3.13 -m pytest tests
============================= test session starts ==============================
platform linux -- Python 3.13.0rc2, pytest-8.3.3, pluggy-1.5.0
rootdir: /<<PKGBUILDDIR>>
configfile: setup.cfg
plugins: typeguard-4.3.0, cov-5.0.0
collected 171 items

tests/test.py ..                                                         [  1%]
tests/test_deprecated.py ............................FFFFFFF......       [ 25%]
tests/test_deprecated_class.py .......                                   [ 29%]
tests/test_deprecated_metaclass.py ....                                  [ 31%]
tests/test_sphinx.py ................................................... [ 61%]
.............FFFF..........................                              [ 86%]
tests/test_sphinx_adapter.py ............                                [ 93%]
tests/test_sphinx_class.py .......                                       [ 97%]
tests/test_sphinx_metaclass.py ....                                      [100%]

=================================== FAILURES ===================================
______________ test_classic_deprecated_class_method__warns[None] _______________

classic_deprecated_class_method = <class 'tests.test_deprecated.classic_deprecated_class_method.<locals>.Foo5'>

    def test_classic_deprecated_class_method__warns(classic_deprecated_class_method):
        with warnings.catch_warnings(record=True) as warns:
            warnings.simplefilter("always")
            cls = classic_deprecated_class_method()
            cls.foo5()
        assert len(warns) == 1
        warn = warns[0]
        assert issubclass(warn.category, DeprecationWarning)
        if sys.version_info >= (3, 9):
>           assert "deprecated class method" in str(warn.message)
E           AssertionError: assert 'deprecated class method' in 'Call to deprecated function (or staticmethod) foo5.'
E            +  where 'Call to deprecated function (or staticmethod) foo5.' = str(DeprecationWarning('Call to deprecated function (or staticmethod) foo5.'))
E            +    where DeprecationWarning('Call to deprecated function (or staticmethod) foo5.') = <warnings.WarningMessage object at 0xffff9a38fda0>.message

tests/test_deprecated.py:189: AssertionError
_ test_classic_deprecated_class_method__warns[classic_deprecated_class_method1] _

classic_deprecated_class_method = <class 'tests.test_deprecated.classic_deprecated_class_method.<locals>.Foo5'>

    def test_classic_deprecated_class_method__warns(classic_deprecated_class_method):
        with warnings.catch_warnings(record=True) as warns:
            warnings.simplefilter("always")
            cls = classic_deprecated_class_method()
            cls.foo5()
        assert len(warns) == 1
        warn = warns[0]
        assert issubclass(warn.category, DeprecationWarning)
        if sys.version_info >= (3, 9):
>           assert "deprecated class method" in str(warn.message)
E           AssertionError: assert 'deprecated class method' in 'Call to deprecated function (or staticmethod) foo5.'
E            +  where 'Call to deprecated function (or staticmethod) foo5.' = str(DeprecationWarning('Call to deprecated function (or staticmethod) foo5.'))
E            +    where DeprecationWarning('Call to deprecated function (or staticmethod) foo5.') = <warnings.WarningMessage object at 0xffff9a38dd00>.message

tests/test_deprecated.py:189: AssertionError
_ test_classic_deprecated_class_method__warns[classic_deprecated_class_method2] _

classic_deprecated_class_method = <class 'tests.test_deprecated.classic_deprecated_class_method.<locals>.Foo5'>

    def test_classic_deprecated_class_method__warns(classic_deprecated_class_method):
        with warnings.catch_warnings(record=True) as warns:
            warnings.simplefilter("always")
            cls = classic_deprecated_class_method()
            cls.foo5()
        assert len(warns) == 1
        warn = warns[0]
        assert issubclass(warn.category, DeprecationWarning)
        if sys.version_info >= (3, 9):
>           assert "deprecated class method" in str(warn.message)
E           AssertionError: assert 'deprecated class method' in 'Call to deprecated function (or staticmethod) foo5. (Good reason)'
E            +  where 'Call to deprecated function (or staticmethod) foo5. (Good reason)' = str(DeprecationWarning('Call to deprecated function (or staticmethod) foo5. (Good reason)'))
E            +    where DeprecationWarning('Call to deprecated function (or staticmethod) foo5. (Good reason)') = <warnings.WarningMessage object at 0xffff9a38e3c0>.message

tests/test_deprecated.py:189: AssertionError
_ test_classic_deprecated_class_method__warns[classic_deprecated_class_method3] _

classic_deprecated_class_method = <class 'tests.test_deprecated.classic_deprecated_class_method.<locals>.Foo5'>

    def test_classic_deprecated_class_method__warns(classic_deprecated_class_method):
        with warnings.catch_warnings(record=True) as warns:
            warnings.simplefilter("always")
            cls = classic_deprecated_class_method()
            cls.foo5()
        assert len(warns) == 1
        warn = warns[0]
        assert issubclass(warn.category, DeprecationWarning)
        if sys.version_info >= (3, 9):
>           assert "deprecated class method" in str(warn.message)
E           AssertionError: assert 'deprecated class method' in 'Call to deprecated function (or staticmethod) foo5. (Good reason)'
E            +  where 'Call to deprecated function (or staticmethod) foo5. (Good reason)' = str(DeprecationWarning('Call to deprecated function (or staticmethod) foo5. (Good reason)'))
E            +    where DeprecationWarning('Call to deprecated function (or staticmethod) foo5. (Good reason)') = <warnings.WarningMessage object at 0xffff9a38d640>.message

tests/test_deprecated.py:189: AssertionError
_ test_classic_deprecated_class_method__warns[classic_deprecated_class_method4] _

classic_deprecated_class_method = <class 'tests.test_deprecated.classic_deprecated_class_method.<locals>.Foo5'>

    def test_classic_deprecated_class_method__warns(classic_deprecated_class_method):
        with warnings.catch_warnings(record=True) as warns:
            warnings.simplefilter("always")
            cls = classic_deprecated_class_method()
            cls.foo5()
        assert len(warns) == 1
        warn = warns[0]
        assert issubclass(warn.category, DeprecationWarning)
        if sys.version_info >= (3, 9):
>           assert "deprecated class method" in str(warn.message)
E           AssertionError: assert 'deprecated class method' in 'Call to deprecated function (or staticmethod) foo5. -- Deprecated since version 1.2.3.'
E            +  where 'Call to deprecated function (or staticmethod) foo5. -- Deprecated since version 1.2.3.' = str(DeprecationWarning('Call to deprecated function (or staticmethod) foo5. -- Deprecated since version 1.2.3.'))
E            +    where DeprecationWarning('Call to deprecated function (or staticmethod) foo5. -- Deprecated since version 1.2.3.') = <warnings.WarningMessage object at 0xffff9a38e840>.message

tests/test_deprecated.py:189: AssertionError
_ test_classic_deprecated_class_method__warns[classic_deprecated_class_method5] _

classic_deprecated_class_method = <class 'tests.test_deprecated.classic_deprecated_class_method.<locals>.Foo5'>

    def test_classic_deprecated_class_method__warns(classic_deprecated_class_method):
        with warnings.catch_warnings(record=True) as warns:
            warnings.simplefilter("always")
            cls = classic_deprecated_class_method()
            cls.foo5()
        assert len(warns) == 1
        warn = warns[0]
        assert issubclass(warn.category, DeprecationWarning)
        if sys.version_info >= (3, 9):
>           assert "deprecated class method" in str(warn.message)
E           AssertionError: assert 'deprecated class method' in 'Call to deprecated function (or staticmethod) foo5.'
E            +  where 'Call to deprecated function (or staticmethod) foo5.' = str(DeprecationWarning('Call to deprecated function (or staticmethod) foo5.'))
E            +    where DeprecationWarning('Call to deprecated function (or staticmethod) foo5.') = <warnings.WarningMessage object at 0xffff9a38ede0>.message

tests/test_deprecated.py:189: AssertionError
_ test_classic_deprecated_class_method__warns[classic_deprecated_class_method6] _

classic_deprecated_class_method = <class 'tests.test_deprecated.classic_deprecated_class_method.<locals>.Foo5'>

    def test_classic_deprecated_class_method__warns(classic_deprecated_class_method):
        with warnings.catch_warnings(record=True) as warns:
            warnings.simplefilter("always")
            cls = classic_deprecated_class_method()
            cls.foo5()
        assert len(warns) == 1
        warn = warns[0]
        assert issubclass(warn.category, DeprecationWarning)
        if sys.version_info >= (3, 9):
>           assert "deprecated class method" in str(warn.message)
E           AssertionError: assert 'deprecated class method' in 'Call to deprecated function (or staticmethod) foo5.'
E            +  where 'Call to deprecated function (or staticmethod) foo5.' = str(MyDeprecationWarning('Call to deprecated function (or staticmethod) foo5.'))
E            +    where MyDeprecationWarning('Call to deprecated function (or staticmethod) foo5.') = <warnings.WarningMessage object at 0xffff9a38ed50>.message

tests/test_deprecated.py:189: AssertionError
_ test_sphinx_deprecated_class_method__warns[sphinx_deprecated_class_method0] __

sphinx_deprecated_class_method = <class 'tests.test_sphinx.sphinx_deprecated_class_method.<locals>.Foo5'>

    def test_sphinx_deprecated_class_method__warns(sphinx_deprecated_class_method):
        with warnings.catch_warnings(record=True) as warns:
            warnings.simplefilter("always")
            cls = sphinx_deprecated_class_method()
            cls.foo5()
        assert len(warns) == 1
        warn = warns[0]
        assert issubclass(warn.category, DeprecationWarning)
        if sys.version_info >= (3, 9):
>           assert "deprecated class method" in str(warn.message)
E           AssertionError: assert 'deprecated class method' in 'Call to deprecated function (or staticmethod) foo5. -- Deprecated since version 1.2.3.'
E            +  where 'Call to deprecated function (or staticmethod) foo5. -- Deprecated since version 1.2.3.' = str(DeprecationWarning('Call to deprecated function (or staticmethod) foo5. -- Deprecated since version 1.2.3.'))
E            +    where DeprecationWarning('Call to deprecated function (or staticmethod) foo5. -- Deprecated since version 1.2.3.') = <warnings.WarningMessage object at 0xffff9a38eba0>.message

tests/test_sphinx.py:305: AssertionError
_ test_sphinx_deprecated_class_method__warns[sphinx_deprecated_class_method1] __

sphinx_deprecated_class_method = <class 'tests.test_sphinx.sphinx_deprecated_class_method.<locals>.Foo5'>

    def test_sphinx_deprecated_class_method__warns(sphinx_deprecated_class_method):
        with warnings.catch_warnings(record=True) as warns:
            warnings.simplefilter("always")
            cls = sphinx_deprecated_class_method()
            cls.foo5()
        assert len(warns) == 1
        warn = warns[0]
        assert issubclass(warn.category, DeprecationWarning)
        if sys.version_info >= (3, 9):
>           assert "deprecated class method" in str(warn.message)
E           AssertionError: assert 'deprecated class method' in 'Call to deprecated function (or staticmethod) foo5. (Good reason) -- Deprecated since version 1.2.3.'
E            +  where 'Call to deprecated function (or staticmethod) foo5. (Good reason) -- Deprecated since version 1.2.3.' = str(DeprecationWarning('Call to deprecated function (or staticmethod) foo5. (Good reason) -- Deprecated since version 1.2.3.'))
E            +    where DeprecationWarning('Call to deprecated function (or staticmethod) foo5. (Good reason) -- Deprecated since version 1.2.3.') = <warnings.WarningMessage object at 0xffff9a38e8d0>.message

tests/test_sphinx.py:305: AssertionError
_ test_sphinx_deprecated_class_method__warns[sphinx_deprecated_class_method2] __

sphinx_deprecated_class_method = <class 'tests.test_sphinx.sphinx_deprecated_class_method.<locals>.Foo5'>

    def test_sphinx_deprecated_class_method__warns(sphinx_deprecated_class_method):
        with warnings.catch_warnings(record=True) as warns:
            warnings.simplefilter("always")
            cls = sphinx_deprecated_class_method()
            cls.foo5()
        assert len(warns) == 1
        warn = warns[0]
        assert issubclass(warn.category, DeprecationWarning)
        if sys.version_info >= (3, 9):
>           assert "deprecated class method" in str(warn.message)
E           AssertionError: assert 'deprecated class method' in 'Call to deprecated function (or staticmethod) foo5. -- Deprecated since version 1.2.3.'
E            +  where 'Call to deprecated function (or staticmethod) foo5. -- Deprecated since version 1.2.3.' = str(DeprecationWarning('Call to deprecated function (or staticmethod) foo5. -- Deprecated since version 1.2.3.'))
E            +    where DeprecationWarning('Call to deprecated function (or staticmethod) foo5. -- Deprecated since version 1.2.3.') = <warnings.WarningMessage object at 0xffff9a38f4a0>.message

tests/test_sphinx.py:305: AssertionError
_ test_sphinx_deprecated_class_method__warns[sphinx_deprecated_class_method3] __

sphinx_deprecated_class_method = <class 'tests.test_sphinx.sphinx_deprecated_class_method.<locals>.Foo5'>

    def test_sphinx_deprecated_class_method__warns(sphinx_deprecated_class_method):
        with warnings.catch_warnings(record=True) as warns:
            warnings.simplefilter("always")
            cls = sphinx_deprecated_class_method()
            cls.foo5()
        assert len(warns) == 1
        warn = warns[0]
        assert issubclass(warn.category, DeprecationWarning)
        if sys.version_info >= (3, 9):
>           assert "deprecated class method" in str(warn.message)
E           AssertionError: assert 'deprecated class method' in 'Call to deprecated function (or staticmethod) foo5. -- Deprecated since version 1.2.3.'
E            +  where 'Call to deprecated function (or staticmethod) foo5. -- Deprecated since version 1.2.3.' = str(MyDeprecationWarning('Call to deprecated function (or staticmethod) foo5. -- Deprecated since version 1.2.3.'))
E            +    where MyDeprecationWarning('Call to deprecated function (or staticmethod) foo5. -- Deprecated since version 1.2.3.') = <warnings.WarningMessage object at 0xffff9a38d1c0>.message

tests/test_sphinx.py:305: AssertionError
=============================== warnings summary ===============================
tests/test.py:2
  /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_deprecated/build/tests/test.py:2: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
    import pkg_resources

.pybuild/cpython3_3.13_deprecated/build/tests/test_deprecated_class.py::test_simple_class_deprecation_with_args
  /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_deprecated/build/tests/test_deprecated_class.py:148: DeprecationWarning: Call to deprecated class MyClass. (kwargs class)
    MyClass(5)

.pybuild/cpython3_3.13_deprecated/build/tests/test_sphinx_class.py::test_isinstance_deprecated
  /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_deprecated/build/tests/test_sphinx_class.py:134: DeprecationWarning: Call to deprecated class DeprecatedChildCls. (some reason) -- Deprecated since version Y.Z.
    instance = DeprecatedChildCls()

.pybuild/cpython3_3.13_deprecated/build/tests/test_sphinx_class.py::test_isinstance_deprecated
  /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_deprecated/build/deprecated/classic.py:173: DeprecationWarning: Call to deprecated class DeprecatedCls. (some reason) -- Deprecated since version X.Y.
    return old_new1(cls, *args, **kwargs)

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED tests/test_deprecated.py::test_classic_deprecated_class_method__warns[None]
FAILED tests/test_deprecated.py::test_classic_deprecated_class_method__warns[classic_deprecated_class_method1]
FAILED tests/test_deprecated.py::test_classic_deprecated_class_method__warns[classic_deprecated_class_method2]
FAILED tests/test_deprecated.py::test_classic_deprecated_class_method__warns[classic_deprecated_class_method3]
FAILED tests/test_deprecated.py::test_classic_deprecated_class_method__warns[classic_deprecated_class_method4]
FAILED tests/test_deprecated.py::test_classic_deprecated_class_method__warns[classic_deprecated_class_method5]
FAILED tests/test_deprecated.py::test_classic_deprecated_class_method__warns[classic_deprecated_class_method6]
FAILED tests/test_sphinx.py::test_sphinx_deprecated_class_method__warns[sphinx_deprecated_class_method0]
FAILED tests/test_sphinx.py::test_sphinx_deprecated_class_method__warns[sphinx_deprecated_class_method1]
FAILED tests/test_sphinx.py::test_sphinx_deprecated_class_method__warns[sphinx_deprecated_class_method2]
FAILED tests/test_sphinx.py::test_sphinx_deprecated_class_method__warns[sphinx_deprecated_class_method3]
================== 11 failed, 160 passed, 4 warnings in 0.35s ==================
E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_deprecated/build; python3.13 -m pytest tests
I: pybuild base:311: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_deprecated/build; python3.12 -m pytest tests
============================= test session starts ==============================
platform linux -- Python 3.12.6, pytest-8.3.3, pluggy-1.5.0
rootdir: /<<PKGBUILDDIR>>
configfile: setup.cfg
plugins: typeguard-4.3.0, cov-5.0.0
collected 171 items

tests/test.py ..                                                         [  1%]
tests/test_deprecated.py .........................................       [ 25%]
tests/test_deprecated_class.py .......                                   [ 29%]
tests/test_deprecated_metaclass.py ....                                  [ 31%]
tests/test_sphinx.py ................................................... [ 61%]
...........................................                              [ 86%]
tests/test_sphinx_adapter.py ............                                [ 93%]
tests/test_sphinx_class.py .......                                       [ 97%]
tests/test_sphinx_metaclass.py ....                                      [100%]

=============================== warnings summary ===============================
tests/test.py:2
  /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_deprecated/build/tests/test.py:2: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
    import pkg_resources

.pybuild/cpython3_3.12_deprecated/build/tests/test_deprecated_class.py::test_simple_class_deprecation_with_args
  /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_deprecated/build/tests/test_deprecated_class.py:148: DeprecationWarning: Call to deprecated class MyClass. (kwargs class)
    MyClass(5)

.pybuild/cpython3_3.12_deprecated/build/tests/test_sphinx_class.py::test_isinstance_deprecated
  /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_deprecated/build/tests/test_sphinx_class.py:134: DeprecationWarning: Call to deprecated class DeprecatedChildCls. (some reason) -- Deprecated since version Y.Z.
    instance = DeprecatedChildCls()

.pybuild/cpython3_3.12_deprecated/build/tests/test_sphinx_class.py::test_isinstance_deprecated
  /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_deprecated/build/deprecated/classic.py:173: DeprecationWarning: Call to deprecated class DeprecatedCls. (some reason) -- Deprecated since version X.Y.
    return old_new1(cls, *args, **kwargs)

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
======================= 171 passed, 4 warnings in 0.30s ========================
dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.13 3.12" returned exit code 13
make: *** [debian/rules:10: binary] Error 25
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
--------------------------------------------------------------------------------
Build finished at 2024-09-19T00:22:25Z


If required, the full build log is available here (for the next 30 days):
https://debusine.debian.net/artifact/782368/

This bug has been filed at "normal" severity, as we haven't started the
transition to add 3.13 as a supported version, yet. This will be raised to RC
as soon as that happens, hopefully well before trixie.

Thanks,

Stefano



More information about the Pkg-grass-devel mailing list