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

Enable --check-untyped-defs by default #12901

Draft
wants to merge 4 commits into
base: master
Choose a base branch
from

Conversation

pranavrajpal
Copy link
Contributor

Having --check-untyped-defs off by default is rather surprising behavior, since most people don't expect whether a function is annotated to change whether mypy checks that function. See #11201 and #3948 (comment) for previous discussions of this.

I'm mainly creating this to see what mypy_primer says about the impact of changing the default and if there are other changes we can make to reduce the number of new errors. I haven't looked at whether the test suite passes yet.

Test Plan

I made sure mypy --check-untyped-defs, mypy --no-check-untyped-defs, and mypy --strict all behaved the same as before, and mypy with no options reported errors in untyped functions. I also looked at the mypy --help output and made sure it seemed reasonable.

Changing the default of an option apparently isn't as straightforward as
just changing the default argument to add_invertible_flag. We need to
also specify dest, change the name of the flag, and change the default
in options.py.
Remove strict_flag=True to prevent check-untyped-defs from being
disabled when --strict is passed. Also update the help text for the
untyped group to remove the statement referring to --check-untyped-defs
being disabled by default.
@github-actions

This comment has been minimized.

@pranavrajpal
Copy link
Contributor Author

My analysis of some of the mypy_primer errors (see below for summary):

Stone

  • Most of the Optional[Any] errors seem to be true positives because there are attributes that are only given a non-None value in a method separate from __init__.
  • There are some errors involving numbers.Integral, which seem somewhat similar to int is not a Number? #3186
  • The first 2 errors in stone_serializers.py are examples of Inner method discards type narrowing done in outer method #2608 which should be solvable using the heuristic pyright uses (see Inner method discards type narrowing done in outer method #2608 (comment))
  • The last 2 errors in stone_serializers.py have a variable being assigned different types at different points. The right fix for that is probably just adding a type annotation or using an overload for the function.
  • The test_stone_internal.py errors all seem solvable by enabling --allow-redefinition.
  • The dict entry has incompatible type errors are caused by heterogeneous dicts with values of type str and List[Dict[str, str]]. Inferring a union for the value type might help with that, but I don't know if that's going to result in more errors due to values of dicts being invariant.

Pandera

