Fix various inheritances
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 5.1k
- Fork
- 2.1k
- Merge trung bình
- 1 ngày 19 giờ
- Pull request đã merge (30 ngày)
- 82
Mô tả
I had a patch to stubtest that added checking of base classes. Unfortunately, it was too noisy to consider merging, although some fixes did come out of it.
I complicated the patch today, and most of the following look actionable. Figured I'd jot the output down here, so it doesn't get forgotten about, since I'm not sure I want to merge this newly complicated patch (branch at https://github.com/hauntsaninja/mypy/tree/stubtestbaseclass). I'll chip away at these, but if someone reading this is looking to contribute to typeshed, this is a good place to start!
~/dev/mypy stubtestbaseclass λ python3.8 -m mypy.stubtest --custom-typeshed-dir ~/dev/typeshed --check-typeshed
error: asyncio.locks._ContextManagerMixin is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 14
<TypeInfo asyncio.locks._ContextManagerMixin> inherits from asyncio.futures.Future
MRO: asyncio.locks._ContextManagerMixin, asyncio.futures.Future, typing.Awaitable, typing.Iterable, builtins.object
Runtime: at line 49 in file /Users/shantanu/.pyenv/versions/3.8.2/lib/python3.8/asyncio/locks.py
<class 'asyncio.locks._ContextManagerMixin'> inherits from builtins.object
MRO: asyncio.locks._ContextManagerMixin, builtins.object
error: asyncio.protocols.BufferedProtocol is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 14
<TypeInfo asyncio.protocols.BufferedProtocol> inherits from asyncio.protocols.Protocol
MRO: asyncio.protocols.BufferedProtocol, asyncio.protocols.Protocol, asyncio.protocols.BaseProtocol, builtins.object
Runtime: at line 109 in file /Users/shantanu/.pyenv/versions/3.8.2/lib/python3.8/asyncio/protocols.py
<class 'asyncio.protocols.BufferedProtocol'> inherits from asyncio.protocols.BaseProtocol
MRO: asyncio.protocols.BufferedProtocol, asyncio.protocols.BaseProtocol, builtins.object
error: concurrent.futures.process.BrokenProcessPool is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 8
<TypeInfo concurrent.futures.process.BrokenProcessPool> inherits from builtins.RuntimeError
MRO: concurrent.futures.process.BrokenProcessPool, builtins.RuntimeError, builtins.Exception, builtins.BaseException, builtins.object
Runtime: at line 490 in file /Users/shantanu/.pyenv/versions/3.8.2/lib/python3.8/concurrent/futures/process.py
<class 'concurrent.futures.process.BrokenProcessPool'> inherits from concurrent.futures._base.BrokenExecutor
MRO: concurrent.futures.process.BrokenProcessPool, concurrent.futures._base.BrokenExecutor, builtins.RuntimeError, builtins.Exception, builtins.BaseException, builtins.object
error: ctypes.LittleEndianStructure is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 261
<TypeInfo ctypes.LittleEndianStructure> inherits from ctypes.Structure
MRO: ctypes.LittleEndianStructure, ctypes.Structure, ctypes._StructUnionBase, ctypes._CData, builtins.object
Runtime:
<class '_ctypes.Structure'> inherits from _ctypes._CData
MRO: _ctypes.Structure, _ctypes._CData, builtins.object
error: distutils.command.build_py.build_py_2to3 is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 10
<TypeInfo distutils.command.build_py.build_py_2to3> inherits from distutils.command.build_py.build_py
MRO: distutils.command.build_py.build_py_2to3, distutils.command.build_py.build_py, distutils.cmd.Command, builtins.object
Runtime: at line 394 in file /Users/shantanu/.pyenv/versions/3.8.2/lib/python3.8/distutils/command/build_py.py
<class 'distutils.command.build_py.build_py_2to3'> inherits from distutils.command.build_py.build_py, distutils.util.Mixin2to3
MRO: distutils.command.build_py.build_py_2to3, distutils.command.build_py.build_py, distutils.cmd.Command, distutils.util.Mixin2to3, builtins.object
error: email.feedparser.BytesFeedParser is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 13
<TypeInfo email.feedparser.BytesFeedParser> inherits from builtins.object
MRO: email.feedparser.BytesFeedParser, builtins.object
Runtime: at line 532 in file /Users/shantanu/.pyenv/versions/3.8.2/lib/python3.8/email/feedparser.py
<class 'email.feedparser.BytesFeedParser'> inherits from email.feedparser.FeedParser
MRO: email.feedparser.BytesFeedParser, email.feedparser.FeedParser, builtins.object
error: email.generator.BytesGenerator is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 16
<TypeInfo email.generator.BytesGenerator> inherits from builtins.object
MRO: email.generator.BytesGenerator, builtins.object
Runtime: at line 392 in file /Users/shantanu/.pyenv/versions/3.8.2/lib/python3.8/email/generator.py
<class 'email.generator.BytesGenerator'> inherits from email.generator.Generator
MRO: email.generator.BytesGenerator, email.generator.Generator, builtins.object
error: enum.auto is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 57
<TypeInfo enum.auto> inherits from enum.IntFlag
MRO: enum.auto, enum.IntFlag, builtins.int, enum.Flag, enum.Enum, builtins.object
Runtime: at line 44 in file /Users/shantanu/.pyenv/versions/3.8.2/lib/python3.8/enum.py
<class 'enum.auto'> inherits from builtins.object
MRO: enum.auto, builtins.object
error: io.BufferedRandom is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 132
<TypeInfo io.BufferedRandom> inherits from io.BufferedReader, io.BufferedWriter
MRO: io.BufferedRandom, io.BufferedReader, io.BufferedWriter, io.BufferedIOBase, io.IOBase, builtins.object
Runtime:
<class '_io.BufferedRandom'> inherits from _io._BufferedIOBase
MRO: _io.BufferedRandom, _io._BufferedIOBase, _io._IOBase, builtins.object
error: io.IncrementalNewlineDecoder is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 215
<TypeInfo io.IncrementalNewlineDecoder> inherits from codecs.IncrementalDecoder
MRO: io.IncrementalNewlineDecoder, codecs.IncrementalDecoder, builtins.object
Runtime:
<class '_io.IncrementalNewlineDecoder'> inherits from builtins.object
MRO: _io.IncrementalNewlineDecoder, builtins.object
error: io.StringIO is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 205
<TypeInfo io.StringIO> inherits from io.TextIOWrapper
MRO: io.StringIO, io.TextIOWrapper, typing.TextIO, typing.IO, typing.Iterator, typing.Iterable, builtins.object
Runtime:
<class '_io.StringIO'> inherits from _io._TextIOBase
MRO: _io.StringIO, _io._TextIOBase, _io._IOBase, builtins.object
error: multiprocessing.queues.Queue is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 7
<TypeInfo multiprocessing.queues.Queue> inherits from queue.Queue
MRO: multiprocessing.queues.Queue, queue.Queue, builtins.object
Runtime: at line 34 in file /Users/shantanu/.pyenv/versions/3.8.2/lib/python3.8/multiprocessing/queues.py
<class 'multiprocessing.queues.Queue'> inherits from builtins.object
MRO: multiprocessing.queues.Queue, builtins.object
error: os._wrap_close is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 603
<TypeInfo os._wrap_close> inherits from io.TextIOWrapper
MRO: os._wrap_close, io.TextIOWrapper, typing.TextIO, typing.IO, typing.Iterator, typing.Iterable, builtins.object
Runtime: at line 996 in file /Users/shantanu/.pyenv/versions/3.8.2/lib/python3.8/os.py
<class 'os._wrap_close'> inherits from builtins.object
MRO: os._wrap_close, builtins.object
error: selectors.DefaultSelector is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 75
<TypeInfo selectors.DefaultSelector> inherits from selectors.BaseSelector
MRO: selectors.DefaultSelector, selectors.BaseSelector, builtins.object
Runtime: at line 506 in file /Users/shantanu/.pyenv/versions/3.8.2/lib/python3.8/selectors.py
<class 'selectors.KqueueSelector'> inherits from selectors._BaseSelectorImpl
MRO: selectors.KqueueSelector, selectors._BaseSelectorImpl, selectors.BaseSelector, builtins.object
error: socketserver.UDPServer is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 50
<TypeInfo socketserver.UDPServer> inherits from socketserver.BaseServer
MRO: socketserver.UDPServer, socketserver.BaseServer, builtins.object
Runtime: at line 516 in file /Users/shantanu/.pyenv/versions/3.8.2/lib/python3.8/socketserver.py
<class 'socketserver.UDPServer'> inherits from socketserver.TCPServer
MRO: socketserver.UDPServer, socketserver.TCPServer, socketserver.BaseServer, builtins.object
error: socketserver.UnixDatagramServer is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 61
<TypeInfo socketserver.UnixDatagramServer> inherits from socketserver.BaseServer
MRO: socketserver.UnixDatagramServer, socketserver.BaseServer, builtins.object
Runtime: at line 689 in file /Users/shantanu/.pyenv/versions/3.8.2/lib/python3.8/socketserver.py
<class 'socketserver.UnixDatagramServer'> inherits from socketserver.UDPServer
MRO: socketserver.UnixDatagramServer, socketserver.UDPServer, socketserver.TCPServer, socketserver.BaseServer, builtins.object
error: socketserver.UnixStreamServer is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 56
<TypeInfo socketserver.UnixStreamServer> inherits from socketserver.BaseServer
MRO: socketserver.UnixStreamServer, socketserver.BaseServer, builtins.object
Runtime: at line 686 in file /Users/shantanu/.pyenv/versions/3.8.2/lib/python3.8/socketserver.py
<class 'socketserver.UnixStreamServer'> inherits from socketserver.TCPServer
MRO: socketserver.UnixStreamServer, socketserver.TCPServer, socketserver.BaseServer, builtins.object
error: threading.BoundedSemaphore is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 148
<TypeInfo threading.BoundedSemaphore> inherits from builtins.object
MRO: threading.BoundedSemaphore, builtins.object
Runtime: at line 456 in file /Users/shantanu/.pyenv/versions/3.8.2/lib/python3.8/threading.py
<class 'threading.BoundedSemaphore'> inherits from threading.Semaphore
MRO: threading.BoundedSemaphore, threading.Semaphore, builtins.object
error: tracemalloc.DomainFilter is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 17
<TypeInfo tracemalloc.DomainFilter> inherits from builtins.object
MRO: tracemalloc.DomainFilter, builtins.object
Runtime: at line 375 in file /Users/shantanu/.pyenv/versions/3.8.2/lib/python3.8/tracemalloc.py
<class 'tracemalloc.DomainFilter'> inherits from tracemalloc.BaseFilter
MRO: tracemalloc.DomainFilter, tracemalloc.BaseFilter, builtins.object
error: tracemalloc.Filter is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 22
<TypeInfo tracemalloc.Filter> inherits from builtins.object
MRO: tracemalloc.Filter, builtins.object
Runtime: at line 327 in file /Users/shantanu/.pyenv/versions/3.8.2/lib/python3.8/tracemalloc.py
<class 'tracemalloc.Filter'> inherits from tracemalloc.BaseFilter
MRO: tracemalloc.Filter, tracemalloc.BaseFilter, builtins.object
error: typing.NamedTuple is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 627
<TypeInfo typing.NamedTuple> inherits from builtins.tuple
MRO: typing.NamedTuple, builtins.tuple, typing.Sequence, typing.Collection, typing.Iterable, typing.Container, typing.Reversible, builtins.object
Runtime: at line 1641 in file /Users/shantanu/.pyenv/versions/3.8.2/lib/python3.8/typing.py
<class 'typing.NamedTuple'> inherits from builtins.object
MRO: typing.NamedTuple, builtins.object
error: unittest.TextTestRunner is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 24
<TypeInfo unittest.runner.TextTestRunner> inherits from unittest.runner.TestRunner
MRO: unittest.runner.TextTestRunner, unittest.runner.TestRunner, builtins.object
Runtime: at line 120 in file /Users/shantanu/.pyenv/versions/3.8.2/lib/python3.8/unittest/runner.py
<class 'unittest.runner.TextTestRunner'> inherits from builtins.object
MRO: unittest.runner.TextTestRunner, builtins.object
error: unittest.mock.Mock is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 126
<TypeInfo unittest.mock.Mock> inherits from unittest.mock.NonCallableMock, unittest.mock.CallableMixin
MRO: unittest.mock.Mock, unittest.mock.NonCallableMock, unittest.mock.CallableMixin, unittest.mock.Base, builtins.object
Runtime: at line 1161 in file /Users/shantanu/.pyenv/versions/3.8.2/lib/python3.8/unittest/mock.py
<class 'unittest.mock.Mock'> inherits from unittest.mock.CallableMixin, unittest.mock.NonCallableMock
MRO: unittest.mock.Mock, unittest.mock.CallableMixin, unittest.mock.NonCallableMock, unittest.mock.Base, builtins.object
error: unittest.runner.TextTestRunner is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 24
<TypeInfo unittest.runner.TextTestRunner> inherits from unittest.runner.TestRunner
MRO: unittest.runner.TextTestRunner, unittest.runner.TestRunner, builtins.object
Runtime: at line 120 in file /Users/shantanu/.pyenv/versions/3.8.2/lib/python3.8/unittest/runner.py
<class 'unittest.runner.TextTestRunner'> inherits from builtins.object
MRO: unittest.runner.TextTestRunner, builtins.object
error: weakref.KeyedRef is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 66
<TypeInfo weakref.KeyedRef> inherits from _weakref.ReferenceType
MRO: weakref.KeyedRef, _weakref.ReferenceType, builtins.object
Runtime: at line 311 in file /Users/shantanu/.pyenv/versions/3.8.2/lib/python3.8/weakref.py
<class 'weakref.KeyedRef'> inherits from builtins.weakref
MRO: weakref.KeyedRef, builtins.weakref, builtins.object
error: weakref.WeakMethod is inconsistent, base classes and MRO differ. INHERITANCE
Stub: at line 29
<TypeInfo weakref.WeakMethod> inherits from _weakref.ReferenceType
MRO: weakref.WeakMethod, _weakref.ReferenceType, builtins.object
Runtime: at line 36 in file /Users/shantanu/.pyenv/versions/3.8.2/lib/python3.8/weakref.py
<class 'weakref.WeakMethod'> inherits from builtins.weakref
MRO: weakref.WeakMethod, builtins.weakref, builtins.object
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Chạy python3.8 -m mypy.stubtest với --custom-typeshed-dir và --check-typeshed để tái hiện các điểm không khớp về kế thừa và MRO đã nêu. Bắt đầu với một module bị ảnh hưởng, chẳng hạn như asyncio, email, io hoặc socketserver, và so sánh các khai báo stub của module đó với đầu ra runtime được hiển thị. Hoàn tất khi các stub đã chọn không còn báo cáo các lớp cơ sở và MRO không nhất quán.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- python
- Lĩnh vực
- tooling
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100