Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add type hints to twisted.internet.defer #1448

Merged
merged 62 commits into from
Mar 17, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
2543e2f
Add type hints to twisted.internet.defer
wsanchez Oct 13, 2020
459dab1
Merge branch 'trunk' into mypy-defer
wsanchez Oct 14, 2020
4f8de7b
Add news fragment
wsanchez Oct 14, 2020
5187271
Use a globally unique string instead of "self"
wsanchez Oct 15, 2020
68fec71
black
wsanchez Oct 15, 2020
2d711b5
Remove ignore[union-attr] cases.
wsanchez Oct 15, 2020
3590838
Use an Enum for _NO_RESULT and _CONTINUE.
wsanchez Oct 15, 2020
c45bfab
__iter__ -> _DeferredT
wsanchez Oct 15, 2020
ff8a733
Unused
wsanchez Oct 15, 2020
6e768da
Use typing_extensions to get Literal
wsanchez Oct 15, 2020
f00d3ab
Py35 doesn't have auto()
wsanchez Oct 16, 2020
d65adb9
Note that posargs-only would help here.
wsanchez Oct 16, 2020
d96d35e
Better type for passthru
wsanchez Oct 16, 2020
2eb7013
Don't use _DeferredT so much
wsanchez Oct 17, 2020
a86a7ed
ixnay on the erredT_Day
wsanchez Oct 17, 2020
b7be847
Apply fresh paint
wsanchez Oct 18, 2020
11ba8cc
Make Deferred generic
wsanchez Oct 18, 2020
cc8827c
Add news fragment
wsanchez Oct 18, 2020
87bbae4
Get mypy to stop complaining
wsanchez Oct 18, 2020
8c6eaaa
Merge branch 'trunk' into 10017-mypy-defer
wsanchez Oct 19, 2020
f8494e2
Merge branch 'trunk' into 9816-generic-deferred
wsanchez Oct 19, 2020
ac5e55a
Merge branch 'trunk' into 10017-mypy-defer
wsanchez Oct 22, 2020
37b54eb
Merge branch '10017-mypy-defer' into 9816-generic-deferred
wsanchez Oct 22, 2020
78cfabe
Not sure why this crept in
wsanchez Oct 22, 2020
d5b1500
Merge branch '10017-mypy-defer' into 9816-generic-deferred
wsanchez Oct 22, 2020
bc98365
Merge branch 'trunk' into 10017-mypy-defer
wsanchez Oct 26, 2020
cfb4d8f
Merge branch 'trunk' into 9816-generic-deferred
wsanchez Oct 26, 2020
a8437fc
Merge branch '9816-generic-deferred' into 10017-mypy-defer
wsanchez Oct 26, 2020
f7c5452
Merge branch 'trunk' into 10017-mypy-defer
wsanchez Nov 2, 2020
41a2aaa
Parametrize use of Deferred.
wsanchez Nov 2, 2020
c0154ae
Can't parametrize Future
wsanchez Nov 2, 2020
ebcf51f
Parametrize Deferred.
wsanchez Nov 3, 2020
ffbf244
Add unused warnings for future work
wsanchez Nov 3, 2020
95c0c4e
open return an IO
wsanchez Nov 3, 2020
efc3b96
NotImplemented is an Any
wsanchez Nov 3, 2020
3c8fee1
Merge branch 'trunk' into 10017-mypy-defer
wsanchez Nov 3, 2020
cfbb5c1
- ➜ _
wsanchez Nov 3, 2020
99e08e3
Merge branch 'trunk' into 10017-mypy-defer
wsanchez Jan 28, 2021
4572157
Match @param name to argument name
wsanchez Feb 10, 2021
dc52b79
Mypy doesn't need this ignore any more
wsanchez Feb 10, 2021
c093e0d
Merge branch 'trunk' into 10017-mypy-defer
wsanchez Feb 11, 2021
f527039
Fix rtype
wsanchez Feb 11, 2021
1c415f9
Change less stuff by using nonlocal.
wsanchez Feb 11, 2021
9f6d028
type fail() as returning Deferred[Any]
wsanchez Feb 11, 2021
f35df20
Cache _NO_RESULT and _CONTINUE
wsanchez Feb 12, 2021
069fee0
Incorporate suggestions from glyph in 10017-mypy-defer-suggestion
wsanchez Feb 12, 2021
f025638
errback argument to addErrback is not optional
wsanchez Feb 12, 2021
fa23fac
Make docs generator happy
wsanchez Feb 12, 2021
e2c2fd7
Try to appease Py3.5
wsanchez Feb 12, 2021
1b35b6c
Reduce diff
wsanchez Feb 15, 2021
aa46f26
Add tests for None errback and for None args/kwargs to callbacks and …
wsanchez Feb 15, 2021
8f8417b
Merge branch 'trunk' into 10017-mypy-defer
wsanchez Feb 23, 2021
46b4f5f
Deal with added optional case
wsanchez Feb 23, 2021
c6d6c3d
Merge branch 'trunk' into 10017-mypy-defer
wsanchez Mar 8, 2021
bd76034
_cancellableInlineCallbacks, ensureDeferred, fromCoroutine take Defer…
wsanchez Mar 9, 2021
ee9dc9c
Merge branch 'trunk' into 10017-mypy-defer
wsanchez Mar 16, 2021
c0bc8b0
Revert changes that make the onTimeoutCancel argument to addTimeOut()…
wsanchez Mar 16, 2021
65a58f6
loop.create_future has been available since Python 3.5.2
wsanchez Mar 16, 2021
dba871f
Make DeferredQueue generic
wsanchez Mar 16, 2021
57e27e1
More conventional names
wsanchez Mar 16, 2021
5ebedf0
Exclude `if TYPE_CHECKING` sections and `...` from coverage complaints.
wsanchez Mar 16, 2021
2039f33
Link to typeshed issue
wsanchez Mar 16, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,6 @@ source=
[report]
precision = 2
ignore_errors = True
exclude_lines =
if TYPE_CHECKING
\s*\.\.\.$
18 changes: 13 additions & 5 deletions mypy.ini
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[mypy]

