[libvirt] [python] WIP-FYI: mypy annotations for libvirt-python

Hello, Maybe you already have heads about mypy <http://mypy-lang.org/>, which "is an experimental optional static type checker for Python that aims to combine the benefits of dynamic (or "duck") typing and static typing". I started to write a manual annotation file for the Python binding of libvirt. I've attached my current version, so others can benefit from it, too. It is far from complete, but it already helped my to find some errors in my code. (My latest version is also available at <https://github.com/univention/typeshed/blob/libvirt/third_party/2and3/libvirt.pyi>) Long-term it probably would be better to teach the Python binding "generator.py" to add the type information (PEP 484 <https://www.python.org/dev/peps/pep-0484/>) directly into the generated "libvirt.py" file, but that's for another day. If someone else is interested in helping with that, please feel free to get in contact. Philipp -- Philipp Hahn Open Source Software Engineer Univention GmbH be open. Mary-Somerville-Str. 1 D-28359 Bremen Tel.: +49 421 22232-0 Fax : +49 421 22232-99 hahn@univention.de http://www.univention.de/ Geschäftsführer: Peter H. Ganten HRB 20755 Amtsgericht Bremen Steuer-Nr.: 71-597-02876

Hello, Am 08.11.18 um 11:11 schrieb Philipp Hahn:
Maybe you already have heard about mypy <http://mypy-lang.org/>, which "is an experimental optional static type checker for Python that aims to combine the benefits of dynamic (or "duck") typing and static typing".
I started to write a manual annotation file for the Python binding of libvirt. I've attached my current version, so others can benefit from it, too. It is far from complete, but it already helped my to find some errors in my code. (My latest version is also available at <https://github.com/univention/typeshed/blob/libvirt/third_party/2and3/libvirt.pyi>)
Long-term it probably would be better to teach the Python binding "generator.py" to add the type information (PEP 484 <https://www.python.org/dev/peps/pep-0484/>) directly into the generated "libvirt.py" file, but that's for another day. If someone else is interested in helping with that, please feel free to get in contact.
This project got postponed for a long time, but I have a first working version in my git branch at <https://github.com/univention/libvirt-python/tree/typing>. It is not perfect and ready for merging yet, but generated a first working version. Here's an example:
def qemuMonitorEventRegister(conn, # type: virConnect dom, # type: virDomain event, # type: str cb, # type: Callable[[virConnect, virDomain, str, int, int, str, _T], None] opaque, # type: _T flags=0 # type: int ): # type: (...) -> int
1. There are 2 mypy syntax's for doing the typing annotation: This first one adds special comments and also works with Python 2:
def function(name, age): # type: (str, int) -> bool
The second version only works since python 3.5:
def function(name: str, age: int) -> bool:
As Python 2 is EOL, "generator.py" already uses Python 3 and Python 2 support was already removed, what is the minimum version of Python 3 required by libvirt-python? That is, should I use the old "comment" variant or directly the new "inline" variant? 2. Actually the branch contains many cleanup patches and even some error fixes, which could go into master right now. How can I best accomplish that? Build a 2nd branch with only those fixes and send the patch queue to the mailing list? Thank you and stay healthy Philipp

On Mon, Apr 20, 2020 at 07:21:10AM +0200, Philipp Hahn wrote:
Hello,
Am 08.11.18 um 11:11 schrieb Philipp Hahn:
Maybe you already have heard about mypy <http://mypy-lang.org/>, which "is an experimental optional static type checker for Python that aims to combine the benefits of dynamic (or "duck") typing and static typing".
I started to write a manual annotation file for the Python binding of libvirt. I've attached my current version, so others can benefit from it, too. It is far from complete, but it already helped my to find some errors in my code. (My latest version is also available at <https://github.com/univention/typeshed/blob/libvirt/third_party/2and3/libvirt.pyi>)
Long-term it probably would be better to teach the Python binding "generator.py" to add the type information (PEP 484 <https://www.python.org/dev/peps/pep-0484/>) directly into the generated "libvirt.py" file, but that's for another day. If someone else is interested in helping with that, please feel free to get in contact.
This project got postponed for a long time, but I have a first working version in my git branch at <https://github.com/univention/libvirt-python/tree/typing>. It is not perfect and ready for merging yet, but generated a first working version. Here's an example:
def qemuMonitorEventRegister(conn, # type: virConnect dom, # type: virDomain event, # type: str cb, # type: Callable[[virConnect, virDomain, str, int, int, str, _T], None] opaque, # type: _T flags=0 # type: int ): # type: (...) -> int
1. There are 2 mypy syntax's for doing the typing annotation: This first one adds special comments and also works with Python 2:
def function(name, age): # type: (str, int) -> bool
The second version only works since python 3.5:
def function(name: str, age: int) -> bool:
As Python 2 is EOL, "generator.py" already uses Python 3 and Python 2 support was already removed, what is the minimum version of Python 3 required by libvirt-python? That is, should I use the old "comment" variant or directly the new "inline" variant?
We've only documented >= 3.0, but given our supported build platforms we can make that >= 3.5, so I sent a patch todo that.
2. Actually the branch contains many cleanup patches and even some error fixes, which could go into master right now. How can I best accomplish that? Build a 2nd branch with only those fixes and send the patch queue to the mailing list?
Yes, if you've found & fixed bugs, I'd strongly recommend sending those fixes as a standalone patch series as soon as you like. Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
participants (2)
-
Daniel P. Berrangé
-
Philipp Hahn