Hi Huji,

Thanks for your message, it's very thoughtful and raises many valid points. The three year limit for deprecation should be trivial to enforce using git hooks and I can certainly help put it in place.

Now for the Python support. I totally support setting up checks and tests, although I don't consider them critical. If incompatible code does pass through review (it has happened before during GSOC) I feel confident the community will catch that in a few days or weeks. If we can have automation, all the better.

Also, I don't have any bias against a single nimerical limit myself. The algorithm I proposed was based on the issues raised in the latest deprecation discussion ( https://phabricator.wikimedia.org/T286867 ). If all these can be handled in a single limit, then that is clearly preferable and I support it. Note that the limit might well be larger than 7 years in that case.


Pe sâmbătă, 13 noiembrie 2021, Huji Lee <huji.huji@gmail.com> a scris:
> Hi Strainu,
> Thanks for bringing this up. And sorry to hear that many have had negative experiences with recent removals of deprecated code (though I had nothing to do with it).
> The Pywikibot project is barely maintained; a small community of interested folks are pushing it forward, and most code gets merged without review. I don't think we can claim, in good conscience, that there are folks who still keep a full architectural view of all elements of this project (as is the case with MediaWiki and many other tools we use daily).
> The point is: if the framework is too difficult to execute, it won't happen. So, although I like your proposed framework, I find it unrealistic to happen. It would assume someone is pulling data on Python version usage, and they would be involved in code review in such a way to ensure that code incompatible with legacy Python versions is not introduced too soon.
> I would encourage us to come up with a framework that is easier to maintain, and mostly automatable. Maybe we should just use the "7 year" rule, make sure that we have a CI pipeline that tries to build Pywikibot for all Python version that are currently within that 7 years, and at the top of the CI pipelines' code we have a comment that educates the users who may decide to edit it when the 7 year period ends for each existing version of Python. This way, incompatible changes would just fail on CI, and the enforcement of rules is quite simple, and breaking them by accident (such as by someone unknowingly modifying the CI pipeline) is less likely. This was just an idea, and may not be the right way, but I hope it shows what I mean by simplifying matters.
> Similarly, maybe we should find a way to create a CI pipeline that would check for "@deprecated" methods, and cross-checks it with a reference JSON file in which each deprecated function is listed along with its deprecation date. If someone tries to remove the function before that date + 3 months, the CI would fail. If someone tries to add "@deprecated" without updating the JSON file, the CI would fail. This way, we have one single source of truth about when things were marked as deprecated (the JSON file) and an easy mechanism to track when deprecated methods are getting removed. Again, just a raw idea.
> On Sat, Nov 13, 2021 at 7:13 AM Strainu <strainu10@gmail.com> wrote:
>> Hi folks,
>> I'd like to bring this thread back to life since in the months passed
>> *a lot* of deprecated code has been removed, some of which was quite
>> "recent". I totally understand that projects move forward, and so does
>> Python, I totally understand the developer's whish to use new language
>> features and I don't believe we should keep deprecated code for
>> decades, as it often happens in wikis. However, given that the vast
>> majority of Pywikibot users are busy volunteers and that many projects
>> depend on (mostly unsupervised) pywikibot code for critical
>> maintenance work, I believe we need some kind of pedictibility on
>> deprecation.
>> As a user, I would like to understand:
>> 1. when and how can a function become deprecated
>> 2. when and how can a parameter become deprecated
>> 3. how long will I still be able to use a deprecated function or parameter
>> 4. what Python versions will Pywikibot support.
>> For 3, I propose to maintain a compatibility for *at least* 3 years.
>> This roughly matches the Debian lifecycle, as the longest-maintained
>> non-LTS release of major Linux distributions.
>> For 4, I propose to support a Python version (e.g. 3.5) untill all of
>> the following are true (that is, the longest period between them):
>>  - two years after official support has ended (e.g. 7 years after launch) AND
>>  - one year after Toolforge moved to a newer Python version. AND
>>  - the percentage of users of a version goes under 5%
>> This should allow both Toolforge and independent users ample time to
>> update their code without surprises, even when using LTS releases.
>> What do you think? I would love to see feedback from both developers
>> and users on these questions and possible answers. Even if you don't
>> agree with these proposals, please make your own, so that we can
>> hopefully agree on some rules - any deadlines would be better than
>> none.
>> Regards,
>>    Strainu
>> În vin., 30 apr. 2021 la 00:33, Kunal Mehta <legoktm@debian.org> a scris:
>> >
>> > Hi Damian,
>> >
>> > On 4/21/21 2:32 PM, Damian Johnson wrote:
>> > > What is pywikibot's policy regarding code deprecation? Can we remove
>> > > it after a set duration and, if so, what is it?
>> >
>> > I'm not aware of Pywikibot having such a policy, but I think it would be
>> > a good idea to have one. MediaWiki has a stable interface policy[1]
>> > which defines what parts are stable to build on top of and which are
>> > considered internal and then a process on how to deprecate and make
>> > changes to what's supposed to be stable.
>> >
>> > One of the things I worked on for MediaWiki's deprecation process is
>> > developing codesearch[2] which makes it pretty straightforward for
>> > developers to see what methods/functions are practically being used and
>> > see what use cases are. I think something like that would be valuable
>> > for Pywikibot as well, but code for most bots/scripts is really all over
>> > the place. Something like Toolhub[3] would help with this too.
>> >
>> > [1] https://www.mediawiki.org/wiki/Stable_interface_policy
>> > [2] https://codesearch.wmcloud.org/search/
>> > [3] https://meta.wikimedia.org/wiki/Toolhub
>> >
>> > HTH,
>> > -- Legoktm
>> >
>> > _______________________________________________
>> > pywikibot mailing list
>> > pywikibot@lists.wikimedia.org
>> > https://lists.wikimedia.org/mailman/listinfo/pywikibot
>> _______________________________________________
>> pywikibot mailing list -- pywikibot@lists.wikimedia.org
>> To unsubscribe send an email to pywikibot-leave@lists.wikimedia.org