aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick N <pnpnpn@users.noreply.github.com>2020-11-14 19:50:55 -0500
committerGitHub <noreply@github.com>2020-11-14 19:50:55 -0500
commit9fbc3ef5b6f8f8cba2eb7ba795813d6ec543e265 (patch)
treed8cfd4a4c4da8d083162cbb46a887607fe3adc57
parent3c4bad7f66e1109ccdcb79c2cb62cd669b7666d8 (diff)
downloadtimeout-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.yml5
-rw-r--r--setup.py2
-rw-r--r--tests/test_timeout_decorator.py8
-rw-r--r--timeout_decorator/__init__.py2
-rw-r--r--timeout_decorator/timeout_decorator.py12
-rw-r--r--tox.ini11
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
diff --git a/setup.py b/setup.py
index 3d6fbb7..32771a8 100644
--- a/setup.py
+++ b/setup.py
@@ -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()
diff --git a/tox.ini b/tox.ini
index d66c3f5..232b10b 100644
--- a/tox.ini
+++ b/tox.ini
@@ -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