Most of these errors look like genuine errors. Some notes about some of those errors:

  • The __setstate__ error seems like a typeshed bug. __setstate__ is defined on BaseException, but it isn't defined in typeshed.
  • The singledispatch error in engine.py is technically correct but relatively easy to fix (the 2 classes are incompatible, but the right fix is just changing Dispatch to a Protocol since it's only being used for type checking purposes.
  • The strategies.py errors are more examples of Inner method discards type narrowing done in outer method #2608.
  • io.py is another example of mypy getting confused by heterogeneous dicts.

pyjwt

  • The first 2 errors in algorithms.py are caused by redefinition of the same variable in different branches.
  • The next 3 errors in algorithms.py can easily be fixed by adding a type annotation.
  • The help.py errors are because typeshed doesn't have sys.pypy_version_info

Summary

  • Enabling --allow-redefinition would probably help reduce the number of errors a decent amount. More lenient rules around allowing redefinition than --allow-redefinition might help even more, but that comes at the cost of hiding true errors and worse error messages.
  • Inner method discards type narrowing done in outer method #2608 also seems to come up a decent amount, so fixing that could help reduce errors more.

@hauntsaninja
Copy link
Collaborator

Thanks for looking into this! You probably know this already, but just in case, note that ^ is only a fraction of the complete mypy_primer output (... (truncated 3325383 chars) ...). If you're interested in seeing all of it, you can download the "mypy_primer_diffs" artifact at https://github.com/python/mypy/actions/runs/2403480711

@github-actions

This comment has been minimized.

@github-actions
Copy link
Contributor

Diff from mypy_primer, showing the effect of this PR on open source code:

aiortc (https://github.com/aiortc/aiortc)
+ src/aiortc/contrib/media.py:74: error: Call to untyped function "blackhole_consume" in typed context  [no-untyped-call]
+ src/aiortc/contrib/media.py:99: error: Module has no attribute "AudioResampler"  [attr-defined]
+ src/aiortc/contrib/media.py:115: error: Module has no attribute "FFmpegError"  [attr-defined]
+ src/aiortc/contrib/media.py:154: error: "VideoFrame" has no attribute "time"  [attr-defined]
+ src/aiortc/contrib/media.py:178: error: Module has no attribute "FFmpegError"  [attr-defined]
+ src/aiortc/contrib/media.py:226: error: Need type annotation for "_queue"  [var-annotated]
- src/aiortc/contrib/media.py:308: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- src/aiortc/contrib/media.py:309: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- src/aiortc/contrib/media.py:312: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- src/aiortc/contrib/media.py:315: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- src/aiortc/contrib/media.py:316: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
+ src/aiortc/contrib/media.py:305: error: Module has no attribute "open"  [attr-defined]
+ src/aiortc/contrib/media.py:320: error: Call to untyped function "PlayerStreamTrack" in typed context  [no-untyped-call]
+ src/aiortc/contrib/media.py:323: error: Call to untyped function "PlayerStreamTrack" in typed context  [no-untyped-call]
+ src/aiortc/contrib/media.py:327: error: Call to untyped function "PlayerStreamTrack" in typed context  [no-untyped-call]
+ src/aiortc/contrib/media.py:330: error: Call to untyped function "PlayerStreamTrack" in typed context  [no-untyped-call]
+ src/aiortc/contrib/media.py:422: error: Module has no attribute "open"  [attr-defined]
+ src/aiortc/contrib/media.py:446: error: Call to untyped function "MediaRecorderContext" in typed context  [no-untyped-call]
+ src/aiortc/contrib/media.py:521: error: Call to untyped function "stop" in typed context  [no-untyped-call]
+ src/aiortc/rtcrtpsender.py:228: error: Incompatible types in assignment (expression has type "float", variable has type "None")  [assignment]
+ src/aiortc/rtcsctptransport.py:846: error: Call to untyped function "_receive_chunk" in typed context  [no-untyped-call]
+ src/aiortc/rtcsctptransport.py:850: error: Call to untyped function "_send_sack" in typed context  [no-untyped-call]
+ src/aiortc/rtcsctptransport.py:927: error: Call to untyped function "_receive_sack_chunk" in typed context  [no-untyped-call]
+ src/aiortc/rtcsctptransport.py:940: error: Incompatible types in assignment (expression has type "ShutdownAckChunk", variable has type "HeartbeatAckChunk")  [assignment]
+ src/aiortc/rtcsctptransport.py:957: error: Call to untyped function "_receive_reconfig_param" in typed context  [no-untyped-call]
+ src/aiortc/rtcsctptransport.py:957: error: "type" has no attribute "parse"  [attr-defined]
+ src/aiortc/rtcsctptransport.py:979: error: Incompatible types in assignment (expression has type "InitAckChunk", variable has type "HeartbeatAckChunk")  [assignment]
+ src/aiortc/rtcsctptransport.py:980: error: "HeartbeatAckChunk" has no attribute "initiate_tag"  [attr-defined]
+ src/aiortc/rtcsctptransport.py:981: error: "HeartbeatAckChunk" has no attribute "advertised_rwnd"  [attr-defined]
+ src/aiortc/rtcsctptransport.py:982: error: "HeartbeatAckChunk" has no attribute "outbound_streams"  [attr-defined]
+ src/aiortc/rtcsctptransport.py:983: error: "HeartbeatAckChunk" has no attribute "inbound_streams"  [attr-defined]
+ src/aiortc/rtcsctptransport.py:984: error: "HeartbeatAckChunk" has no attribute "initial_tsn"  [attr-defined]
+ src/aiortc/rtcsctptransport.py:1012: error: Incompatible types in assignment (expression has type "CookieAckChunk", variable has type "HeartbeatAckChunk")  [assignment]
+ src/aiortc/rtcsctptransport.py:1234: error: No overload variant of "pop" of "dict" matches argument types "bytes", "None"  [call-overload]
+ src/aiortc/rtcsctptransport.py:1234: note: Possible overload variants:
+ src/aiortc/rtcsctptransport.py:1234: note:     def pop(self, int, /) -> InboundStream
+ src/aiortc/rtcsctptransport.py:1234: note:     def [_T] pop(self, int, Union[InboundStream, _T], /) -> Union[InboundStream, _T]
+ src/aiortc/rtcsctptransport.py:1237: error: No overload variant of "get" of "dict" matches argument type "bytes"  [call-overload]
+ src/aiortc/rtcsctptransport.py:1237: note: Possible overload variants:
+ src/aiortc/rtcsctptransport.py:1237: note:     def get(self, int, /) -> RTCDataChannel
+ src/aiortc/rtcsctptransport.py:1237: note:     def [_T] get(self, int, Union[RTCDataChannel, _T], /) -> Union[RTCDataChannel, _T]
+ src/aiortc/rtcsctptransport.py:1239: error: Call to untyped function "_data_channel_close" in typed context  [no-untyped-call]
+ src/aiortc/rtcsctptransport.py:1247: error: Call to untyped function "_send_reconfig_param" in typed context  [no-untyped-call]
+ src/aiortc/rtcsctptransport.py:1258: error: Call to untyped function "_send_reconfig_param" in typed context  [no-untyped-call]
+ src/aiortc/rtcsctptransport.py:1359: error: Need type annotation for "gaps" (hint: "gaps: List[<type>] = ...")  [var-annotated]
+ src/aiortc/rtcsctptransport.py:1369: error: Call to untyped function "SackChunk" in typed context  [no-untyped-call]
+ src/aiortc/rtcsctptransport.py:1567: error: Argument "streams" to "StreamResetOutgoingParam" has incompatible type "List[int]"; expected "List[bytes]"  [arg-type]
+ src/aiortc/rtcsctptransport.py:1569: error: Incompatible types in assignment (expression has type "StreamResetOutgoingParam", variable has type "None")  [assignment]
+ src/aiortc/rtcsctptransport.py:1572: error: Call to untyped function "_send_reconfig_param" in typed context  [no-untyped-call]
+ src/aiortc/rtcsctptransport.py:1622: error: Call to untyped function "_transmit_reconfig" in typed context  [no-untyped-call]
+ src/aiortc/rtcsctptransport.py:1625: error: Need type annotation for "new_queue"  [var-annotated]
+ src/aiortc/rtcrtptransceiver.py:129: error: Call to untyped function "stop" in typed context  [no-untyped-call]
+ src/aiortc/rtcpeerconnection.py:486: error: Call to untyped function "stop" in typed context  [no-untyped-call]
+ src/aiortc/contrib/signaling.py:34: error: Dict entry 2 has incompatible type "str": "int"; expected "str": "str"  [dict-item]
+ src/aiortc/contrib/signaling.py:59: error: Call to untyped function "send" in typed context  [no-untyped-call]
+ src/aiortc/contrib/signaling.py:67: error: Call to untyped function "object_from_string" in typed context  [no-untyped-call]
+ src/aiortc/contrib/signaling.py:71: error: Call to untyped function "object_to_string" in typed context  [no-untyped-call]
+ src/aiortc/contrib/signaling.py:110: error: Call to untyped function "send" in typed context  [no-untyped-call]
+ src/aiortc/contrib/signaling.py:119: error: Call to untyped function "_connect" in typed context  [no-untyped-call]
+ src/aiortc/contrib/signaling.py:124: error: Call to untyped function "object_from_string" in typed context  [no-untyped-call]
+ src/aiortc/contrib/signaling.py:127: error: Call to untyped function "_connect" in typed context  [no-untyped-call]
+ src/aiortc/contrib/signaling.py:128: error: Call to untyped function "object_to_string" in typed context  [no-untyped-call]
+ src/aiortc/contrib/signaling.py:163: error: Call to untyped function "send" in typed context  [no-untyped-call]
+ src/aiortc/contrib/signaling.py:173: error: Call to untyped function "_connect" in typed context  [no-untyped-call]
+ src/aiortc/contrib/signaling.py:178: error: Call to untyped function "object_from_string" in typed context  [no-untyped-call]
+ src/aiortc/contrib/signaling.py:181: error: Call to untyped function "_connect" in typed context  [no-untyped-call]
+ src/aiortc/contrib/signaling.py:182: error: Call to untyped function "object_to_string" in typed context  [no-untyped-call]
+ src/aiortc/contrib/signaling.py:213: error: Call to untyped function "TcpSocketSignaling" in typed context  [no-untyped-call]
+ src/aiortc/contrib/signaling.py:215: error: Call to untyped function "UnixSocketSignaling" in typed context  [no-untyped-call]
+ src/aiortc/contrib/signaling.py:217: error: Call to untyped function "CopyAndPasteSignaling" in typed context  [no-untyped-call]

vision (https://github.com/pytorch/vision)
+ torchvision/_internally_replaced_utils.py:33: error: Module has no attribute "WinDLL"  [attr-defined]
+ torchvision/_internally_replaced_utils.py:41: error: Module has no attribute "add_dll_directory"  [attr-defined]
+ torchvision/extension.py:98: error: Module has no attribute "WinDLL"  [attr-defined]
+ torchvision/models/_api.py:76: error: "__getattr__" undefined in superclass  [misc]
+ torchvision/transforms/_transforms_video.py:31: error: No overload variant of "int" matches argument type "Number"  [call-overload]
+ torchvision/transforms/_transforms_video.py:31: note: Possible overload variants:
+ torchvision/transforms/_transforms_video.py:31: note:     def __new__(cls, Union[str, bytes, bytearray, memoryview, array[Any], mmap, _CData, PickleBuffer, SupportsInt, SupportsIndex, SupportsTrunc] = ..., /) -> int
+ torchvision/transforms/_transforms_video.py:31: note:     def __new__(cls, Union[str, bytes, bytearray], /, base: SupportsIndex) -> int
+ torchvision/transforms/_transforms_video.py:43: error: Argument 2 to "get_params" of "RandomCrop" has incompatible type "Tuple[Any, ...]"; expected "Tuple[int, int]"  [arg-type]
+ torchvision/transforms/_transforms_video.py:77: error: Argument 2 to "get_params" of "RandomResizedCrop" has incompatible type "Sequence[Any]"; expected "List[float]"  [arg-type]
+ torchvision/transforms/_transforms_video.py:77: error: Argument 3 to "get_params" of "RandomResizedCrop" has incompatible type "Sequence[Any]"; expected "List[float]"  [arg-type]
+ torchvision/transforms/_transforms_video.py:87: error: No overload variant of "int" matches argument type "Number"  [call-overload]
+ torchvision/transforms/_transforms_video.py:87: note: Possible overload variants:
+ torchvision/transforms/_transforms_video.py:87: note:     def __new__(cls, Union[str, bytes, bytearray, memoryview, array[Any], mmap, _CData, PickleBuffer, SupportsInt, SupportsIndex, SupportsTrunc] = ..., /) -> int
+ torchvision/transforms/_transforms_video.py:87: note:     def __new__(cls, Union[str, bytes, bytearray], /, base: SupportsIndex) -> int
+ torchvision/models/optical_flow/raft.py:262: error: Incompatible types in assignment (expression has type "Callable[[Any, Any], Any]", variable has type "ConvGRU")  [assignment]

pyinstrument (https://github.com/joerick/pyinstrument)
- pyinstrument/frame.py:376: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
+ pyinstrument/vendor/appdirs.py:497: error: Module has no attribute "OpenKey"  [attr-defined]
+ pyinstrument/vendor/appdirs.py:498: error: Module has no attribute "HKEY_CURRENT_USER"  [attr-defined]
+ pyinstrument/vendor/appdirs.py:501: error: Module has no attribute "QueryValueEx"  [attr-defined]
+ pyinstrument/vendor/appdirs.py:515: error: Module has no attribute "windll"  [attr-defined]
+ pyinstrument/vendor/appdirs.py:526: error: Module has no attribute "windll"  [attr-defined]
+ pyinstrument/vendor/appdirs.py:537: error: Module has no attribute "zeros"  [attr-defined]
+ pyinstrument/vendor/appdirs.py:550: error: Module has no attribute "zeros"  [attr-defined]
+ pyinstrument/vendor/decorator.py:103: error: Need type annotation for "arg"  [var-annotated]
+ pyinstrument/vendor/decorator.py:253: error: Incompatible types in assignment (expression has type "Optional[str]", variable has type "str")  [assignment]
+ pyinstrument/vendor/decorator.py:259: error: Incompatible types in assignment (expression has type "Optional[Tuple[Any, ...]]", variable has type "Tuple[]")  [assignment]
+ pyinstrument/vendor/decorator.py:294: error: Missing positional arguments "args", "kwds" in call to "__init__" of "_GeneratorContextManager"  [call-arg]
+ pyinstrument/vendor/decorator.py:353: error: Need type annotation for "typemap" (hint: "typemap: Dict[<type>, <type>] = ...")  [var-annotated]
+ pyinstrument/vendor/decorator.py:360: error: Need type annotation for "ras"  [var-annotated]
+ pyinstrument/__main__.py:241: error: Incompatible types in assignment (expression has type "CommandLineOptions", variable has type "Values")  [assignment]
+ pyinstrument/__main__.py:269: error: Incompatible types in assignment (expression has type "TextIO", variable has type "StreamReaderWriter")  [assignment]
+ pyinstrument/__main__.py:275: error: Argument 1 to "create_renderer" has incompatible type "Values"; expected "CommandLineOptions"  [arg-type]
+ pyinstrument/__main__.py:331: error: Incompatible types in assignment (expression has type "TextIO", variable has type "StreamReaderWriter")  [assignment]

kornia (https://github.com/kornia/kornia)
+ kornia/constants.py:35: error: Need type annotation for "val"  [var-annotated]
- kornia/feature/defmo.py:221: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
+ kornia/metrics/average_meter.py:27: error: Incompatible types in assignment (expression has type "Union[int, float, bool, Any]", variable has type "int")  [assignment]
+ kornia/metrics/average_meter.py:28: error: Incompatible types in assignment (expression has type "Union[int, float, Any]", variable has type "int")  [assignment]
+ kornia/metrics/average_meter.py:30: error: Incompatible types in assignment (expression has type "float", variable has type "int")  [assignment]
+ kornia/feature/loftr/utils/position_encoding.py:56: error: Cannot determine type of "pe"  [has-type]
+ kornia/feature/loftr/loftr_module/transformer.py:54: error: "object" not callable  [operator]
- kornia/utils/helpers.py:37: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
+ kornia/utils/helpers.py:48: error: "None" not callable  [misc]
+ kornia/testing/__init__.py:363: error: Variable "typ" is not valid as a type  [valid-type]
+ kornia/testing/__init__.py:363: note: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
+ kornia/feature/siftdesc.py:170: error: "List[Any]" has no attribute "view"  [attr-defined]
- kornia/geometry/linalg.py:101: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/geometry/linalg.py:102: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/geometry/linalg.py:105: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/geometry/linalg.py:106: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/geometry/linalg.py:109: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/feature/siftdesc.py:145: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/feature/siftdesc.py:148: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/feature/siftdesc.py:150: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/feature/siftdesc.py:151: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/feature/siftdesc.py:153: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/feature/siftdesc.py:154: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/feature/siftdesc.py:156: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/feature/siftdesc.py:158: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/feature/siftdesc.py:159: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/feature/siftdesc.py:160: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/feature/siftdesc.py:161: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/feature/siftdesc.py:163: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/feature/siftdesc.py:295: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/feature/siftdesc.py:297: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/feature/siftdesc.py:298: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/feature/siftdesc.py:299: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/feature/siftdesc.py:300: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/feature/siftdesc.py:301: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/feature/siftdesc.py:303: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/feature/siftdesc.py:304: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/feature/siftdesc.py:305: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/feature/siftdesc.py:306: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- kornia/feature/siftdesc.py:308: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
+ kornia/nerf/data_utils.py:112: error: Argument 1 to "len" has incompatible type "Optional[RaySampler]"; expected "Sized"  [arg-type]

paroxython (https://github.com/laowantong/paroxython)
+ paroxython/__init__.py:55: error: Argument "tags" to "main" has incompatible type "str"; expected "Literal['Taxon', 'Label']"  [arg-type]

operator (https://github.com/canonical/operator)
+ ops/_vendor/websocket/_cookiejar.py:32: error: Need type annotation for "simpleCookie"  [var-annotated]
+ ops/_vendor/websocket/_cookiejar.py:40: error: Item "None" of "Union[SimpleCookie[Any], Any, None]" has no attribute "update"  [union-attr]
+ ops/_vendor/websocket/_cookiejar.py:45: error: Need type annotation for "simpleCookie"  [var-annotated]
+ ops/_vendor/websocket/_cookiejar.py:66: error: Need type annotation for "cookie"  [var-annotated]
+ ops/_vendor/websocket/_abnf.py:143: error: Cannot assign to a method  [assignment]
+ ops/_vendor/websocket/_abnf.py:225: error: Unsupported operand types for << ("Callable[[Any, Any], Any]" and "int")  [operator]
+ ops/_vendor/websocket/_abnf.py:227: error: Unsupported operand types for << ("Callable[[Any, Any], Any]" and "int")  [operator]
+ ops/_vendor/websocket/_abnf.py:230: error: Unsupported operand types for << ("Callable[[Any, Any], Any]" and "int")  [operator]
+ ops/_vendor/websocket/_abnf.py:233: error: Function "Callable[[Any, Any], Any]" could always be true in boolean context  [truthy-function]
+ ops/_vendor/websocket/_abnf.py:315: error: Value of type "Optional[Any]" is not indexable  [index]
+ ops/_vendor/websocket/_abnf.py:338: error: "None" object is not iterable  [misc]
+ ops/_vendor/websocket/_abnf.py:418: error: Value of type "Optional[Any]" is not indexable  [index]
+ ops/_vendor/websocket/_abnf.py:419: error: Value of type "Optional[Any]" is not indexable  [index]
+ ops/_vendor/websocket/_abnf.py:423: error: Value of type "Optional[Any]" is not indexable  [index]
+ ops/lib/__init__.py:94: error: Need type annotation for "_libraries" (hint: "_libraries: Dict[<type>, <type>] = ...")  [var-annotated]
+ ops/lib/__init__.py:190: error: Need type annotation for "libinfo" (hint: "libinfo: Dict[<type>, <type>] = ...")  [var-annotated]
+ ops/lib/__init__.py:221: error: Argument 2 to "_Lib" has incompatible type "object"; expected "str"  [arg-type]
+ ops/lib/__init__.py:221: error: Argument 3 to "_Lib" has incompatible type "object"; expected "str"  [arg-type]
+ ops/lib/__init__.py:221: error: Argument 4 to "_Lib" has incompatible type "object"; expected "int"  [arg-type]
+ ops/lib/__init__.py:221: error: Argument 5 to "_Lib" has incompatible type "object"; expected "int"  [arg-type]
+ ops/_vendor/websocket/_url.py:173: error: Argument 1 to "unquote" has incompatible type "Optional[str]"; expected "Union[str, bytes]"  [arg-type]
+ ops/_vendor/websocket/_http.py:187: error: "OSError" has no attribute "remote_ip"  [attr-defined]
+ ops/_vendor/websocket/_http.py:189: error: Module has no attribute "WSAECONNREFUSED"; maybe "ECONNREFUSED"?  [attr-defined]
+ ops/_vendor/websocket/_http.py:191: error: Incompatible types in assignment (expression has type "Tuple[int]", variable has type "Tuple[int, Any]")  [assignment]
+ ops/_vendor/websocket/_http.py:257: error: Incompatible types in assignment (expression has type "str", target has type "VerifyMode")  [assignment]
+ ops/_vendor/websocket/_http.py:260: error: Incompatible types in assignment (expression has type "str", target has type "VerifyMode")  [assignment]
+ ops/_vendor/websocket/_http.py:270: error: Name "match_hostname" is not defined  [name-defined]
+ ops/_vendor/websocket/_http.py:307: error: Need type annotation for "headers" (hint: "headers: Dict[<type>, <type>] = ...")  [var-annotated]
+ ops/_vendor/websocket/_core.py:104: error: Incompatible types in assignment (expression has type "NoLock", variable has type "Lock")  [assignment]
+ ops/_vendor/websocket/_core.py:105: error: Incompatible types in assignment (expression has type "NoLock", variable has type "Lock")  [assignment]
+ ops/_vendor/websocket/_core.py:121: error: Item "None" of "Optional[Any]" has no attribute "fileno"  [union-attr]
+ ops/_vendor/websocket/_core.py:474: error: Item "None" of "Optional[Any]" has no attribute "gettimeout"  [union-attr]
+ ops/_vendor/websocket/_core.py:475: error: Item "None" of "Optional[Any]" has no attribute "settimeout"  [union-attr]
+ ops/_vendor/websocket/_core.py:491: error: Item "None" of "Optional[Any]" has no attribute "settimeout"  [union-attr]
+ ops/_vendor/websocket/_core.py:492: error: Item "None" of "Optional[Any]" has no attribute "shutdown"  [union-attr]
+ ops/_vendor/websocket/_core.py:503: error: Item "None" of "Optional[Any]" has no attribute "shutdown"  [union-attr]
+ ops/_vendor/websocket/_app.py:204: error: Incompatible types in assignment (expression has type "float", variable has type "int")  [assignment]
+ ops/_vendor/websocket/_app.py:335: error: Item "None" of "Optional[Any]" has no attribute "recv_data_frame"  [union-attr]
+ ops/_vendor/websocket/_app.py:341: error: Incompatible types in assignment (expression has type "float", variable has type "int")  [assignment]
+ ops/_vendor/websocket/_app.py:380: error: Item "None" of "Optional[Any]" has no attribute "is_ssl"  [union-attr]
- ops/framework.py:995: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- ops/framework.py:1126: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
- ops/framework.py:1127: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
+ ops/testing.py:1702: error: Missing positional argument "pebble_client" in call to "_can_connect" of "_TestingModelBackend"  [call-arg]
+ ops/testing.py:1702: error: Argument 1 to "_can_connect" of "_TestingModelBackend" has incompatible type "_TestingPebbleClient"; expected "_TestingModelBackend"  [arg-type]
- ops/testing.py:2257: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
+ ops/testing.py:2278: error: Incompatible types in assignment (expression has type "Union[_File, _Directory]", variable has type "_Directory")  [assignment]
+ ops/testing.py:2344: error: Incompatible types in assignment (expression has type "Union[_File, _Directory]", variable has type "_Directory")  [assignment]
+ ops/testing.py:2381: error: Incompatible types in assignment (expression has type "Union[_File, _Directory]", variable has type "_Directory")  [assignment]
+ ops/main.py:61: error: Incompatible types in assignment (expression has type "Path", variable has type "Optional[str]")  [assignment]
+ ops/main.py:63: error: Incompatible types in assignment (expression has type "Path", variable has type "Optional[str]")  [assignment]

apprise (https://github.com/caronc/apprise)
+ apprise/logger.py:49: error: Module has no attribute "TRACE"  [attr-defined]
+ apprise/logger.py:50: error: Module has no attribute "TRACE"  [attr-defined]
+ apprise/logger.py:57: error: Module has no attribute "DEPRECATE"  [attr-defined]
+ apprise/logger.py:58: error: Module has no attribute "DEPRECATE"  [attr-defined]
+ apprise/logger.py:123: error: "object" has no attribute "setLevel"  [attr-defined]
+ apprise/logger.py:128: error: "object" has no attribute "setFormatter"  [attr-defined]
+ apprise/logger.py:157: error: Incompatible types in assignment (expression has type "TextIOWrapper", variable has type "StringIO")  [assignment]
+ apprise/logger.py:160: error: Argument 1 to "addHandler" of "Logger" has incompatible type "object"; expected "Handler"  [arg-type]
+ apprise/logger.py:171: error: "object" has no attribute "flush"  [attr-defined]
+ apprise/logger.py:175: error: Argument 1 to "removeHandler" of "Logger" has incompatible type "object"; expected "Handler"  [arg-type]
+ apprise/logger.py:184: error: "object" has no attribute "close"  [attr-defined]
+ apprise/conversion.py:68: error: "Type[URLBase]" has no attribute "escape_html"  [attr-defined]
+ apprise/utils.py:56: error: Argument 1 to "module_from_spec" has incompatible type "Optional[ModuleSpec]"; expected "ModuleSpec"  [arg-type]
+ apprise/utils.py:59: error: Item "None" of "Optional[ModuleSpec]" has no attribute "loader"  [union-attr]
+ apprise/utils.py:59: error: Item "None" of "Union[Loader, None, Any]" has no attribute "exec_module"  [union-attr]
+ apprise/utils.py:547: error: Need type annotation for "result"  [var-annotated]
+ apprise/utils.py:711: error: Unsupported target for indexed assignment ("object")  [index]
+ apprise/utils.py:715: error: Incompatible types in assignment (expression has type "Union[str, Any, None]", variable has type "str")  [assignment]
+ apprise/utils.py:725: error: "object" has no attribute "update"  [attr-defined]
+ apprise/utils.py:733: error: Unsupported target for indexed assignment ("object")  [index]
+ apprise/utils.py:734: error: Unsupported target for indexed assignment ("object")  [index]
+ apprise/utils.py:738: error: Value of type "object" is not indexable  [index]
+ apprise/utils.py:740: error: Value of type "object" is not indexable  [index]
+ apprise/utils.py:740: error: Unsupported target for indexed assignment ("object")  [index]
+ apprise/utils.py:747: error: Value of type "object" is not indexable  [index]
+ apprise/utils.py:750: error: Unsupported target for indexed assignment ("object")  [index]
+ apprise/utils.py:753: error: "object" has no attribute "__delitem__"  [attr-defined]
+ apprise/utils.py:757: error: Value of type "object" is not indexable  [index]
+ apprise/utils.py:758: error: Unsupported target for indexed assignment ("object")  [index]
+ apprise/utils.py:758: error: Item "None" of "Optional[Match[str]]" has no attribute "group"  [union-attr]
+ apprise/utils.py:759: error: Unsupported target for indexed assignment ("object")  [index]
+ apprise/utils.py:759: error: Item "None" of "Optional[Match[str]]" has no attribute "group"  [union-attr]
+ apprise/utils.py:760: error: Value of type "object" is not indexable  [index]
+ apprise/utils.py:762: error: Unsupported target for indexed assignment ("object")  [index]
+ apprise/utils.py:764: error: "object" has no attribute "__delitem__"  [attr-defined]
+ apprise/utils.py:767: error: Unsupported target for indexed assignment ("object")  [index]
+ apprise/utils.py:768: error: Value of type "object" is not indexable  [index]
+ apprise/utils.py:775: error: "object" has no attribute "get"  [attr-defined]
+ apprise/utils.py:777: error: Unsupported target for indexed assignment ("object")  [ind

... (truncated 47297 lines) ...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants