Hello, I've just updated my Pywikibot version (jump from 3.0.20180922 to 3.0.20200111) and one of my script is broken.
In a nutshell, I'm checking pages with the extended confirmed protection to add or remove a specific template. And sometimes, this template is used on protected pages.
Results with the out-of-date version:
tools.lebot@tools-sgebastion-07:~$ python3 pywikibotold/core/pwb.py pywikibot/core/scripts/userscripts/semiprotectionextended.py ERROR: Seuls les administrateurs peuvent modifer la page : Doc Gynéco ERROR: Seuls les administrateurs peuvent modifer la page : Falun Gong ERROR: Seuls les administrateurs peuvent modifer la page : La Cocarde étudiante
Three articles can't be edited by the bot because the bot is not an administrator: everything is okay. I'm checking this case with the method canBeEdited() and skip the page if False.
Results with the lastest version and the same script:
tools.lebot@tools-sgebastion-07:~$ python3 pywikibot/core/pwb.py -v pywikibot/core/scripts/userscripts/semiprotectionextended.py Python 3.5.3 (default, Sep 27 2018, 17:25:39) [GCC 6.3.0 20170516] Found 1 wikipedia:fr processes running, including this one. WARNING: /mnt/nfs/labstore-secondary-tools-project/lebot/pywikibot/core/pywikibot/site.py:3155: DeprecationWarning: sysop argument of pywikibot.login.LoginManager.__init__ is deprecated. api.LoginManager(site=self, sysop=sysop_protected) Logging in to wikipedia:fr as Tictacbot@Tictacbot Should be logged in now Sleeping for 8.2 seconds, 2020-02-07 20:33:59 WARNING: API error protectedpage: This page has been protected to prevent editing or other actions. API Error: query= [...] response= {'error': {'info': 'This page has been protected to prevent editing or other actions.', 'code': 'protectedpage', 'help': 'See https://fr.wikipedia.org/w/api.php for API usage. Subscribe to the mediawiki-api-announce mailing list at <https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce> for notice of API deprecations and breaking changes.'}, 'servedby': 'mw1342'} Error saving page [[Doc Gynéco]] (Page [[fr:Doc Gynéco]] is locked.) Traceback (most recent call last): File "/mnt/nfs/labstore-secondary-tools-project/lebot/pywikibot/core/pywikibot/site.py", line 5352, in editpage result = req.submit() File "/mnt/nfs/labstore-secondary-tools-project/lebot/pywikibot/core/pywikibot/data/api.py", line 2080, in submit raise APIError(**result['error']) pywikibot.data.api.APIError: protectedpage: This page has been protected to prevent editing or other actions. [help:See https://fr.wikipedia.org/w/api.php for API usage. Subscribe to the mediawiki-api-announce mailing list at <https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce> for notice of API deprecations and breaking changes.] During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/mnt/nfs/labstore-secondary-tools-project/lebot/pywikibot/core/pywikibot/page.py", line 112, in handle func(self, *args, **kwargs) File "/mnt/nfs/labstore-secondary-tools-project/lebot/pywikibot/core/pywikibot/page.py", line 1304, in _save watch=watch, bot=botflag, **kwargs) File "/mnt/nfs/labstore-secondary-tools-project/lebot/pywikibot/core/pywikibot/site.py", line 1319, in callee return fn(self, *args, **kwargs) File "/mnt/nfs/labstore-secondary-tools-project/lebot/pywikibot/core/pywikibot/site.py", line 5371, in editpage raise self._ep_errors[err.code](page) pywikibot.exceptions.LockedPage: Page [[fr:Doc Gynéco]] is locked.Traceback (most recent call last): File "/mnt/nfs/labstore-secondary-tools-project/lebot/pywikibot/core/pywikibot/site.py", line 5352, in editpage result = req.submit() File "/mnt/nfs/labstore-secondary-tools-project/lebot/pywikibot/core/pywikibot/data/api.py", line 2080, in submit raise APIError(**result['error']) pywikibot.data.api.APIError: protectedpage: This page has been protected to prevent editing or other actions. [help:See https://fr.wikipedia.org/w/api.php for API usage. Subscribe to the mediawiki-api-announce mailing list at <https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce> for notice of API deprecations and breaking changes.] During handling of the above exception, another exception occurred: Traceback (most recent call last): File "pywikibot/core/pwb.py", line 325, in <module> if not main(): File "pywikibot/core/pwb.py", line 320, in main run_python_file(filename, [filename] + args, argvu, file_package) File "pywikibot/core/pwb.py", line 101, in run_python_file main_mod.__dict__) File "pywikibot/core/scripts/userscripts/semiprotectionextended.py", line 58, in <module> retraitModele() File "pywikibot/core/scripts/userscripts/semiprotectionextended.py", line 53, in retraitModele page.save(summary="[[wp:bot|Robot]] : retrait de l'icône de semi-protection étendue", minor=True) File "/mnt/nfs/labstore-secondary-tools-project/lebot/pywikibot/core/pywikibot/tools/__init__.py", line 1744, in wrapper return obj(*__args, **__kw) File "/mnt/nfs/labstore-secondary-tools-project/lebot/pywikibot/core/pywikibot/tools/__init__.py", line 1744, in wrapper return obj(*__args, **__kw) File "/mnt/nfs/labstore-secondary-tools-project/lebot/pywikibot/core/pywikibot/page.py", line 1293, in save cc=apply_cosmetic_changes, quiet=quiet, **kwargs) File "/mnt/nfs/labstore-secondary-tools-project/lebot/pywikibot/core/pywikibot/page.py", line 133, in wrapper handle(func, self, *args, **kwargs) File "/mnt/nfs/labstore-secondary-tools-project/lebot/pywikibot/core/pywikibot/page.py", line 124, in handle raise err File "/mnt/nfs/labstore-secondary-tools-project/lebot/pywikibot/core/pywikibot/page.py", line 112, in handle func(self, *args, **kwargs) File "/mnt/nfs/labstore-secondary-tools-project/lebot/pywikibot/core/pywikibot/page.py", line 1304, in _save watch=watch, bot=botflag, **kwargs) File "/mnt/nfs/labstore-secondary-tools-project/lebot/pywikibot/core/pywikibot/site.py", line 1319, in callee return fn(self, *args, **kwargs) File "/mnt/nfs/labstore-secondary-tools-project/lebot/pywikibot/core/pywikibot/site.py", line 5371, in editpage raise self._ep_errors[err.code](page) pywikibot.exceptions.LockedPage: Page [[fr:Doc Gynéco]] is locked. Dropped throttle(s). Closing network session. CRITICAL: Exiting due to uncaught exception <class 'pywikibot.exceptions.LockedPage'> Network session closed.
It seems that the method canBeEdited() no longer performs the check correctly, or at least that its behaviour is no longer identical. I believe the problem comes from this change, but I'm not sure and I don't know Pywikibot source code enough to do some deep digging. Maybe I'm the one who missed a breaking change.