Compare commits

...

3 Commits

Author SHA1 Message Date
Tim Savannah
d94e37bb40 Add .gitignore to ignore the auto-downloaded GoodTests.py if runTests.py is used 2023-04-23 04:30:07 -04:00
Tim Savannah
178da73d27 Update copyright years, version number for 4.4.0.
Update compatible python versions all the way up to 3.9
2023-04-23 04:27:55 -04:00
Tim Savannah
cc4c55839d Support nested StoppableThreads properly raising exception to correct context 2023-04-23 04:15:28 -04:00
5 changed files with 21 additions and 7 deletions

View File

@ -1,5 +1,5 @@
'''
Copyright (c) 2016, 2017, 2019 Timothy Savannah All Rights Reserved.
Copyright (c) 2016, 2017, 2019, 2023 Timothy Savannah All Rights Reserved.
Licensed under the Lesser GNU Public License Version 3, LGPLv3. You should have recieved a copy of this with the source distribution as
LICENSE, otherwise it is available at https://github.com/kata198/func_timeout/LICENSE
@ -32,6 +32,7 @@ class StoppableThread(threading.Thread):
The exception is raised over and over, with a specifed delay (default 2.0 seconds)
'''
isNestedStoppableThread = None
def _stopThread(self, exception, raiseEvery=2.0):
@ -41,6 +42,12 @@ class StoppableThread(threading.Thread):
if self.is_alive() is False:
return True
currentThread = threading.current_thread()
if issubclass(currentThread.__class__, StoppableThread):
currentThread.isNestedStoppableThread = True
else:
currentThread.isNestedStoppableThread = False
self._stderr = open(os.devnull, 'w')
# Create "joining" thread which will raise the provided exception

View File

@ -1,13 +1,13 @@
'''
Copyright (c) 2016, 2017, 2019 Tim Savannah All Rights Reserved.
Copyright (c) 2016, 2017, 2019, 2023 Tim Savannah All Rights Reserved.
Licensed under the Lesser GNU Public License Version 3, LGPLv3. You should have recieved a copy of this with the source distribution as
LICENSE, otherwise it is available at https://github.com/kata198/func_timeout/LICENSE
'''
__version__ = '4.3.5'
__version_tuple__ = (4, 3, 5)
__version__ = '4.4.0'
__version_tuple__ = (4, 4, 0)
__all__ = ('func_timeout', 'func_set_timeout', 'FunctionTimedOut', 'StoppableThread')

View File

@ -2,7 +2,7 @@
# vim: set ts=4 sw=4 expandtab :
'''
Copyright (c) 2016, 2017 Tim Savannah All Rights Reserved.
Copyright (c) 2016, 2017, 2023 Tim Savannah All Rights Reserved.
Licensed under the Lesser GNU Public License Version 3, LGPLv3. You should have recieved a copy of this with the source distribution as
LICENSE, otherwise it is available at https://github.com/kata198/func_timeout/LICENSE
@ -68,6 +68,9 @@ def func_timeout(timeout, func, args=(), kwargs=None):
ret.append( func(*args2, **kwargs2) )
except FunctionTimedOut:
# Don't print traceback to stderr if we time out
currentThread = threading.current_thread()
if getattr(currentThread, 'isNestedStoppableThread', False) is True:
raise
pass
except Exception as e:
exc_info = sys.exc_info()

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python
'''
Copyright (c) 2016, 2017 Tim Savannah All Rights Reserved.
Copyright (c) 2016, 2017, 2023 Tim Savannah All Rights Reserved.
This software is licensed under the terms of the Lesser GNU General Public License Version 2.1 (LGPLv2.1)
You should have received a copy of this with the source distribution as LICENSE,
@ -30,7 +30,7 @@ if __name__ == '__main__':
log_description = summary
setup(name='func_timeout',
version='4.3.5',
version='4.4.0',
packages=['func_timeout'],
author='Tim Savannah',
author_email='kata198@gmail.com',
@ -50,6 +50,8 @@ if __name__ == '__main__':
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Topic :: Software Development :: Libraries :: Python Modules'
]
)

2
tests/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*.pyc
GoodTests.py