Upgrade mypy to version 0.931 (#12030)

Upgrade mypy to 0.931, mypy-zope to 0.3.5 and fix new complaints.
This commit is contained in:
Sean Quah 2022-02-18 15:57:26 +00:00 committed by GitHub
parent eb609c65d0
commit e6acd3cf4f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 33 additions and 19 deletions

1
changelog.d/12030.misc Normal file
View file

@ -0,0 +1 @@
Upgrade mypy to version 0.931.

View file

@ -103,8 +103,8 @@ CONDITIONAL_REQUIREMENTS["lint"] = [
] ]
CONDITIONAL_REQUIREMENTS["mypy"] = [ CONDITIONAL_REQUIREMENTS["mypy"] = [
"mypy==0.910", "mypy==0.931",
"mypy-zope==0.3.2", "mypy-zope==0.3.5",
"types-bleach>=4.1.0", "types-bleach>=4.1.0",
"types-jsonschema>=3.2.0", "types-jsonschema>=3.2.0",
"types-opentracing>=2.4.2", "types-opentracing>=2.4.2",

View file

@ -66,13 +66,18 @@ class SortedDict(Dict[_KT, _VT]):
def __copy__(self: _SD) -> _SD: ... def __copy__(self: _SD) -> _SD: ...
@classmethod @classmethod
@overload @overload
def fromkeys(cls, seq: Iterable[_T_h]) -> SortedDict[_T_h, None]: ... def fromkeys(
cls, seq: Iterable[_T_h], value: None = ...
) -> SortedDict[_T_h, None]: ...
@classmethod @classmethod
@overload @overload
def fromkeys(cls, seq: Iterable[_T_h], value: _S) -> SortedDict[_T_h, _S]: ... def fromkeys(cls, seq: Iterable[_T_h], value: _S) -> SortedDict[_T_h, _S]: ...
def keys(self) -> SortedKeysView[_KT]: ... # As of Python 3.10, `dict_{keys,items,values}` have an extra `mapping` attribute and so
def items(self) -> SortedItemsView[_KT, _VT]: ... # `Sorted{Keys,Items,Values}View` are no longer compatible with them.
def values(self) -> SortedValuesView[_VT]: ... # See https://github.com/python/typeshed/issues/6837
def keys(self) -> SortedKeysView[_KT]: ... # type: ignore[override]
def items(self) -> SortedItemsView[_KT, _VT]: ... # type: ignore[override]
def values(self) -> SortedValuesView[_VT]: ... # type: ignore[override]
@overload @overload
def pop(self, key: _KT) -> _VT: ... def pop(self, key: _KT) -> _VT: ...
@overload @overload

View file

@ -654,7 +654,7 @@ class SearchHandler:
self.storage, user.to_string(), res.events_after self.storage, user.to_string(), res.events_after
) )
context = { context: JsonDict = {
"events_before": events_before, "events_before": events_before,
"events_after": events_after, "events_after": events_after,
"start": await now_token.copy_and_replace( "start": await now_token.copy_and_replace(

View file

@ -130,7 +130,9 @@ def make_base_prepend_rules(
return rules return rules
BASE_APPEND_CONTENT_RULES = [ # We have to annotate these types, otherwise mypy infers them as
# `List[Dict[str, Sequence[Collection[str]]]]`.
BASE_APPEND_CONTENT_RULES: List[Dict[str, Any]] = [
{ {
"rule_id": "global/content/.m.rule.contains_user_name", "rule_id": "global/content/.m.rule.contains_user_name",
"conditions": [ "conditions": [
@ -149,7 +151,7 @@ BASE_APPEND_CONTENT_RULES = [
] ]
BASE_PREPEND_OVERRIDE_RULES = [ BASE_PREPEND_OVERRIDE_RULES: List[Dict[str, Any]] = [
{ {
"rule_id": "global/override/.m.rule.master", "rule_id": "global/override/.m.rule.master",
"enabled": False, "enabled": False,
@ -159,7 +161,7 @@ BASE_PREPEND_OVERRIDE_RULES = [
] ]
BASE_APPEND_OVERRIDE_RULES = [ BASE_APPEND_OVERRIDE_RULES: List[Dict[str, Any]] = [
{ {
"rule_id": "global/override/.m.rule.suppress_notices", "rule_id": "global/override/.m.rule.suppress_notices",
"conditions": [ "conditions": [
@ -278,7 +280,7 @@ BASE_APPEND_OVERRIDE_RULES = [
] ]
BASE_APPEND_UNDERRIDE_RULES = [ BASE_APPEND_UNDERRIDE_RULES: List[Dict[str, Any]] = [
{ {
"rule_id": "global/underride/.m.rule.call", "rule_id": "global/underride/.m.rule.call",
"conditions": [ "conditions": [

View file

@ -325,7 +325,7 @@ class HttpPusher(Pusher):
# This was checked in the __init__, but mypy doesn't seem to know that. # This was checked in the __init__, but mypy doesn't seem to know that.
assert self.data is not None assert self.data is not None
if self.data.get("format") == "event_id_only": if self.data.get("format") == "event_id_only":
d = { d: Dict[str, Any] = {
"notification": { "notification": {
"event_id": event.event_id, "event_id": event.event_id,
"room_id": event.room_id, "room_id": event.room_id,

View file

@ -37,14 +37,16 @@ class _EventSourcesInner:
account_data: AccountDataEventSource account_data: AccountDataEventSource
def get_sources(self) -> Iterator[Tuple[str, EventSource]]: def get_sources(self) -> Iterator[Tuple[str, EventSource]]:
for attribute in _EventSourcesInner.__attrs_attrs__: # type: ignore[attr-defined] for attribute in attr.fields(_EventSourcesInner):
yield attribute.name, getattr(self, attribute.name) yield attribute.name, getattr(self, attribute.name)
class EventSources: class EventSources:
def __init__(self, hs: "HomeServer"): def __init__(self, hs: "HomeServer"):
self.sources = _EventSourcesInner( self.sources = _EventSourcesInner(
*(attribute.type(hs) for attribute in _EventSourcesInner.__attrs_attrs__) # type: ignore[attr-defined] # mypy thinks attribute.type is `Optional`, but we know it's never `None` here since
# all the attributes of `_EventSourcesInner` are annotated.
*(attribute.type(hs) for attribute in attr.fields(_EventSourcesInner)) # type: ignore[misc]
) )
self.store = hs.get_datastore() self.store = hs.get_datastore()

View file

@ -20,7 +20,7 @@ import os
import signal import signal
import sys import sys
from types import FrameType, TracebackType from types import FrameType, TracebackType
from typing import NoReturn, Type from typing import NoReturn, Optional, Type
def daemonize_process(pid_file: str, logger: logging.Logger, chdir: str = "/") -> None: def daemonize_process(pid_file: str, logger: logging.Logger, chdir: str = "/") -> None:
@ -100,7 +100,9 @@ def daemonize_process(pid_file: str, logger: logging.Logger, chdir: str = "/") -
# also catch any other uncaught exceptions before we get that far.) # also catch any other uncaught exceptions before we get that far.)
def excepthook( def excepthook(
type_: Type[BaseException], value: BaseException, traceback: TracebackType type_: Type[BaseException],
value: BaseException,
traceback: Optional[TracebackType],
) -> None: ) -> None:
logger.critical("Unhanded exception", exc_info=(type_, value, traceback)) logger.critical("Unhanded exception", exc_info=(type_, value, traceback))
@ -123,7 +125,7 @@ def daemonize_process(pid_file: str, logger: logging.Logger, chdir: str = "/") -
sys.exit(1) sys.exit(1)
# write a log line on SIGTERM. # write a log line on SIGTERM.
def sigterm(signum: signal.Signals, frame: FrameType) -> NoReturn: def sigterm(signum: int, frame: Optional[FrameType]) -> NoReturn:
logger.warning("Caught signal %s. Stopping daemon." % signum) logger.warning("Caught signal %s. Stopping daemon." % signum)
sys.exit(0) sys.exit(0)

View file

@ -14,7 +14,7 @@
import functools import functools
import sys import sys
from typing import Any, Callable, Generator, List, TypeVar from typing import Any, Callable, Generator, List, TypeVar, cast
from twisted.internet import defer from twisted.internet import defer
from twisted.internet.defer import Deferred from twisted.internet.defer import Deferred
@ -174,7 +174,9 @@ def _check_yield_points(
) )
) )
changes.append(err) changes.append(err)
return getattr(e, "value", None) # The `StopIteration` or `_DefGen_Return` contains the return value from the
# generator.
return cast(T, e.value)
frame = gen.gi_frame frame = gen.gi_frame