Typed Python interface stubs for editing Pythonista code on the desktop
I sometimes prefer working on larger Pythonista projects in my desktop IDE. However, imports of Pythonista iOS APIs look broken, autocomplete can't work, and static checking is useless. To solve these problems, I've started working a set of typed Python interface stubs. Please check it out and let me know problems and suggestions!
Very welcome initiative!
I may contribute a module or two that I'm comfortable with.
In the style guide, you state "no
Unionreturn annotations"; does that also imply "no
Optionalreturn annotations"? The Pythonista modules have some.
Uniongenerally indicates an anti-pattern because a method should be relied on to return a single type. That said, given that we don't control the underlying API it may be necessary at some point.
To answer your specific question, I definitely encourage using
Optionalwhere the method has documentation stating it might. For example, in the
remindersinterface there is
def get_calendar(calendar_id: str) -> Optional[Calendar]: ...since we're not guaranteed to find a given ID.
It would be great to get some help and I'm happy to collaborate on typing syntax. I just hesitate to write interfaces for APIs that I haven't personally used, seems like an easy way to get things wrong :)
(For background reading on Union issues see here: https://github.com/python/mypy/issues/1693 )
After some discussion with the author, pygenstub now supports generic module interface generation. (Unlike the more well known
stubgen, no C compilation required.)
This means that in StaSh we can run something like
python3 pygenstub.py -p appex -o out --genericto get a stub for
appex. It needs cleanup (like replacing all the
Anys and removing private things) but it's a great running start.
Okay, I'll try my luck at some parts of scene
Well, no luck :-(
pygenstubwill not install (
pip install) at my iPad with
File Not Found Error.
pipsuccessfully downloads the
pythonhosted.org, but on installing the wheel stops at an error
Version 1.2 (current version is 1.4) installs
thanks. works after