<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Apr 21, 2015 at 12:33 AM, M.-A. Lemburg <span dir="ltr"><<a href="mailto:mal@egenix.com" target="_blank">mal@egenix.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On <a href="tel:21.04.2015%2005" value="+12104201505" target="_blank">21.04.2015 05</a>:37, Guido van Rossum wrote:<br>
> On Mon, Apr 20, 2015 at 4:41 PM, Jack Diederich <<a href="mailto:jackdied@gmail.com" target="_blank">jackdied@gmail.com</a>> wrote:<br>
>> * Uploading stubs for other people's code is a terrible idea. Who do I<br>
>> contact when I update the interface to my library? The random Joe who<br>
>> "helped" by uploading annotations three months ago and then quit the<br>
>> internet? I don't even want to think about people maliciously adding stubs<br>
>> to PyPI.<br>
>><br>
><br>
> We're certainly not planning to let arbitrary people upload stubs for<br>
> arbitrary code to PyPI that will automatically be used by the type<br>
> checkers. (We can't stop people from publishing their stubs, just as you<br>
> can't stop people from writing blog posts or stackoverflow answers with<br>
> examples for your library.)<br>
><br>
> The actual plan is to have a common repository of stubs (a prototype exists<br>
> at <a href="https://github.com/JukkaL/typeshed" target="_blank">https://github.com/JukkaL/typeshed</a>) but we also plan some kind of<br>
> submission review. I've proposed that when submitting stubs for a package<br>
> you don't own, the typeshed owners ask the package owner what their<br>
> position is, and we expect the answers to fall on the following spectrum:<br>
><br>
> - I don't want stubs uploaded for my package<br>
> - I'll write the stubs myself<br>
> - I want to review all stubs that are uploaded for my package before they<br>
> are accepted<br>
> - Please go ahead and add stubs for my package and let me know when they're<br>
> ready<br>
> - Go ahead, I trust you<br>
><br>
> This seems a reasonable due diligence policy that avoids the scenarios<br>
> you're worried about. (Of course if you refuse stubs a black market for<br>
> stubs might spring into existence. That sounds kind of exciting... :-)<br>
<br>
Hmm, that's the first time I've heard about this. I agree with<br>
Jack that it's a terrible idea to allow this for 3rd party<br>
packages.<br>
<br>
If people want to contribute stubs, they should contribute them<br>
to the package in the usual ways, not in a side channel. The important<br>
part missing in the above setup is maintenance and to some extent<br>
an external change of the API definitions.<br>
<br>
Both require active participation in the package project,<br>
not the separated setup proposed above, to be effective and<br>
actually work out in the long run.<br>
<br>
For the stdlib, typeshed looks like a nice idea to spread the<br>
workload.<br clear="all"></blockquote><div><br></div><div>I hesitate to speak for others, but IIUC the reason why typeshed was started is that companies like PyCharm and Google (and maybe others) are *already* creating their own stubs for 3rd party packages, because they have a need to type-check code that *uses* 3rd party packages. Their use cases are otherwise quite different (the user code type-checked by PyCharm is that of  PyCharm users, and the code type-checked by Google is their own proprietary code) but they both find themselves needing stubs for commonly used 3rd party packages. mypy finds itself in a similar position.<br><br></div><div>Think of it this way. Suppose you wrote an app that downloaded some files from the web using the popular Requests package. Now suppose you wanted to run mypy over your app. You're willing to do the work of adding signatures to your own app, and presumably there are stubs for those parts of the stdlib that you're using, but without stubs for Requests, mypy won't do a very good job type-checking your calls into Requests. It's not rocket science to come up with stubs for Requests (there aren't that many classes and methods) but the Requests package is in maintenance mode, and while they respond quickly to security issues they might take their time to release a new version that includes your stub files, and until there are a lot of people clamoring for stubs for Requests, they might not care at all.<br><br></div><div>So what does Requests  have to lose if, instead of including the stubs in Requests, they let the typeshed people distribute stubs for Requests? Presumably having the stubs in typeshed means that PyCharm and mypy (and the 50 other type-checkers that are being written right now :-) can give better diagnostics for code using Requests, and once in a while this may save a user of Requests from doing something dumb and blaming Requests. The only downside would be if something was missing in the stubs and users would get incorrect error messages from their favorite type checker. But it's a long stretch to see this rain down on Requests' reputation -- more likely the type checker will be blamed, so type checker authors/distributors will be vigilant before distributing stubs.<br><br></div><div>OTOH if you prefer to make and distribute your own stubs, type checkers will use those, and there won't be a need to include stubs in typeshed when a package already provides stubs.<br><br></div><div>And if you really don't want anything to do with stubs for your package, just tell the typeshed owners and your wish will be respected.<br></div></div><br>-- <br><div>--Guido van Rossum (<a href="http://python.org/~guido" target="_blank">python.org/~guido</a>)</div>
</div></div>