I am working on a project that consumes the rpm python interface (https://pagure.io/depict for the curious). I would like to typecheck my project, so I have created some stubs for that purpose. Are you interested in having the rpm stubs?
Note that, with this commit applied, mypy has several complaints: ``` rpm/_rpm.pyi:583: error: Invalid signature "def [AnyStr in (builtins.str, builtins.bytes)] (rpm._rpm.hdr, Union[rpm._rpm.rpmTag, builtins.bytes]) -> Union[builtins.int, builtins.str*]" for "__getattr__" rpm/_rpm.pyi:583: error: Invalid signature "def [AnyStr in (builtins.str, builtins.bytes)] (rpm._rpm.hdr, Union[rpm._rpm.rpmTag, builtins.bytes]) -> Union[builtins.int, builtins.bytes*]" for "__getattr__" rpm/transaction.py:74: error: Signature of "addInstall" incompatible with supertype "ts" rpm/transaction.py:87: error: Return type "None" of "addReinstall" incompatible with return type "bool" in supertype "ts" rpm/transaction.py:93: error: Return type "None" of "addErase" incompatible with return type "bool" in supertype "ts" rpm/transaction.py:121: error: Signature of "run" incompatible with supertype "ts" rpm/transaction.py:137: error: Signature of "check" incompatible with supertype "ts" rpm/transaction.py:179: error: Return type "None" of "hdrCheck" incompatible with return type "Tuple[rpmRC, Optional[str]]" in supertype "ts" rpm/transaction.py:189: error: Return type "hdr" of "hdrFromFdno" incompatible with return type "Tuple[rpmRC, hdr]" in supertype "ts" rpm/__init__.py:53: error: Cannot assign to a type Found 10 errors in 3 files (checked 3 source files) ``` The first two errors arise from mypy having magic knowledge of what a `__getattr__` function's signature should look like. I think the only way to eliminate those errors is to remove the `__getattr__` declarations and require any code that actually takes advantage of the non-str interface to work around mypy. The remaining 8 errors can be fixed, but would require backwards-incompatible changes to rpm's python interface, mostly of the form "don't have a method in a subclass with the same name but a different signature as a function in a superclass". I had to comment out the `file.class` attribute, as mypy objects to an attribute named "class". Since `archive.hascontent` and `keyring.addKey` both return one of two integers (one zero and one nonzero), I wonder if it might not be better to make those functions return a boolean, although that would also be a backwards-incompatible change. In `TransactionSet.check`, I made a change to check whether `p.altNEVR` is `None`. I could not rule out that possibility by reading through the sources. Let me know if this interests you. I am willing to keep working on it until you are satisfied. You can view, comment on, or merge this pull request online at: https://github.com/rpm-software-management/rpm/pull/1615 -- Commit Summary -- * Add type hints to the Python interface -- File Changes -- M python/Makefile.am (4) M python/rpm/__init__.py (29) A python/rpm/_rpm.pyi (863) M python/rpm/transaction.py (75) -- Patch Links -- https://github.com/rpm-software-management/rpm/pull/1615.patch https://github.com/rpm-software-management/rpm/pull/1615.diff -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/rpm-software-management/rpm/pull/1615
_______________________________________________ Rpm-maint mailing list Rpm-maint@lists.rpm.org http://lists.rpm.org/mailman/listinfo/rpm-maint