Bug 1787746

Summary: python-decorator fails to build with Python 3.9: uses removed threading.Thread.isAlive()
Product: [Fedora] Fedora Reporter: Miro Hrončok <mhroncok>
Component: python-decoratorAssignee: Fedora Infrastructure SIG <infra-sig>
Status: CLOSED RAWHIDE QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: rawhideCC: cstratak, infra-sig, kevin, me, mhroncok, mplch, rbean
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2020-03-05 09:45:48 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 1785415    

Description Miro Hrončok 2020-01-04 22:51:39 UTC
python-decorator fails to build with Python 3.9.0a2.

+ /usr/bin/python3 setup.py test
running test
WARNING: Testing via this command is deprecated and will be removed in a future version. Users looking for a generic test entry point independent of test runner are encouraged to use tox.
running egg_info
writing src/decorator.egg-info/PKG-INFO
writing dependency_links to src/decorator.egg-info/dependency_links.txt
writing top-level names to src/decorator.egg-info/top_level.txt
reading manifest file 'src/decorator.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching 'README.rst'
warning: no files found matching 'documentation.pdf'
writing manifest file 'src/decorator.egg-info/SOURCES.txt'
running build_ext
test_before_after (tests.test.CoroutineTestCase) ... ok
test_coro_to_func (tests.test.CoroutineTestCase) ... ok
test (tests.test.DocumentationTestCase) ... **********************************************************************
File "/builddir/build/BUILD/decorator-4.4.0/src/tests/documentation.py", line 531, in tests.documentation
Failed example:
    print(read_data())  # data is not available yet
Exception raised:
    Traceback (most recent call last):
      File "/usr/lib64/python3.9/doctest.py", line 1329, in __run
        exec(compile(example.source, filename, "single",
      File "<doctest tests.documentation[33]>", line 1, in <module>
        print(read_data())  # data is not available yet
      File "</builddir/build/BUILD/decorator-4.4.0/src/decorator.py:decorator-gen-26>", line 2, in read_data
      File "/builddir/build/BUILD/decorator-4.4.0/src/tests/documentation.py", line 1532, in blocking
        elif f.thread.isAlive():
    AttributeError: 'Thread' object has no attribute 'isAlive'
**********************************************************************
File "/builddir/build/BUILD/decorator-4.4.0/src/tests/documentation.py", line 535, in tests.documentation
Failed example:
    print(read_data())  # data is not available yet
Exception raised:
    Traceback (most recent call last):
      File "/usr/lib64/python3.9/doctest.py", line 1329, in __run
        exec(compile(example.source, filename, "single",
      File "<doctest tests.documentation[35]>", line 1, in <module>
        print(read_data())  # data is not available yet
      File "</builddir/build/BUILD/decorator-4.4.0/src/decorator.py:decorator-gen-26>", line 2, in read_data
      File "/builddir/build/BUILD/decorator-4.4.0/src/tests/documentation.py", line 1532, in blocking
        elif f.thread.isAlive():
    AttributeError: 'Thread' object has no attribute 'isAlive'
**********************************************************************
File "/builddir/build/BUILD/decorator-4.4.0/src/tests/documentation.py", line 539, in tests.documentation
Failed example:
    print(read_data())
Exception raised:
    Traceback (most recent call last):
      File "/usr/lib64/python3.9/doctest.py", line 1329, in __run
        exec(compile(example.source, filename, "single",
      File "<doctest tests.documentation[37]>", line 1, in <module>
        print(read_data())
      File "</builddir/build/BUILD/decorator-4.4.0/src/decorator.py:decorator-gen-26>", line 2, in read_data
      File "/builddir/build/BUILD/decorator-4.4.0/src/tests/documentation.py", line 1532, in blocking
        elif f.thread.isAlive():
    AttributeError: 'Thread' object has no attribute 'isAlive'
**********************************************************************
1 items had failures:
   3 of  88 in tests.documentation
***Test Failed*** 3 failures.
FAIL
test_singledispatch1 (tests.test.DocumentationTestCase) ... ok
test_singledispatch2 (tests.test.DocumentationTestCase) ... ok
test_add1 (tests.test.ExtraTestCase) ... ok
test_decorator_factory (tests.test.ExtraTestCase) ... ok
test_no_first_arg (tests.test.ExtraTestCase) ... ok
test_qualname (tests.test.ExtraTestCase) ... ok
test_signature (tests.test.ExtraTestCase) ... ok
test_unique_filenames (tests.test.ExtraTestCase) ... ok
test_gen123 (tests.test.GeneratorCallerTestCase) ... ok
test_c_classes (tests.test.TestSingleDispatch) ... ok
test_mro (tests.test.TestSingleDispatch) ... ok
test_mro_conflicts (tests.test.TestSingleDispatch) ... ok
test_register_abc (tests.test.TestSingleDispatch) ... ok
test_register_decorator (tests.test.TestSingleDispatch) ... ok
test_register_error (tests.test.TestSingleDispatch) ... ok
test_simple_overloads (tests.test.TestSingleDispatch) ... ok
test_wrapping_attributes (tests.test.TestSingleDispatch) ... ok

======================================================================
FAIL: test (tests.test.DocumentationTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/decorator-4.4.0/src/tests/test.py", line 81, in test
    self.assertEqual(err, 0)
AssertionError: 3 != 0

----------------------------------------------------------------------
Ran 20 tests in 5.660s

FAILED (failures=1)
Test failed: <unittest.runner.TextTestResult run=20 errors=0 failures=1>
error: Test failed: <unittest.runner.TextTestResult run=20 errors=0 failures=1>
error: Bad exit status from /var/tmp/rpm-tmp.7lvrnx (%check)


Indeed, isAlive() is deprecated, use is_alive() instead:

$ python3.8 -c 'import threading; t = threading.Thread(); t.isAlive()'
<string>:1: DeprecationWarning: isAlive() is deprecated, use is_alive() instead

$ python3.9 -c 'import threading; t = threading.Thread(); t.isAlive()'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
AttributeError: 'Thread' object has no attribute 'isAlive'


For the build logs, see:
https://copr-be.cloud.fedoraproject.org/results/@python/python3.9/fedora-rawhide-x86_64/01138324-python-decorator/

For all our attempts to build python-decorator with Python 3.9, see:
https://copr.fedorainfracloud.org/coprs/g/python/python3.9/package/python-decorator/

Testing and mass rebuild of packages is happening in copr. You can follow these instructions to test locally in mock if your package builds with Python 3.9:
https://copr.fedorainfracloud.org/coprs/g/python/python3.9/

Let us know here if you have any questions.

Python 3.9 will be included in Fedora 33, but the initial bootstrapping has already started.
A build failure this early in the bootstrap sequence blocks us very much.

Comment 2 Ben Cotton 2020-02-11 17:38:08 UTC
This bug appears to have been reported against 'rawhide' during the Fedora 32 development cycle.
Changing version to 32.

Comment 3 Miro Hrončok 2020-03-05 09:45:48 UTC
That PR was merged 2 months ago.