Hello, as announced a long time ago with <https://www.redhat.com/archives/libvir-list/2018-November/msg00291.html> and recently refreshed with <https://www.redhat.com/archives/libvir-list/2020-April/msg00892.html> I'm working on adding PEP 484 type hints <https://www.python.org/dev/peps/pep-0484/> to the Python binding of libvirt. I have finished this work now and have a working version at <https://github.com/univention/libvirt-python/tree/typing> which consists of 90 patches in total as I has to go over evry file to understand and fix all things. As that patch bomb is quiet large I'm going to submit them in smaller chunks to make them more reviewable. Today I start with the first round consisting of "real" bugs in the current code: Philipp Hahn (5): generator: Fix undefined variables file generator: Fix string formatting generator: Fix domainSnapshot.listAllChildren() qemu-api: Fix return type libvirtaio: Fix return types of callback generator.py | 6 +++--- libvirt-override-virDomainSnapshot.py | 2 +- libvirt-qemu-override-api.xml | 4 ++-- libvirtaio.py | 18 ++++++++++++------ 4 files changed, 18 insertions(+), 12 deletions(-) After that I plan to continue with: 2. fix examples/ to work with Python 3 3. Cleanup code tree-wide 4. Cleanup generator.py 5. Cleanup sanitytest.py 6. Teach generator.py to add PEP 484 annotation 7. Assorted cleanups (the order and chunking is not final yet) > examples/domipaddrs: Convert to python 3 print() > examples/domipaddrs: Fix Python 2 dict.iteritems() > examples/*: Remove stray semicolon > example/dhcp*: Fix None comparison > examples/event-test: Remove unneeded global statement > examples/event-test: Work with old version of python-libvirt > examples/event-test: Use atexit for Python 3 > examples/esxlist: Fix Python 2 raw_input() > examples/consolecallback: Add var to save callback > examples/consolecallback: Fix assorted errors > examples: Add missing return values > libvirtaio: Drop object(*args, **kwargs) > libvirtaio: Fix return type > libvirtaio: assert callback type > Do not use bare except > Cleanup imports > Fix white space > Remove legacy libvirtError arguments > stream: Fix exception traceback handling > override: Simplify exception handling > generator: Simplify exception handling > generator: Change type of quiet to bool > generator: Remove unneeded line continuation > generator: Convert to 'not in' and 'is not' > generator: Remove dead variable assignments > generator: Remove skipped_modules > generator: Remove useless sort key > generator: Fix return type on failure > generator: Merge now identical if-elif-else cases > generator: Use more string formatting > generator: Simplify string concatentaion > generator: Use enumerate() > generator: Use increment assignment > generator: Use string concatenation > generator: Remove global declarations > generator: Initialize function_classes directly > generator: Check contained in hash > generator: Use dict.item() to walk keys and values > generator: Walk only the values > generator: Directly get dict length > generator: Just walk the dict > generator: Use splitlines() > generator: Open file with context manager > generator: Refactor parser creation > generator: Remove unused SAX content handler methods > generator: Use SAX method names > generator: Use string formatting > generator: Convert in_function to boolean > generator: Simplify XML attribute fetching > generator: Initialize with empty strings > generator: Expand tuple to names in for loop > generator: Store arguments and return as tuple > generator: Fixed writing cached=None > generator: Simplify sorting > generator: Simplify loop break > generator: Simplify boolean condition > generator: Convert dict() to set() > generator: Converto to defaultdict() > generator: Add PEP 484 type annotations > override: Add manual PEP 484 type annotations > sanitytest: Skip type annotations > stream: Simplify boolean condition > domain: Fix None comparison > stream: no type change > stream: Convert type() to isinstance() > stream: Return None from callback > connect: Just clear all event handlers > override: no type change > sanitytest: Do not re-declare set > sanitytest: Drop else:pass > sanitytest: Drop Python 2 compatibility > sanitytest: Add PEP 484 type annotations > sanitytest: Use 3-tuple for basicklassmap > sanitytest: Use 3-tuple for finalklassmap > sanitytest: Use set for tracking used functions > sanitytest: Use str.startswith() instead of str[0] > generator: Generate PEP 484 type annotation > override: Catch type error > generator: Special handling for virStoragePool.listAllVolumes > generator: Merge code for __init__ genration > generator: Use empty string instead of None > generator: break lines in generated code > generator: Expand tuple to names in for loop > generator: Work around type change > generator: use pointer wrapper for all objects > examples: Add/fix PEP 484 type annotation -- 2.20.1