Skip to content

Commit 4cf894b

Browse files
committed
Mark fail() as NoReturn
2 parents b84327f + 44ea7c0 commit 4cf894b

File tree

6 files changed

+77
-52
lines changed

6 files changed

+77
-52
lines changed

NEWS.rst

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,32 @@
1-
News in asserts 0.8.2
1+
News in asserts 0.8.4
22
=====================
33

44
Improvements
55
------------
66

77
* `fail()` is now marked with `NoReturn` in type stub.
88

9+
Bug Fixes
10+
---------
11+
12+
* Improve type annotations for Python 2.
13+
14+
News in asserts 0.8.3
15+
=====================
16+
17+
Bug Fixes
18+
---------
19+
20+
* Fix type signature of `AssertRaisesContext.__exit__()`.
21+
22+
News in asserts 0.8.2
23+
=====================
24+
25+
Improvements
26+
------------
27+
28+
* Add a py.typed file to signal that this package supports type hints.
29+
930
News in asserts 0.8.1
1031
=====================
1132

asserts/__init__.pyi

Lines changed: 50 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,70 @@
11
import datetime
22

3+
from types import TracebackType
34
from typing import \
45
Any, Container, Type, Callable, Tuple, Union, ContextManager, \
5-
Pattern, Optional, Iterable, NoReturn
6+
Pattern, Optional, Iterable, Text, NoReturn
67

78
class AssertRaisesContext:
8-
exception = ... # type: Type[BaseException]
9-
msg_fmt = ... # type: str
10-
def __init__(self, exception: Type[BaseException], msg_fmt: str = ...) -> None: ...
9+
exception: Type[BaseException]
10+
msg_fmt: Text
11+
def __init__(self, exception: Type[BaseException], msg_fmt: Text = ...) -> None: ...
1112
def __enter__(self) -> AssertRaisesContext: ...
12-
def __exit__(self, exc_type: Type[BaseException], exc_val: BaseException, exc_tb: Any) -> None: ...
13-
def format_message(self, default_msg: str) -> str: ...
13+
def __exit__(self, exc_type: Optional[Type[BaseException]],
14+
exc_val: Optional[BaseException],
15+
exc_tb: Optional[TracebackType]) -> Optional[bool]: ...
16+
def format_message(self, default_msg: Text) -> Text: ...
1417
def add_test(self, cb: Callable[[BaseException], None]) -> None: ...
1518

1619
class AssertRaisesErrnoContext(AssertRaisesContext):
17-
expected_errno = ... # type: int
18-
def __init__(self, exception: Type[BaseException], expected_errno: int, msg_fmt: str = ...) -> None: ...
20+
expected_errno: int
21+
def __init__(self, exception: Type[BaseException], expected_errno: int, msg_fmt: Text = ...) -> None: ...
1922

2023
class AssertRaisesRegexContext(AssertRaisesContext):
21-
pattern = ... # type: str
22-
def __init__(self, exception: Type[BaseException], pattern: str, msg_fmt: str = ...) -> None: ...
24+
pattern: Text
25+
def __init__(self, exception: Type[BaseException], pattern: Text, msg_fmt: Text = ...) -> None: ...
2326

2427
class AssertWarnsContext:
25-
def __init__(self, warning_class: Type[Warning], msg_fmt: str = ...) -> None: ...
28+
def __init__(self, warning_class: Type[Warning], msg_fmt: Text = ...) -> None: ...
2629
def __enter__(self) -> None: ...
2730
def __exit__(self, exc_type: Type[BaseException], exc_val: BaseException, exc_tb: Any) -> None: ...
28-
def format_message(self) -> str: ...
31+
def format_message(self) -> Text: ...
2932
def add_test(self, cb: Callable[[Warning], None]) -> None: ...
3033

3134
class AssertWarnsRegexContext(AssertWarnsContext):
32-
pattern = ... # type: str
33-
def __init__(self, warning_class: Type[Warning], msg_fmt: str = ...) -> None: ...
35+
pattern: Text
36+
def __init__(self, warning_class: Type[Warning], msg_fmt: Text = ...) -> None: ...
3437

35-
def fail(msg: str = ...) -> NoReturn: ...
36-
def assert_true(expr: Any, msg_fmt: str = ...) -> None: ...
37-
def assert_false(expr: Any, msg_fmt: str = ...) -> None: ...
38-
def assert_boolean_true(expr: Any, msg_fmt: str = ...) -> None: ...
39-
def assert_boolean_false(expr: Any, msg_fmt: str = ...) -> None: ...
40-
def assert_is_none(expr: Any, msg_fmt: str = ...) -> None: ...
41-
def assert_is_not_none(expr: Any, msg_fmt: str = ...) -> None: ...
42-
def assert_equal(first: Any, second: Any, msg_fmt: str = ...) -> None: ...
43-
def assert_not_equal(first: Any, second: Any, msg_fmt: str = ...) -> None: ...
44-
def assert_almost_equal(first: float, second: float, msg_fmt: str = ..., places: int = ..., delta: float = ...) -> None: ...
45-
def assert_not_almost_equal(first: float, second: float, msg_fmt: str = ..., places: int = ..., delta: float = ...) -> None: ...
46-
def assert_less(first: Any, second: Any, msg_fmt: str = ...) -> None: ...
47-
def assert_less_equal(first: Any, second: Any, msg_fmt: str = ...) -> None: ...
48-
def assert_greater(first: Any, second: Any, msg_fmt: str = ...) -> None: ...
49-
def assert_greater_equal(first: Any, second: Any, msg_fmt: str = ...) -> None: ...
50-
def assert_regex(text: str, regex: Union[str, Pattern[str]], msg_fmt: str = ...) -> None: ...
51-
def assert_is(first: Any, second: Any, msg_fmt: str = ...) -> None: ...
52-
def assert_is_not(first: Any, second: Any, msg_fmt: str = ...) -> None: ...
53-
def assert_in(first: Any, second: Container[Any], msg_fmt: str = ...) -> None: ...
54-
def assert_not_in(first: Any, second: Container[Any], msg_fmt: str = ...) -> None: ...
55-
def assert_between(lower_bound: Any, upper_bound: Any, expr: Any, msg_fmt: str = ...) -> None: ...
56-
def assert_is_instance(obj: Any, cls: Union[type, Tuple[type, ...]], msg_fmt: str = ...) -> None: ...
57-
def assert_not_is_instance(obj: Any, cls: Union[type, Tuple[type, ...]], msg_fmt: str = ...) -> None: ...
58-
def assert_count_equal(sequence1: Iterable[Any], sequence2: Iterable[Any], msg_fmt: str = ...) -> None: ...
59-
def assert_has_attr(obj: Any, attribute: str, msg_fmt: str = ...) -> None: ...
60-
def assert_datetime_about_now(actual: Optional[datetime.datetime], msg_fmt: str = ...) -> None: ...
61-
def assert_datetime_about_now_utc(actual: Optional[datetime.datetime], msg_fmt: str = ...) -> None: ...
62-
def assert_raises(exception: Type[BaseException], msg_fmt: str = ...) -> AssertRaisesContext: ...
63-
def assert_raises_regex(exception: Type[BaseException], regex: Union[str, Pattern[str]], msg_fmt: str = ...) -> AssertRaisesContext: ...
64-
def assert_raises_errno(exception: Type[BaseException], errno: int, msg_fmt: str = ...) -> AssertRaisesContext: ...
65-
def assert_succeeds(exception: Type[BaseException], msg_fmt: str = ...) -> ContextManager: ...
66-
def assert_warns(warning_type: Type[Warning], msg_fmt: str = ...) -> AssertWarnsContext: ...
67-
def assert_warns_regex(warning_type: Type[Warning], regex: str, msg_fmt: str = ...) -> AssertWarnsContext: ...
38+
def fail(msg: Text = ...) -> NoReturn: ...
39+
def assert_true(expr: Any, msg_fmt: Text = ...) -> None: ...
40+
def assert_false(expr: Any, msg_fmt: Text = ...) -> None: ...
41+
def assert_boolean_true(expr: Any, msg_fmt: Text = ...) -> None: ...
42+
def assert_boolean_false(expr: Any, msg_fmt: Text = ...) -> None: ...
43+
def assert_is_none(expr: Any, msg_fmt: Text = ...) -> None: ...
44+
def assert_is_not_none(expr: Any, msg_fmt: Text = ...) -> None: ...
45+
def assert_equal(first: Any, second: Any, msg_fmt: Text = ...) -> None: ...
46+
def assert_not_equal(first: Any, second: Any, msg_fmt: Text = ...) -> None: ...
47+
def assert_almost_equal(first: float, second: float, msg_fmt: Text = ..., places: int = ..., delta: float = ...) -> None: ...
48+
def assert_not_almost_equal(first: float, second: float, msg_fmt: Text = ..., places: int = ..., delta: float = ...) -> None: ...
49+
def assert_less(first: Any, second: Any, msg_fmt: Text = ...) -> None: ...
50+
def assert_less_equal(first: Any, second: Any, msg_fmt: Text = ...) -> None: ...
51+
def assert_greater(first: Any, second: Any, msg_fmt: Text = ...) -> None: ...
52+
def assert_greater_equal(first: Any, second: Any, msg_fmt: Text = ...) -> None: ...
53+
def assert_regex(text: Text, regex: Union[Text, Pattern[Text]], msg_fmt: Text = ...) -> None: ...
54+
def assert_is(first: Any, second: Any, msg_fmt: Text = ...) -> None: ...
55+
def assert_is_not(first: Any, second: Any, msg_fmt: Text = ...) -> None: ...
56+
def assert_in(first: Any, second: Container[Any], msg_fmt: Text = ...) -> None: ...
57+
def assert_not_in(first: Any, second: Container[Any], msg_fmt: Text = ...) -> None: ...
58+
def assert_between(lower_bound: Any, upper_bound: Any, expr: Any, msg_fmt: Text = ...) -> None: ...
59+
def assert_is_instance(obj: Any, cls: Union[type, Tuple[type, ...]], msg_fmt: Text = ...) -> None: ...
60+
def assert_not_is_instance(obj: Any, cls: Union[type, Tuple[type, ...]], msg_fmt: Text = ...) -> None: ...
61+
def assert_count_equal(sequence1: Iterable[Any], sequence2: Iterable[Any], msg_fmt: Text = ...) -> None: ...
62+
def assert_has_attr(obj: Any, attribute: str, msg_fmt: Text = ...) -> None: ...
63+
def assert_datetime_about_now(actual: Optional[datetime.datetime], msg_fmt: Text = ...) -> None: ...
64+
def assert_datetime_about_now_utc(actual: Optional[datetime.datetime], msg_fmt: Text = ...) -> None: ...
65+
def assert_raises(exception: Type[BaseException], msg_fmt: Text = ...) -> AssertRaisesContext: ...
66+
def assert_raises_regex(exception: Type[BaseException], regex: Union[Text, Pattern[Text]], msg_fmt: Text = ...) -> AssertRaisesContext: ...
67+
def assert_raises_errno(exception: Type[BaseException], errno: int, msg_fmt: Text = ...) -> AssertRaisesContext: ...
68+
def assert_succeeds(exception: Type[BaseException], msg_fmt: Text = ...) -> ContextManager: ...
69+
def assert_warns(warning_type: Type[Warning], msg_fmt: Text = ...) -> AssertWarnsContext: ...
70+
def assert_warns_regex(warning_type: Type[Warning], regex: Text, msg_fmt: Text = ...) -> AssertWarnsContext: ...

asserts/py.typed

Whitespace-only changes.

mypy.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ warn_redundant_casts = True
55
warn_return_any = True
66
warn_unused_ignores = True
77
warn_unused_configs = True
8+
no_implicit_optional = True
89
strict_optional = True

requirements.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
mypy==0.550
2-
wheel==0.30.0
1+
mypy==0.600
2+
wheel==0.31.1

setup.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ def read(fname):
1010

1111
setup(
1212
name="asserts",
13-
version="0.8.2",
13+
version="0.8.4",
1414
description="Stand-alone Assertions",
1515
long_description=read("README.rst"),
1616
author="Sebastian Rittau",
1717
author_email="srittau@rittau.biz",
1818
url="https://github.com/srittau/python-asserts",
1919
packages=["asserts"],
20-
package_data={"asserts": ["*.pyi"]},
20+
package_data={"asserts": ["py.typed", "*.pyi"]},
2121
python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*",
2222
license="MIT",
2323
classifiers=[

0 commit comments

Comments
 (0)