diff options
author | Patrick N <pnpnpn@users.noreply.github.com> | 2020-11-14 19:50:55 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-14 19:50:55 -0500 |
commit | 9fbc3ef5b6f8f8cba2eb7ba795813d6ec543e265 (patch) | |
tree | d8cfd4a4c4da8d083162cbb46a887607fe3adc57 | |
parent | 3c4bad7f66e1109ccdcb79c2cb62cd669b7666d8 (diff) | |
download | timeout-decorator-9fbc3ef5b6f8f8cba2eb7ba795813d6ec543e265.tar.gz |
Roidelapluie functionkwargs (#65)upstream-master
* Allow to use timeout in function kwargs even when initial seconds is None
Initial support for timeout in function kwargs was implemented by 187ee34d9e0a571bcc7f9233208462634940f4c0
* drop support for 2.6, 3.4, 3.5 and add support for 3.7, 3.8, 3.9
* drop support for 2.6, 3.4, 3.5 and add support for 3.7, 3.8, 3.9
* WIP trying to fix bild
* WIP trying to fix bild
* fix build
* bump version to 0.5.0
* bump version to 0.5.0
Co-authored-by: Julien Pivotto <roidelapluie@inuits.eu>
Co-authored-by: Patrick N <patricng>
-rw-r--r-- | .travis.yml | 5 | ||||
-rw-r--r-- | setup.py | 2 | ||||
-rw-r--r-- | tests/test_timeout_decorator.py | 8 | ||||
-rw-r--r-- | timeout_decorator/__init__.py | 2 | ||||
-rw-r--r-- | timeout_decorator/timeout_decorator.py | 12 | ||||
-rw-r--r-- | tox.ini | 11 |
6 files changed, 24 insertions, 16 deletions
diff --git a/.travis.yml b/.travis.yml index fc069f6..02adf35 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,11 +1,10 @@ language: python sudo: false python: -- '2.6' - '2.7' -- '3.4' -- '3.5' - '3.6' +- '3.7' +- '3.8' install: - pip install python-coveralls tox tox-travis script: tox --recreate @@ -27,7 +27,7 @@ long_description = ( setup( name='timeout-decorator', - version='0.4.1', + version='0.5.0', description='Timeout decorator', long_description=long_description, author='Patrick Ng', diff --git a/tests/test_timeout_decorator.py b/tests/test_timeout_decorator.py index fad4d81..2c2d9c7 100644 --- a/tests/test_timeout_decorator.py +++ b/tests/test_timeout_decorator.py @@ -45,6 +45,14 @@ def test_timeout_alternate_exception(use_signals): f(timeout=1) +def test_timeout_kwargs_with_initial_timeout_none(use_signals): + @timeout(use_signals=use_signals) + def f(): + time.sleep(2) + with pytest.raises(TimeoutError): + f(timeout=1) + + def test_timeout_no_seconds(use_signals): @timeout(use_signals=use_signals) def f(): diff --git a/timeout_decorator/__init__.py b/timeout_decorator/__init__.py index 8c89b0d..4c8254b 100644 --- a/timeout_decorator/__init__.py +++ b/timeout_decorator/__init__.py @@ -4,4 +4,4 @@ from .timeout_decorator import timeout from .timeout_decorator import TimeoutError __title__ = 'timeout_decorator' -__version__ = '0.4.1' +__version__ = '0.5.0' diff --git a/timeout_decorator/timeout_decorator.py b/timeout_decorator/timeout_decorator.py index 2b3121d..42b6686 100644 --- a/timeout_decorator/timeout_decorator.py +++ b/timeout_decorator/timeout_decorator.py @@ -64,9 +64,6 @@ def timeout(seconds=None, use_signals=True, timeout_exception=TimeoutError, exce """ def decorate(function): - if not seconds: - return function - if use_signals: def handler(signum, frame): _raise_exception(timeout_exception, exception_message) @@ -77,6 +74,10 @@ def timeout(seconds=None, use_signals=True, timeout_exception=TimeoutError, exce if new_seconds: old = signal.signal(signal.SIGALRM, handler) signal.setitimer(signal.ITIMER_REAL, new_seconds) + + if not seconds: + return function(*args, **kwargs) + try: return function(*args, **kwargs) finally: @@ -144,7 +145,8 @@ class _Timeout(object): kwargs=kwargs) self.__process.daemon = True self.__process.start() - self.__timeout = self.__limit + time.time() + if self.__limit is not None: + self.__timeout = self.__limit + time.time() while not self.ready: time.sleep(0.01) return self.value @@ -159,7 +161,7 @@ class _Timeout(object): @property def ready(self): """Read-only property indicating status of "value" property.""" - if self.__timeout < time.time(): + if self.__limit and self.__timeout < time.time(): self.cancel() return self.__queue.full() and not self.__queue.empty() @@ -1,17 +1,16 @@ [tox] distshare={homedir}/.tox/distshare -envlist=py{26,27,34,35,36} +envlist=py{27,36,37,38} skip_missing_interpreters=true indexserver= pypi = https://pypi.python.org/simple [testenv] commands= - py.test timeout_decorator tests --pep8 -deps = - py32: pytest<3.0 - py{26,27,34,35,36}: pytest>=3.0 - pytest-pep8==1.0.6 + py.test timeout_decorator tests +deps = + pytest + pytest-pep8 [pytest] addopts = -vvl |