Skip to content

Commit

Permalink
Merge pull request #7 from AntoineCezar/develop
Browse files Browse the repository at this point in the history
  • Loading branch information
AntoineCezar committed Sep 5, 2016
2 parents 04abc23 + 281949e commit 444c604
Show file tree
Hide file tree
Showing 6 changed files with 49 additions and 23 deletions.
8 changes: 7 additions & 1 deletion HISTORY.rst
Expand Up @@ -3,7 +3,13 @@
History
-------

1.1.0 (2016-09-05)
------------------

* Add the "Not working on Windows operating system" notice
* Rename TimeoutException to TimeoutError

1.0.0 (2016-01-23)
---------------------
------------------

* First release on PyPI.
17 changes: 13 additions & 4 deletions README.rst
Expand Up @@ -18,36 +18,45 @@ Timeoutcontext
A `signal <https://docs.python.org/library/signal.html#>`_ based
timeout context manager and decorator.

Since it is signal based this package can not work under Windows operating
system.

Usage
-----

As a context manager:

.. code:: python
from timeoutcontext import timeout, TimeoutException
import sys
from time import sleep
from timeoutcontext import timeout, TimeoutError
if sys.version_info < (3, 3):
from timeoutcontext._timeout import TimeoutError
try:
with timeout(1):
sleep(2)
except TimeoutException:
except TimeoutError:
print('timeout')
As a decorator:

.. code:: python
from timeoutcontext import timeout, TimeoutException
import sys
from time import sleep
from timeoutcontext import timeout, TimeoutError
if sys.version_info < (3, 3):
from timeoutcontext._timeout import TimeoutError
@timeout(1)
def wait():
sleep(2)
try:
wait()
except TimeoutException:
except TimeoutError:
print('timeout')
License
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Expand Up @@ -24,7 +24,7 @@

setup(
name='timeoutcontext',
version='1.0.0',
version='1.1.0',
description="A signal based timeout context manager",
long_description=readme + '\n\n' + history,
author="Antoine Cezar",
Expand Down
16 changes: 9 additions & 7 deletions tests/test_timeout.py
@@ -1,6 +1,7 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import unittest
import time
from contextlib import contextmanager
Expand All @@ -10,8 +11,9 @@
from timeoutcontext._timeout import (
raise_timeout,
timeout,
TimeoutException,
)
if sys.version_info < (3, 3):
from timeoutcontext._timeout import TimeoutError


class BaseTestCase(unittest.TestCase):
Expand All @@ -27,17 +29,17 @@ def assertNotRaises(self, exc_type):
class TestTimeoutAsAContextManager(BaseTestCase):

def test_it_raise_timeout_exception_when_time_is_out(self):
with self.assertRaises(TimeoutException):
with self.assertRaises(TimeoutError):
with timeout(1):
time.sleep(2)

def test_it_does_not_raise_timeout_exception_when_time_is_not_out(self):
with self.assertNotRaises(TimeoutException):
with self.assertNotRaises(TimeoutError):
with timeout(2):
time.sleep(1)

def test_it_does_not_timeout_when_given_time_is_none(self):
with self.assertNotRaises(TimeoutException):
with self.assertNotRaises(TimeoutError):
with timeout(None):
time.sleep(1)

Expand All @@ -59,7 +61,7 @@ def test_it_does_not_restore_alarm_handler_when_seconds_is_none(self, signal_moc
signal_mock.signal.assert_not_called()

def test_it_does_not_timeout_when_given_time_is_zero(self):
with self.assertNotRaises(TimeoutException):
with self.assertNotRaises(TimeoutError):
with timeout(0):
time.sleep(1)

Expand Down Expand Up @@ -116,13 +118,13 @@ def test_it_raise_timeout_exception_when_time_is_out(self):
def decorated():
time.sleep(2)

with self.assertRaises(TimeoutException):
with self.assertRaises(TimeoutError):
decorated()

def test_it_does_not_raise_timeout_exception_when_time_is_not_out(self):
@timeout(2)
def decorated():
time.sleep(1)

with self.assertNotRaises(TimeoutException):
with self.assertNotRaises(TimeoutError):
decorated()
6 changes: 4 additions & 2 deletions timeoutcontext/__init__.py
@@ -1,13 +1,15 @@
# -*- coding: utf-8 -*-
import sys
import pkg_resources

from ._timeout import timeout
from ._timeout import TimeoutException
if sys.version_info < (3, 3):
from timeoutcontext._timeout import TimeoutError


__version__ = pkg_resources.get_distribution(__package__).version

__all__ = [
'timeout',
'TimeoutException',
'TimeoutError',
]
23 changes: 15 additions & 8 deletions timeoutcontext/_timeout.py
Expand Up @@ -8,42 +8,49 @@
from contextlib import ContextDecorator


class TimeoutException(Exception):
pass
if sys.version_info < (3, 3):
class TimeoutError(Exception):
pass


def raise_timeout(signum, frame):
raise TimeoutException()
raise TimeoutError()


class timeout(ContextDecorator):
"""Raises TimeoutException when the gien time in seconds elapsed.
"""Raises TimeoutError when the gien time in seconds elapsed.
As a context manager:
>>> from timeoutcontext import timeout, TimeoutException
>>> import sys
>>> from time import sleep
>>> from timeoutcontext import timeout
>>> if sys.version_info < (3, 3):
... from timeoutcontext import TimeoutError
>>>
>>> try:
... with timeout(1):
... sleep(2)
... except TimeoutException:
... except TimeoutError:
... print('timeout')
...
timeout
As a decorator:
>>> from timeoutcontext import timeout, TimeoutException
>>> import sys
>>> from time import sleep
>>> from timeoutcontext import timeout
>>> if sys.version_info < (3, 3):
... from timeoutcontext import TimeoutError
>>>
>>> @timeout(1)
... def wait():
... sleep(2)
...
>>> try:
... wait()
... except TimeoutException:
... except TimeoutError:
... print('timeout')
...
timeout
Expand Down

0 comments on commit 444c604

Please sign in to comment.