namespace_packages=True
namespace_packages = True
plugins=mypy_zope:plugin

ignore_missing_imports = True
Expand All @@ -20,6 +20,18 @@ warn_return_any = True
warn_unreachable = True
warn_unused_ignores = True

# These are too strict for us at the moment
wsanchez marked this conversation as resolved.
Show resolved Hide resolved

disallow_any_decorated = False
disallow_any_explicit = False
disallow_any_expr = False
disallow_any_generics = False
disallow_any_unimported = False
disallow_subclassing_any = False
disallow_untyped_calls = False
disallow_untyped_decorators = False
strict_equality = False

# Disable some checks until the effected modules fully adopt mypy

[mypy-twisted._threads.*]
Expand Down Expand Up @@ -149,10 +161,6 @@ check_untyped_defs = False
allow_untyped_defs = True
check_untyped_defs = False

[mypy-twisted.internet.defer]
allow_untyped_defs = True
check_untyped_defs = False

[mypy-twisted.internet.endpoints]
allow_untyped_defs = True
check_untyped_defs = False
Expand Down
1 change: 1 addition & 0 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ install_requires =
Automat >= 0.8.0
hyperlink >= 17.1.1
attrs >= 19.2.0
typing_extensions >= 3.6.5
twisted-iocpsupport ~= 1.0.0; platform_system == "Windows"
include_package_data = True
zip_safe = False
Expand Down
2 changes: 1 addition & 1 deletion src/twisted/application/twist/test/test_options.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ def patchOpen(self) -> None:
"""
self.opened: List[Tuple[str, Optional[str]]] = []

def fakeOpen(name: str, mode: Optional[str] = None) -> object:
def fakeOpen(name: str, mode: Optional[str] = None) -> TextIO:
if name == "nocanopen":
raise OSError(None, None, name)

Expand Down
20 changes: 12 additions & 8 deletions src/twisted/internet/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -292,19 +292,21 @@ class ThreadedResolver:

def __init__(self, reactor: "ReactorBase") -> None:
self.reactor = reactor
self._runningQueries: Dict[Deferred, Tuple[Deferred, IDelayedCall]] = {}
self._runningQueries: Dict[
Deferred[str], Tuple[Deferred[str], IDelayedCall]
] = {}

def _fail(self, name: str, err: str) -> Failure:
lookupError = error.DNSLookupError(f"address {name!r} not found: {err}")
return Failure(lookupError)

def _cleanup(self, name: str, lookupDeferred: Deferred) -> None:
def _cleanup(self, name: str, lookupDeferred: Deferred[str]) -> None:
userDeferred, cancelCall = self._runningQueries[lookupDeferred]
del self._runningQueries[lookupDeferred]
userDeferred.errback(self._fail(name, "timeout error"))

def _checkTimeout(
self, result: object, name: str, lookupDeferred: Deferred
self, result: str, name: str, lookupDeferred: Deferred[str]
) -> None:
try:
userDeferred, cancelCall = self._runningQueries[lookupDeferred]
Expand All @@ -321,7 +323,7 @@ def _checkTimeout(

def getHostByName(
self, name: str, timeout: Sequence[int] = (1, 3, 11, 45)
) -> Deferred:
) -> Deferred[str]:
"""
See L{twisted.internet.interfaces.IResolverSimple.getHostByName}.

Expand All @@ -333,7 +335,7 @@ def getHostByName(
timeoutDelay = sum(timeout)
else:
timeoutDelay = 60
userDeferred = defer.Deferred()
userDeferred = defer.Deferred() # type: Deferred[str]
lookupDeferred = threads.deferToThreadPool(
self.reactor,
cast(IReactorThreads, self.reactor).getThreadPool(),
Expand All @@ -352,7 +354,7 @@ def getHostByName(
class BlockingResolver:
def getHostByName(
self, name: str, timeout: Sequence[int] = (1, 3, 11, 45)
) -> Deferred:
) -> Deferred[str]:
try:
address = socket.gethostbyname(name)
except OSError:
Expand Down Expand Up @@ -487,7 +489,7 @@ def fireEvent(self) -> None:
"""
self.state = "BEFORE"
self.finishedBefore = []
beforeResults: List[object] = []
beforeResults: List[Deferred[object]] = []
while self.before:
callable, args, kwargs = self.before.pop(0)
self.finishedBefore.append((callable, args, kwargs))
Expand Down Expand Up @@ -691,7 +693,9 @@ def getWriters(self) -> List[IWriteDescriptor]:
)

# IReactorCore
def resolve(self, name: str, timeout: Sequence[int] = (1, 3, 11, 45)) -> Deferred:
def resolve(
self, name: str, timeout: Sequence[int] = (1, 3, 11, 45)
) -> Deferred[str]:
"""
Return a Deferred that will resolve a hostname."""
if not name:
Expand Down
Loading