(py3.7-typing-protocol) jbook:~/scratch> mypy --version
mypy 0.790+dev.7273e9ab1664b59a74d9bd1d2361bbeb9864b7ab
(py3.7-typing-protocol) jbook:~/scratch> mypy .
main.py:11: error: Type argument "pymysql.connections.Connection" of "DatabaseAdapter" must be a subtype of "pep249.Connection"
Found 1 error in 1 file (checked 2 source files)
(py3.7-typing-protocol) jbook:~/scratch> python
Python 3.7.9 (default, Sep 6 2020, 13:20:25)
[Clang 11.0.3 (clang-1103.0.32.62)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pep249
>>> import pymysql
>>> pymysql.connections.Connection
<class 'pymysql.connections.Connection'>
>>> issubclass(pymysql.connections.Connection, pep249.Connection)
True
Last active
October 8, 2020 21:27
-
-
Save jmehnle/37ece52f9dbbec439ed8d0c11db47f41 to your computer and use it in GitHub Desktop.
Python typing: mypy fails to match generic protocol class
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# main.py | |
from typing import Generic, TypeVar | |
import pep249 | |
import pymysql | |
ConnectionT = TypeVar("ConnectionT", bound=pep249.Connection) | |
class DatabaseAdapter(Generic[ConnectionT]): ... | |
class MySQLAdapter(DatabaseAdapter[pymysql.connections.Connection]): ... |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# pep249.py | |
from typing import Any | |
from typing_extensions import Protocol, runtime_checkable | |
@runtime_checkable | |
class Connection(Protocol): | |
def close(self) -> None: ... | |
def commit(self) -> None: ... | |
def rollback(self) -> None: ... | |
def cursor(self, *__args: Any, **__kwargs: Any) -> Any: ... |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pymysql |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment