Your message dated Tue, 30 Dec 2025 09:04:59 +0000
with message-id <[email protected]>
and subject line Bug#1123462: fixed in rally-openstack 3.0.0-9
has caused the Debian Bug report #1123462,
regarding rally-openstack: FTBFS: E AttributeError: module 'ast' has no
attribute 'Str'
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 [email protected]
immediately.)
--
1123462: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1123462
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: src:rally-openstack
Version: 3.0.0-8
Severity: serious
Tags: ftbfs forky sid
Dear maintainer:
During a rebuild of all packages in unstable, this package failed to build.
Below you will find the last part of the build log (probably the most
relevant part, but not necessarily). If required, the full build log
is available here:
https://people.debian.org/~sanvila/build-logs/202512/
About the archive rebuild: The build was made on virtual machines from AWS,
using sbuild and a reduced chroot with only build-essential packages.
If you cannot reproduce the bug please contact me privately, as I
am willing to provide ssh access to a virtual machine where the bug is
fully reproducible.
If this is really a bug in one of the build-depends, please use
reassign and add an affects on src:rally-openstack, so that this is still
visible in the BTS web page for this package.
Thanks.
--------------------------------------------------------------------------------
[...]
debian/rules clean
make: pyversions: No such file or directory
py3versions: no X-Python3-Version in control file, using supported versions
dh clean --buildsystem=pybuild --with python3
debian/rules override_dh_auto_clean
make[1]: Entering directory '/<<PKGBUILDDIR>>'
make[1]: pyversions: No such file or directory
py3versions: no X-Python3-Version in control file, using supported versions
python3 setup.py clean
/usr/lib/python3/dist-packages/setuptools/dist.py:759:
SetuptoolsDeprecationWarning: License classifiers are deprecated.
!!
********************************************************************************
Please consider removing the following classifiers in favor of a SPDX
license expression:
[... snipped ...]
def test__get_value_add(self):
self.assertEqual(
"expression.some.crazy.add",
> self.visitor._get_value(
self._parse_expr("EXPR + '.some.crazy.add'")
)
)
tests/unit/test_test_mock.py:121:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <tests.unit.test_mock.FuncMockArgsDecoratorsChecker object at
0x7f0163a64bd0>
node = BinOp(left=Name(id='EXPR', ctx=Load()), op=Add(),
right=Constant(value='.some.crazy.add', kind=None))
def _get_value(self, node):
"""Get mock.patch string argument regexp.
It is either a string (if we are lucky), string-format of
("%s.something" % GVAL) or (GVAL + ".something")
"""
val = None
> if isinstance(node, ast.Str):
^^^^^^^
E AttributeError: module 'ast' has no attribute 'Str'
tests/unit/test_mock.py:116: AttributeError
________ FuncMockArgsDecoratorsCheckerTestCase.test__get_value_asserts _________
self = <tests.unit.test_test_mock.FuncMockArgsDecoratorsCheckerTestCase
testMethod=test__get_value_asserts>
def test__get_value_asserts(self):
> self.assertRaises(
ValueError,
self.visitor._get_value,
self._parse_expr("EXPR % 'abc'")
)
tests/unit/test_test_mock.py:142:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/unit/test.py:60: in assertRaises
callable(*args, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
def _get_value(self, node):
"""Get mock.patch string argument regexp.
It is either a string (if we are lucky), string-format of
("%s.something" % GVAL) or (GVAL + ".something")
"""
val = None
> if isinstance(node, ast.Str):
^^^^^^^
E AttributeError: module 'ast' has no attribute 'Str'
tests/unit/test_mock.py:116: AttributeError
_________ FuncMockArgsDecoratorsCheckerTestCase.test__get_value_global _________
self = <tests.unit.test_test_mock.FuncMockArgsDecoratorsCheckerTestCase
testMethod=test__get_value_global>
def test__get_value_global(self):
self.assertEqual(
"expression",
> self.visitor._get_value(
self._parse_expr("EXPR")
)
)
tests/unit/test_test_mock.py:129:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <tests.unit.test_mock.FuncMockArgsDecoratorsChecker object at
0x7f01649b5ef0>
node = Name(id='EXPR', ctx=Load())
def _get_value(self, node):
"""Get mock.patch string argument regexp.
It is either a string (if we are lucky), string-format of
("%s.something" % GVAL) or (GVAL + ".something")
"""
val = None
> if isinstance(node, ast.Str):
^^^^^^^
E AttributeError: module 'ast' has no attribute 'Str'
tests/unit/test_mock.py:116: AttributeError
__________ FuncMockArgsDecoratorsCheckerTestCase.test__get_value_mod ___________
self = <tests.unit.test_test_mock.FuncMockArgsDecoratorsCheckerTestCase
testMethod=test__get_value_mod>
def test__get_value_mod(self):
self.assertEqual(
"some.crazy.mod.expression",
> self.visitor._get_value(
self._parse_expr("'some.crazy.mod.%s' % EXPR")
)
)
tests/unit/test_test_mock.py:113:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <tests.unit.test_mock.FuncMockArgsDecoratorsChecker object at
0x7f0166b5a3f0>
node = BinOp(left=Constant(value='some.crazy.mod.%s', kind=None), op=Mod(),
right=Name(id='EXPR', ctx=Load()))
def _get_value(self, node):
"""Get mock.patch string argument regexp.
It is either a string (if we are lucky), string-format of
("%s.something" % GVAL) or (GVAL + ".something")
"""
val = None
> if isinstance(node, ast.Str):
^^^^^^^
E AttributeError: module 'ast' has no attribute 'Str'
tests/unit/test_mock.py:116: AttributeError
__________ FuncMockArgsDecoratorsCheckerTestCase.test__get_value_none __________
self = <tests.unit.test_test_mock.FuncMockArgsDecoratorsCheckerTestCase
testMethod=test__get_value_none>
def test__get_value_none(self):
> self.assertRaises(
ValueError,
self.visitor._get_value,
ast.parse("import abc")
)
tests/unit/test_test_mock.py:135:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/unit/test.py:60: in assertRaises
callable(*args, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
def _get_value(self, node):
"""Get mock.patch string argument regexp.
It is either a string (if we are lucky), string-format of
("%s.something" % GVAL) or (GVAL + ".something")
"""
val = None
> if isinstance(node, ast.Str):
^^^^^^^
E AttributeError: module 'ast' has no attribute 'Str'
tests/unit/test_mock.py:116: AttributeError
__________ FuncMockArgsDecoratorsCheckerTestCase.test__get_value_str ___________
self = <tests.unit.test_test_mock.FuncMockArgsDecoratorsCheckerTestCase
testMethod=test__get_value_str>
def test__get_value_str(self):
self.assertEqual(
"not.your.fault",
> self.visitor._get_value(self._parse_expr("'not.your.fault'"))
)
tests/unit/test_test_mock.py:107:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <tests.unit.test_mock.FuncMockArgsDecoratorsChecker object at
0x7f01668213d0>
node = Constant(value='not.your.fault', kind=None)
def _get_value(self, node):
"""Get mock.patch string argument regexp.
It is either a string (if we are lucky), string-format of
("%s.something" % GVAL) or (GVAL + ".something")
"""
val = None
> if isinstance(node, ast.Str):
^^^^^^^
E AttributeError: module 'ast' has no attribute 'Str'
tests/unit/test_mock.py:116: AttributeError
_______________ FuncMockArgsDecoratorsCheckerTestCase.test_visit _______________
self = <tests.unit.test_test_mock.FuncMockArgsDecoratorsCheckerTestCase
testMethod=test_visit>
def test_visit(self):
self.visitor.classname_python = "my_class_object"
> self.visitor.visit(self.tree)
tests/unit/test_test_mock.py:439:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3.14/ast.py:506: in visit
return visitor(node)
^^^^^^^^^^^^^
tests/unit/test_mock.py:249: in visit_FunctionDef
mock_decs = self._get_mock_decorators_variants(node)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests/unit/test_mock.py:194: in _get_mock_decorators_variants
+ self._get_value(decorator.args[1]))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <tests.unit.test_mock.FuncMockArgsDecoratorsChecker object at
0x7f0166d417f0>
node = Constant(value='abc', kind=None)
def _get_value(self, node):
"""Get mock.patch string argument regexp.
It is either a string (if we are lucky), string-format of
("%s.something" % GVAL) or (GVAL + ".something")
"""
val = None
> if isinstance(node, ast.Str):
^^^^^^^
E AttributeError: module 'ast' has no attribute 'Str'
tests/unit/test_mock.py:116: AttributeError
_____________ FuncMockArgsDecoratorsCheckerTestCase.test_visit_ok ______________
self = <tests.unit.test_test_mock.FuncMockArgsDecoratorsCheckerTestCase
testMethod=test_visit_ok>
def test_visit_ok(self):
self.visitor.classname_python = "my_class_object"
> self.visitor.visit(
self._parse_expr(
"""
class MyClassObjectTestCase(object):
@mock.patch("foo.bar.MyClassObject.yep")
@mock.patch("foo.bar.ClassName.ok")
@mock.patch.object(pkg.FooClass, "method")
def test_mockings(self, mock_pkg_foo_class_method, mock_class_name_ok,
mock_yep):
pass
""")
)
tests/unit/test_test_mock.py:460:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3.14/ast.py:506: in visit
return visitor(node)
^^^^^^^^^^^^^
tests/unit/test_mock.py:241: in visit_ClassDef
self.generic_visit(node)
/usr/lib/python3.14/ast.py:514: in generic_visit
self.visit(item)
/usr/lib/python3.14/ast.py:506: in visit
return visitor(node)
^^^^^^^^^^^^^
tests/unit/test_mock.py:249: in visit_FunctionDef
mock_decs = self._get_mock_decorators_variants(node)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests/unit/test_mock.py:194: in _get_mock_decorators_variants
+ self._get_value(decorator.args[1]))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <tests.unit.test_mock.FuncMockArgsDecoratorsChecker object at
0x7f01675acc50>
node = Constant(value='method', kind=None)
def _get_value(self, node):
"""Get mock.patch string argument regexp.
It is either a string (if we are lucky), string-format of
("%s.something" % GVAL) or (GVAL + ".something")
"""
val = None
> if isinstance(node, ast.Str):
^^^^^^^
E AttributeError: module 'ast' has no attribute 'Str'
tests/unit/test_mock.py:116: AttributeError
=========================== short test summary info ============================
FAILED
tests/unit/test_mock.py::MockUsageCheckerTestCase::test_mock_decorators_and_args
FAILED
tests/unit/test_test_mock.py::FuncMockArgsDecoratorsCheckerTestCase::test__get_mock_decorators_variants
FAILED
tests/unit/test_test_mock.py::FuncMockArgsDecoratorsCheckerTestCase::test__get_value_add
FAILED
tests/unit/test_test_mock.py::FuncMockArgsDecoratorsCheckerTestCase::test__get_value_asserts
FAILED
tests/unit/test_test_mock.py::FuncMockArgsDecoratorsCheckerTestCase::test__get_value_global
FAILED
tests/unit/test_test_mock.py::FuncMockArgsDecoratorsCheckerTestCase::test__get_value_mod
FAILED
tests/unit/test_test_mock.py::FuncMockArgsDecoratorsCheckerTestCase::test__get_value_none
FAILED
tests/unit/test_test_mock.py::FuncMockArgsDecoratorsCheckerTestCase::test__get_value_str
FAILED
tests/unit/test_test_mock.py::FuncMockArgsDecoratorsCheckerTestCase::test_visit
FAILED
tests/unit/test_test_mock.py::FuncMockArgsDecoratorsCheckerTestCase::test_visit_ok
================ 10 failed, 2124 passed, 5 deselected in 16.58s ================
make[1]: *** [debian/rules:27: override_dh_auto_install] Error 1
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
make: *** [debian/rules:6: binary] Error 2
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
--------------------------------------------------------------------------------
--- End Message ---
--- Begin Message ---
Source: rally-openstack
Source-Version: 3.0.0-9
Done: Thomas Goirand <[email protected]>
We believe that the bug you reported is fixed in the latest version of
rally-openstack, 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 [email protected],
and the maintainer will reopen the bug report if appropriate.
Debian distribution maintenance software
pp.
Thomas Goirand <[email protected]> (supplier of updated rally-openstack 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 [email protected])
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
Format: 1.8
Date: Mon, 29 Dec 2025 17:43:56 +0100
Source: rally-openstack
Architecture: source
Version: 3.0.0-9
Distribution: unstable
Urgency: medium
Maintainer: Debian OpenStack <[email protected]>
Changed-By: Thomas Goirand <[email protected]>
Closes: 1123462
Changes:
rally-openstack (3.0.0-9) unstable; urgency=medium
.
* Add python-3.14_do_not_use_deprecated_ast.Str.patch (Closes: #1123462).
* Add python-3.14-fix-ast-attributes.patch.
Checksums-Sha1:
2b5cb3951e6e9bb074a820ac527f3f2daba4685f 2931 rally-openstack_3.0.0-9.dsc
1d201ea072521949f5f099c1d7a6fadfaff83c48 19384
rally-openstack_3.0.0-9.debian.tar.xz
bde75f933047e54cfa581f0d37f0a125b60ca4c9 13902
rally-openstack_3.0.0-9_amd64.buildinfo
Checksums-Sha256:
cdb507ed8ab7fb470448fc97411798b9426d2b2509e1b25591a1dc6b2ef36432 2931
rally-openstack_3.0.0-9.dsc
001e6c30f0b823f1dbc23a348538f7e651d531f7f3e131de31c61c17adbde4c7 19384
rally-openstack_3.0.0-9.debian.tar.xz
583cc68205d0cb6ecf34dcb1e6925649d9764c77be707090a3290a1680efd407 13902
rally-openstack_3.0.0-9_amd64.buildinfo
Files:
d0e31e3e30a692d790d6b56bb3786764 2931 net optional rally-openstack_3.0.0-9.dsc
441dd897a5312c3fffb589bfbc7478da 19384 net optional
rally-openstack_3.0.0-9.debian.tar.xz
8065ecb28d4ea47cd567e9aaa9621728 13902 net optional
rally-openstack_3.0.0-9_amd64.buildinfo
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCgAdFiEEoLGp81CJVhMOekJc1BatFaxrQ/4FAmlTkGYACgkQ1BatFaxr
Q/5moQ/+LMyNQ6fpZJsGxGIpkIQkexshJjaFcr5urvgFuxKW7UPaFjC2J+7gXnxX
1WTY3znKCz2fKLiUxm6Xk67spo2R5TBFajL4ARmT1k+SqPyfr9vyzO6eNe4K+djZ
vPhnPzRo9QV9jXcQJ+8+Pri0gBIvKEE/h2Qm8g/Ml9qVNws2c9n2MaR3x/Jh9khF
IBkKvRQgYrhylzioM6dQnFT2LLT0rhU4UDpkawgl4uaJZpRQM6EbNf2E0PGG3wlX
3+LJ3x0mT3LabU3QM5i4/HLGqD/OKEhu0qvXPQRsyNNXdhZbEldcG26Zi6QqhcUp
Zggr8ncKOLbrTKQ7efvWMIk8GAWSzjRnJyDhVRvqEPAHxuNOYrPmxyoeUPh7TDvK
t1YYcIAjas3CJ//RPMt/F6yjm2mZasFvm2RhKX5JOEAOh7A+hlpWKptaVfCPOFYH
hHorUlxKwSIpW6qPTzulhBmp3rZH7pJzDxuFjvoWjp33UcA4Oisk9Gmbtp+dy8Sw
yOqQdp/wkTy0FvnWe3FjT6i4LjqqRqMSb0noFTKF5aZUYjdTZqB/KECkH/k8yATS
3SSjHRWI+wtPFbiSA2JY4DWhhh51anEO30YO0B/qhta5BTO9y3YJCwI1b+tsziIf
yc6Ktt/xJJs5rx3UpxH3ArMffGabcu35MZe/3BTABAjGMFL+PGc=
=cuXk
-----END PGP SIGNATURE-----
pgp1pDtceX5eC.pgp
Description: PGP signature
--- End Message ---