09 February 2026
Improvements
- Use URL to bot's wiki page in :ref:`user_agent_format<Account Settings>` due to Foundation UA Policy. (:phab:`T414173`, :phab:`T414201`)
- Show Pywikibot version in deprecation warnings for :mod:`config` variables.
- :ref:`config.pickle_protocol<Further Settings>` was updated from version 2 to 5. Older pickle files are still readable.
- Enhance :meth:`throttle.Throttle.waittime` for read requests. (:phab:`T415891`)
- :ref:`config.minthrottle<Settings to Avoid Server Overload>` may me a
float. (:phab:`T414170`, :phab:`T416145`) - Implement :meth:`Site.abuselog()<pywikibot.site._generators.GeneratorsMixin.abuselog>` site generator for :api:`AbuseLog` and :meth:`page.User.last_activity` method. (:phab:`T396297`, :phab:`T396298`)
- Use explicit utf-8 encoding with class:GraphSavingThread.graph.write <interwiki_graph.GraphSavingThread> (:phab:`T415891`)
- Optimize pickle file storage of :class:`WikiWho<page._toolforge.WikiWhoMixin>` with subdirectory structure (:phab:`T414087`)
- Make :class:`textlib.TimeStripper` more resilient for itwiki. (:phab:`T415880`)
- Add :class:`WikiWho<page._toolforge.WikiWhoMixin>` API support. (:phab:`T414071`)
- Never use None as key in WeakKeyDictionary within :class:`proofreadpage.TagAttrDesc`. Class-level access returns the descriptor itself. (:phab:`T413563`)
- text_a and text_b of :class:`diff.PatchManager` are positional-only parameters. by_letter and replace_invisible are keyword-only parameters.
- Optimize :func:`pagegenerators.SubCategoriesPageGenerator`
- Consider
retry_afterin delay calculation of :meth:`throttle.Throttle.get_delay`. (:phab:`T414354`) - Remove protocol swapping in :class:`data.api.Request`. (:phab:`T414369`)
- Use environment variables
PYWIKIBOT_USERNAMEorPWB_USERNAMEforUser-Agentusername if username isn't set in :mod:`user-config.py<config>` for a given site. (:phab:`T414201`) - Add support for beta site in :class:`families.meta_family.Family` (:phab:`T413060`)
- Add user agent to :class:`data.api.Request` error log (:phab:`T414170`)
- Increase performance of delegation for :class:`BaseSite<pywikibot.site._basesite.BaseSite>` methods to :class:`family.Family` methods (:phab:`T413398`)
- Use
queue.shutdown()for the async_manager queue - Use :class:`backports.RLock` instead of Queue to signal async_manager activity (:phab:`T147178`)
- Add :meth:`User.is_partial_blocked()<pywikibot.User.is_partial_blocked>` and methods :meth:`APISite.is_partial_blocked()<pywikibot.site._apisite.APISite.is_partial_blocked>` to detect partial blocks. (:phab:`T412613`)
- Add :meth:`get_block_info()<pywikibot.User.get_block_info>` method to :class:`pywikibot.User` class to retrieve detailed block information including block ID, reason, expiry, and restrictions (:phab:`T412613`)
- Java based GraalPy is supported but Pillow cannot be used (:phab:`T412739`)
- Free threading Python is supported with some restrictions. (:phab:`T408131`, :phab:`T412605`, :phab:`T412624`)
- i18n updates.
- Provide a security policy with Pywikibot. (:phab:`T410753`)
- Show a friendly install message with :mod:`pwb<pywikibot.scripts.wrapper>` wrapper when mandatory packages are missing (:phab:`T409662`).
- Update tools._unidata.__category_cf dict for :func:`tools.chars.contains_invisible` and :func:`tools.chars.replace_invisible` to unicode version 17.0.0.
- Update Docker files to Python 3.12. (:phab:`T408997`)
Bugfixes
- Remove invisible chars from :attr:`textlib.Section.heading`. (:phab:`T411307`)
- Do not raise :exc:`exceptions.UnknownExtensionError` within :meth:`APISite.page_from_repository()<pywikibot.site._apisite.APISite.page_from_repository>` on non-Wikibase sites (:phab:`T414068`)
- Handle retry-after value gracefully if it is a float instead an int (:phab:`T414197`)
- Handle limit value gracefully if it is an int instead a str (:phab:`T414168`)
- Handle lockmanager-fail-conflict API error in :meth:`data.api.Request.submit` as retryable (:phab:`T396984`)
- Prevent login loop in :mod:`data.superset` with unsupported auth methods (:phab:`T408287`)
Code cleanups
{httplib2}user_agent_format variable is no longer supported (:phab:`T98439`)- The undocumented
page_put_queue_busywas removed without deprecation period. - Dysfunctional :meth:`APISite.alllinks() <pywikibot.site._generators.GeneratorsMixin.alllinks>` was removed. (:phab:`T359427`, :phab:`T407708`)
- The inheritance of the :exc:`exceptions.NoSiteLinkError` exception from :exc:`exceptions.NoPageError` was removed
- The dropdelay and releasepid attributes of the :class:`throttle.Throttle` class was removed in favour of the expiry class attribute.
- The regex attributes
ptimeR,ptimeznR,pyearR,pmonthR, andpdayRof the :class:`textlib.TimeStripper` class was removed in favour of thepatternsattribute, which is a :class:`textlib.TimeStripperPatterns` object. - The
groupsattribute of the :class:`textlib.TimeStripper` was removed in favour of the :data:`textlib.TIMEGROUPS` constant. - The
addOnlyparameter in the :func:`textlib.replaceLanguageLinks` and :func:`textlib.replaceCategoryLinks` was dropped in favour ofadd_only. load_tokensmethod of :class:`TokenWallet<pywikibot.site._tokenwallet.TokenWallet>` was removed;clearmethod can be used instead.- No longer support legacy API tokens of MediaWiki 1.23 and older. (:phab:`270380`, :phab:`306637`)
use_hard_category_redirectSite and Family properties were removed. (:phab:`T348953`)- The all parameter of :meth:`APISite.get_tokens()<pywikibot.site._apisite.APISite.get_tokens>`` was removed; use an empty string instead.
APISite.validate_tokens()method was removed.APISite.messages()method was removed in favour of the :attr:`userinfo['messages']<pywikibot.site._apisite.APISite.userinfo>` attributePage.editTime()method was removed; :attr:`Page.latest_revision.timestamp <page.BasePage.latest_revision>` attribute can be used insteaddata.api.QueryGenerator.continuekeywas be removed in favour of :attr:`data.api.QueryGenerator.modules`- The
Timestamp.clone()method was removed in favour of theTimestamp.replace()method - The
tools.itertools.itergroupfunction was removed in favour of the :func:`backports.batched` or :pylib:`itertools.batched<itertools#itertools.batched>` function. - The
get_login_token()method of :class:`login.ClientLoginManager` was removed and can be replaces bylogin.LoginManager.site.tokens['login'] - The :meth:`family.Family.maximum_GET_length` method was removed in favour of the :ref:`config.maximum_GET_length<Account Settings>` configuration option (:phab:`T325957`)
- The
exceptions.Server414Errorexception was replaced by :exc:`exceptions.Client414Error` exception - The modules_only_mode parameter in the :class:`data.api.ParamInfo` class, its
paraminfo_keys class attribute, and its
preloaded_modulesproperty was removed - The
data.api.LoginManager()constructor was removed in favour of the :class:`login.ClientLoginManager` class - The normalize parameter was removed from the :meth:`pywikibot.WbTime.toTimestr` and :meth:`pywikibot.WbTime.toWikibase` methods in Pywikibot 8.2. Since Pywikibot 11, passing normalize as an argument raises an error, because support for legacy arguments via was removed.
- Several typing types were removed from :mod:`backports`.
- The
cachedecorator was removed from :mod:`backports`. The :pylib:`@functools.cache() <functools#functools.cache>` can be used instead. (:phab:`T401802`) - The functions
removeprefixandremovesuffixwere removed from :mod:`backports`. The :pylib:`stdlib methods<stdtypes.html#str.removeprefix>` can be used instead. (:phab:`T401802`)
Other breaking changes
- Set :ref:`minthrottle<Settings to Avoid Server Overload>` to 0.1 due to Wikimedia Bot Policy. (:phab:`T414170`)
- Clean up :ref:`user_agent_format<Account Settings>` string. Replace the first occurrence of "family", "code", or "lang" with "site". The "lang" variable never worked properly. All of these can be replaced with "site", which is recognized by Wikimedia traffic management. Also replace "script_product" by "script" and "version" by "revision". Replace {script_product} with {username}/{script} in user_agent_format. (:phab:`T414201`)
- Use global
-codeinstead of-langto determine a site. The old-langoption is kept for backward compatibility. - Protocol swapping in :class:`data.api.Request` was removed. Family files should provide the correct protocol. (:phab:`T414369`)
- Package requirements were updated (
beautifulsoup4,fake-useragent,mwoauth,mwparserfromhell,packaging,Pillow,pydot,PyMySQL,python-stdnum,requests,requests-sse,wikitextparser) - Python 3.8 support was dropped. (:phab:`T401802`)
- Remove predefined
yu-tldfix in :mod:`fixes`. (:phab:`T402088`)
31 January 2026
- Add support for pplwiki. (:phab:`T415048`)
28 January 2026
- Add support for kajwiki. (:phab:`T415040`)
13 December 2025
- Fix extracting password line (:phab:`T412191`)
10 December 2025
- Fix extracting password line (:phab:`T412074`)
- Add generated password file to gitignore list (:phab:`T411966`, :phab:`T410753`)
28 November 2025
- Add support for tokwiki (:phab:`T404569`)
24 November 2025
- Fix vulnerability in password parsing (:phab:`T410753`)
- Import
typing.castin :mod:`_wbtypes` module to preventNameErrorin :class:`pywikibot.WbTime` - i18n updates
31 October 2025
- Add support for pcmwikiquote and minwikisource. (:phab:`T408345`, :phab:`T408353`)
- Deprecate dysfunctional :meth:`APISite.alllinks() <pywikibot.site._generators.GeneratorsMixin.alllinks>`. (:phab:`T359427`, :phab:`T407708`)
- Refactor
replace_magicwordsin :meth:`cosmetic_changes.CosmeticChangesToolkit.translateMagicWords`. (:phab:`T396715`) - Deprecate old
(type, value, traceback)signature in :meth:`tools.collections.GeneratorWrapper.throw`. (:phab:`T340641`) - Replace default timetravel.mementoweb.org with web.archive.org in :mod:`data.memento` module. (:phab:`T400570`, :phab:`T407694`)
- i18n updates
23 October 2025
- Fix :meth:`ItemPage.get_value_at_timestamp()<pywikibot.ItemPage.get_value_at_timestamp>`; keep the rank of the claims in the loop. (:phab:`T407701`)
- :meth:`Family.isPublic()<family.Family.isPublic>` is deprecated (:phab:`T407049`)
- Added :func:`tools.itertools.union_generators` for sorted merging of pre-sorted iterables.
- Support for Python 3.8 will be discontinued; this is likely the last Pywikibot version to support it.
- Added a Citoid Query interface with the :mod:`data.citoid` module.
- Updated localization (L10N) files.
- :meth:`Family.interwiki_replacements<family.Family.interwiki_replacements>` is deprecated; use :attr:`Family.code_aliases<family.Family.code_aliases>` instead.
- The first parameter of :meth:`Transliterator.transliterate <userinterfaces.transliteration.Transliterator.transliterate>` is positional only whereas prev and succ parameters are keyword only. The :class:`Transliterator <userinterfaces.transliteration.Transliterator>` was improved.
- Show user-agent with :mod:`version<pywikibot.scripts.version>` script (:phab:`T406458`)
- Positional arguments of :func:`daemonize()<daemonize.daemonize>` are deprecated and must be given as keyword arguments.
- i18n updates.
- Return :meth:`bot.BaseBot.userPut` result from :meth:`AutomaticTWSummaryBot.put_current() <bot.AutomaticTWSummaryBot.put_current>` method
21 September 2025
- :class:`Siteinfo<pywikibot.site._siteinfo.Siteinfo>` query is made with formatversion 2. Several boolean values are available now. Note that '*' keys for some data are kept for backward compatibility but may be removed later. (:phab:`T404301`)
- A new property :attr:`APISite.restrictions<pywikibot.site._apisite.APISite.restrictions>` was added. It replaces the methods :meth:`APISite.protection_types() <pywikibot.site._apisite.APISite.protection_types>` and :meth:`APISite.protection_levels() <pywikibot.site._apisite.APISite.protection_levels>` which are deprecated now.
- Support for mswikiquote was added (:phab:`T404702`)
- :meth:`APISite.rollbackpage()<pywikibot.site._apisite.APISite.rollbackpage>` supports pageid argument as alternative to page. markbot defaults to True if the rollbacker is a bot and not explicitly given. The method now returns a dictionary with rollback information. The version history no longer has to be preloaded. (:phab:`T403425`)
- :meth:`BasePage.rollback()<page.BasePage.rollback>` was implemented (:phab:`T403425`)
- The first parameter of :exc:`exceptions.PageRelatedError` may now be a pageid (:phab:`T403425`)
- i18n Updates
- Use 'login' token from API response in :meth:`login.ClientLoginManager.login_to_site` (:phab:`T328814`)
- Always use fallback_prompt in :func:`i18n.twtranslate` whenever no translation is found, including unknown keys in existing packages (:phab:`T326470`)
31 August 2025
- Apply client-side filtering for maxsize in misermode in :meth:`Site.allpages()<pywikibot.site._generators.GeneratorsMixin.allpages>` (:phab:`T402995`)
- Add :attr:`filter_func()<data.api.APIGeneratorBase.filter_func>` and :meth:`filter_item() <data.api.APIGeneratorBase.filter_item>` filter function in :class:`APIGeneratorBase <data.api.APIGeneratorBase>` and modify generator property to implement filtering in APIGeneratorBase subclasses (:phab:`T402995`)
- All parameters of :meth:`Site.allpages()<pywikibot.site._generators.GeneratorsMixin.allpages>` except start must be given as keyword arguments.
- Add support for bewwiktionary (:phab:`T402136`)
- Add user-agent header to :mod:`eventstreams` requests (:phab:`T402796`)
- Update i18n
- Save global options in :attr:`bot.global_args` (:phab:`T250034`)
- Update :mod:`plural` forms from unicode.org (:phab:`T114978`)
- Add :class:`textlib.SectionList` to hold :attr:`textlib.Content.sections` (:phab:`T401464`)
- :class:`pywikibot.Coordinate` parameters are keyword only
- Add strict parameter to :meth:`Site.unconnected_pages() <pywikibot.site._extensions.unconnected_pages>` and :func:`pagegenerators.UnconnectedPageGenerator` (:phab:`T401699`)
- Raise ValueError if a VAR_POSITIONAL parameter like *args is used with :class:`tools.deprecate_positionals` decorator
- Add :meth:`get_value_at_timestamp()<pywikibot.ItemPage.get_value_at_timestamp>` API to :class:`pywikibot.ItemPage` (:phab:`T400612`)
- Clean up :mod:`setup` module (:phab:`T396356`)
- Implement :meth:`pywikibot.ItemPage.get_best_claim` (:phab:`T400610`)
- Add expiry parameter to :meth:`BasePage.watch()<page.BasePage.watch>` and :meth:`Site.watch()<pywikibot.site._apisite.APISite.watch>`; fix the methods to return False if page is missing and no expiry is set (:phab:`T330839`)
12 August 2025
- Add support for zghwiktionary, madwikisource, rkiwiki, minwikibooks (:phab:`T391769`, :phab:`T392501`, :phab:`T395501`, :phab:`T399787`)
- i18n updates
08 August 2025
- Add support for tlwikisource (:phab:`T388656`)
- i18n updates
03 August 2025
- :attr:`Site.articlepath<pywikibot.site._apisite.APISite.articlepath>` may raise a ValueError
instead of AttributeError if
$1placeholder is missing from API - Refactor the :class:`throttle.Throttle` class (:phab:`T289318`)
- L10N-Updates: add language aliases for
gsw,sgs,vro,rupandlzhto :class:`family.WikimediaFamily` family class (:phab:`T399411`, :phab:`T399438`, :phab:`T399444`, :phab:`T399693`, :phab:`T399697` ) - Refactor HTML removal logic in :func:`textlib.removeHTMLParts` using :class:`textlib.GetDataHTML` parser; removetags parameter was introduced to remove specified tag blocks (:phab:`T399378`)
- Refactor :class:`echo.Notification` and fix :meth:`mark_as_read()<echo.Notification.mark_as_read>` method (:phab:`T398770`)
- Update beta domains in family files from beta.wmflabs.org to beta.wmcloud.org (:phab:`T289318`)
textlib.to_latin_digits()was renamed to :func:`textlib.to_ascii_digits` (:phab:`T398146#10958283`),NON_LATIN_DIGITSof :mod:`userinterfaces.transliteration` was renamed toNON_ASCII_DIGITS- Add -cookies option to the :mod:`login<pywikibot.scripts.login>` script to log in with cookies files only
- Create a Site using the :func:`pywikibot.Site` constructor with a given url even if the URL, even if it ends with a slash (:phab:`T396592`)
- Remove hard-coded error messages from :meth:`login.LoginManager.login` and use API response instead
- Add additional information to :meth:`Site.login()<pywikibot.site._apisite.APISite.login>` error message (:phab:`T395670`)
- i18n updates
14 June 2025
- Use Lock object in :class:`comms.http.PywikibotCookieJar` for thread-safe saving (:phab:`T396309`)
- Raise TypeError instead of ValueError in :func:`i18n.translate` if parameter is not a mapping
- Recognise wildcard in :mod:`config.usernames<config>` when running :mod:`login<pywikibot.scripts.login>` script (:phab:`T110411`)
- Search for http and https by default in :meth:`Site.exturlusage() <.site._generators.GeneratorsMixin.exturlusage>` (:phab:`T396280`)
- Add login methods overview to :mod:`login` module (:phab:`T396204`)
- Enable EmailAuth with :class:`login.ClientLoginManager` (:phab:`T395703`)
- Move :mod:`tools.threading.RLock<tools.threading>` to :mod:`backports` module (:phab:`T395182`)
- Only show the description passed to :class:`specialbots.UploadRobot` if it is to be verified (:phab:`T394895`)
- i18n updates
- Add support for Python 3.15 (:phab:`T395177`)
18 May 2025
- Use WikiHistory instead of XTools to implement :meth:`Page.authorship() <page._toolforge.WikiBlameMixin.authorship>` (:phab:`T392345`)
- Correct :class:`comms.eventstreams.EventStreams` kwarg name from last_event_id to latest_event_id (:phab:`T394570`)
- Retieve charset from accept-charset header entry in :func:`comms.http._decide_encoding` (:phab:`T392345`)
- Skip :meth:`CosmeticChangesToolkit.removeEmptySections() <cosmetic_changes.CosmeticChangesToolkit.removeEmptySections>` if section length is too less (:phab:`T391776`)
- Add support for nupwiki (:phab:`T390713`)
- i18n updates
- No longer follow redirects in :func:`bot.open_webbrowser` (:phab:`T390447`)
- Update closed and removed wikis (:phab:`T390732`)
- page parameter was added to :meth:`site.recentchanges() <pywikibot.site._generators.GeneratorsMixin.recentchanges>`
- googlesearch-python package is required for :class:`pagegenerators.GoogleSearchPageGenerator`
01 March 2025
Improvements
- Add sort parameter to :func:`pagegenerators.SearchPageGenerator` and :meth:`APISite.search() <pywikibot.site._generators.GeneratorsMixin.search>`:phab:`T386594`).
- Add support for sylwiki (:phab:`T386466`).
- Update :attr:`Family.cross_allowed<family.Family.cross_allowed>` lists in family files.
- Ignore empty message warning in :class:`EventStreams<comms.eventstreams.EventStreams>` (:phab:`T383035`).
- A timeout parameter was added to :func:`data.memento.get_closest_memento_url` and the default timeout was increased to 30 s (:phab:`T382943`).
- :func:`bot.calledModuleName` returns either 'unittest' or 'pytest' during test run (:phab:`T382797`).
- :class:`tools.threading.BoundedPoolExecutor` was added (:phab:`T333741`).
- args parameter for :mod:`logging` functions can be used as formatting arguments
- :attr:`.login.OauthLoginManager.access_token` was added.
- Representation string for :class:`login.LoginManager` was added.
- i18n updates.
Bugfixes
- Allow url without api path, requests path or script path in :func:`pywikibot.Site` constuctor (:phab:`T386665`).
- Appended <<default>> color tag before the last linefeed in :class:`UI<userinterfaces.terminal_interface_base.UI>` (:phab:`T382884`).
- Remove unintentional args parameter in :class:`tools.threading.ThreadList` (:phab:`T382787`).
Code cleanups
- Remove Structured Discussions/Flow support (:phab:`T381551`, :phab:`T371180`)
- Remove old and deprecated variables in :mod:`config`.
- Remove unintentional
pywikibot.warn(). - Unused get_redirect parameter of :meth:`BasePage.getOldVersion()<page.BasePage.getOldVersion>` was removed.
- baserevid parameter of :class:`DataSite<pywikibot.site._datasite.DataSite>` methods :meth:`editSource()<pywikibot.site._datasite.DataSite.editSource>`, :meth:`editQualifier()<pywikibot.site._datasite.DataSite.editQualifier>`, :meth:`removeClaims()<pywikibot.site._datasite.DataSite.removeClaims>`, :meth:`removeSources()<pywikibot.site._datasite.DataSite.removeSources>`, :meth:`remove_qualifiers()<pywikibot.site._datasite.DataSite.remove_qualifiers>` were be removed.
linktrailmethods of :class:`family.Family` and :class:`BaseSite<pywikibot.site._basesite.BaseSite>` were removed; use :meth:`APISite.linktrail()<pywikibot.site._apisite.APISite.linktrail>` instead.- Positional arguments decoder, layer and newline for :mod:`logging` functions are invalid; keyword arguments must be used instead.
- tb parameter of :func:`exception()<pywikibot.logging.exception>` function was dropped; use exc_info instead.
- The positional arguments of :meth:`page.BasePage.linkedPages` were removed.
FilePage.usingPages()was renamed to :meth:`using_pages()<pywikibot.FilePage.using_pages>`.APISite.article_pathwas removed. :attr:`APISite.articlepath <pywikibot.site._apisite.APISite.articlepath>` can be used instead.fix_digitsmethod of :class:`textlib.TimeStripper` was removed; :func:`textlib.to_ascii_digits` can be used instead.- :mod:`textlib`.tzoneFixedOffset class was removed in favour of :class:`time.TZoneFixedOffse<pywikibot.time.TZoneFixedOffset>`.
- A boolean watch parameter in :meth:`page.BasePage.save` is desupported.
XMLDumpOldPageGeneratorwas removed in favour of acontentparameter of :func:`pagegenerators.XMLDumpPageGenerator` (:phab:`T306134`).- :meth:`pywikibot.User.is_blocked` method was renamed from
isBlockedfor consistency. - Values of :meth:`APISite.allpages()<pywikibot.site._generators.GeneratorsMixin.allpages>` parameter filterredir must be True, False or None.
- :mod:`tools.threading` classes no longer can be imported from :mod:`tools`.
- :mod:`tools.itertools` datatypes no longer can be imported from :mod:`tools`.
- :mod:`tools.collections` datatypes no longer can be imported from :mod:`tools`.
svn_rev_infoandgetversion_svnof :mod:`version` module were be removed. SVN repository is no longer supported. (:phab:`T362484`).- Old color escape sequences like
\03{color}were dropped in favour of new color format like<<color>>. tools.formatter.color_format()was removed; the new color literals can be used instead.- RedirectPageBot and NoRedirectPageBot bot classes were removed in favour of :attr:`use_redirects<bot.BaseBot.use_redirects>` attribute.
Other breaking changes
- Package requirements were updated (wikitextparser, pydot, python-stdnum, Pillow, PyMySQL, fake-useragent)
- Use requests_sse instead of unsupported sseclient for :mod:`comms.eventstreams` (:phab:`T309380`).
- :mod:`backports` module is no longer a public API.
- Drop support for MediaWiki < 1.31 (:phab:`T378984`).
- Require
requests >= 2.31.0(:phab:`T347031`). - Python 3.7 support was dropped (:phab:`T378893`), including importlib_metadata of :mod:`backports`.
22 February 2025
- Add support for satwiktionary (:phab:`T386633`)
- Update wiktionary family file
- i18n updates.
02 February 2025
- Add support for kncwiki (:phab:`T385187`)
- Fix a f-string in :meth:`Claim.fromJSON()<pywikibot.Claim.fromJSON>`
- i18n updates.
13 December 2024
- Add support for tigwiki (:phab:`T381381`)
- Fix use of importlib.metadata.entry_points for pywikibot-scripts with Python 3.8 and 3.9 (:phab:`T358635`)
- i18n updates.
03 December 2024
- Add support for idwikivoyage (:phab:`T381082`)
- Add docstrings of :class:`tools.classproperty` methods (:phab:`T380628`)
- Site property :attr:`BaseSite.codes<pywikibot.site._basesite.BaseSite.codes>` was added (:phab:`T380606`)
- Increase leeway parameter of :meth:`login.OauthLoginManager.identity` (:phab:`T380270`)
- Show a warning if ignore_extension parameter of :class:`pywikibot.FilePage` was set and the extension is invalid
- Remove old code of Python 3.2 or older in :func:`tools.chars.replace_invisible` due to PEP 393
- use :meth:`BasePage.autoFormat()<page.BasePage.autoFormat>` instead of :func:`date.getAutoFormat` in :mod:`titletranslate`
- Upcast :class:`pywikibot.Page` to :class:`pywikibot.FilePage` in :meth:`PageGenerator.result()
<data.api.PageGenerator.result>` if
imageinfois given (:phab:`T379513`) - Update oauth requirements
- i18n-updates
- Implement param with_sort_key in :meth:`page.BasePage.categories` (:phab:`T75561`)
- Python 3.7 support will be discontinued and probably this is the last version supporting it
- Add :meth:`page.BasePage.get_revision` method
- Retry :meth:`data.sparql.SparqlQuery.query` on internal server error (500) (:phab:`T378788`)
- Extract :meth:`APISite.linktrail()<pywikibot.site._apisite.APISite.linktrail>` for hr-wiki (:phab:`T378787`)
30 October 2024
- Add support for tcywikisource and tcywiktionary (:phab:`T378473`, :phab:`T378465`)
- i18n-updates
- Update invisible chars in :mod:`tools.chars` from unicode 16.0.0
- Rename :meth:`DataSite.getPropertyType()<pywikibot.site._datasite.DataSite.getPropertyType>` to :meth:`DataSite.get_property_type()<pywikibot.site._datasite.DataSite.get_property_type>`
- provide XXXI with :func:`date.romanNumToInt` and :func:`date.intToRomanNum` functions
- No longer raise :exc:`exceptions.UnsupportedPageError` within :meth:`data.api.PageGenerator.result` (:phab:`T377651`)
- Extract messages with strong tag from xtools as error message in :meth:`Page.authorship()<page._toolforge.WikiBlameMixin.authorship>` (:phab:`T376815`)
15 October 2024
- Add support for new wikis (:phab:`T375019`, :phab:`T375104`, :phab:`T375426`, :phab:`T376332`, :phab:`T376574`, :phab:`T377090`)
05 October 2024
- Ignore :exc:`ValueError` during upcast of :class:`FilePage<pywikibot.page.FilePage>` due to invalid file extension (:phab:`T367777`, :phab:`T376452`)
- Provide an entry point to connect foreign scripts with pwb wapper (:phab:`T139143`, :phab:`T139144`)
- Show a warning message for a deleted or unknown :class:`Claim<pywikibot.Claim>` type (:phab:`T374676`)
preload_sitesmaintenance script was removed (:phab:`T348925`)- Add :meth:`User.renamed_target()<pywikibot.User.renamed_target>` method
- Check whether Claim exists within :meth:`Claim.fromJSON()<pywikibot.Claim.fromJSON>` method (:phab:`T374681`)
- Add :attr:`logentries.LogEntry.params` as a public property
- Add support for several wikis (:phab:`T375435`, :phab:`T375097`, :phab:`T374646`, :phab:`T374817`, :phab:`T375026`)
- Add :meth:`title()<pywikibot.MediaInfo.title>` method to :class:`pywikibot.MediaInfo` (:phab:`T366424`)
- Add tags to the wikibase functions (:phab:`T372513`)
- :func:`diff.get_close_matches_ratio()` function was added
- Initialize super classes of :exc:`EditReplacementError` (:phab:`T212740`)
- Add a hint to import missing module in :mod:`wrapper<pywikibot.scripts.wrapper>` script
- i18n updates
06 August 2024
- Add support for bdrwiki (:phab:`T371762`)
- i18n updates
28 July 2024
- Only add lang links from API response to a given page if present in family file (:phab:`T371107`)
- Add support for
cswikivoyageto Pywikibot (:phab:`T370915`) - :class:`pywikibot.FilePage` has a parameter ignore_extension to ignore file extension check :phab:`T352237`)
- Provide :attr:`cosmetic_changes.main_sortkey` to localize sort key in :meth:`CosmeticChangesToolkit.standardizePageFooter<cosmetic_changes.CosmeticChangesToolkit.standardizePageFooter>`
- Add ignore_section parameter to :meth:`site.APISite.getredirtarget` and :meth:`page.BasePage.getRedirectTarget` to ignore :exc:`exceptions.SectionError` (:phab:`T370295`)
- Avoid backslash in repr string of :class:`page.WikibaseEntity`
- botflag parameter of :meth:`page.BasePage.save`, :meth:`page.BasePage.put`, :meth:`page.BasePage.touch`, :meth:`pywikibot.Page.set_redirect_target` and :meth:`pywikibot.ItemPage.set_redirect_target` was renamed to bot to be in sync with :meth:`APISite.editpage<pywikibot.site._apisite.APISite.editpage>` and :api:`edit`.
- use :meth:`page.BasePage.templates` in :meth:`Page.templatesWithParams<page.Page.templatesWithParams>` to cache templates
- Re-implement :meth:`Page.main_authors()<page._toolforge.WikiBlameMixin.main_authors>` as
:meth:`Page.authorship()<page._toolforge.WikiBlameMixin.authorship>` using
xtools(:phab:`T366100`);wikitextparserpackages is required for it.
13 July 2024
- Add support for
aewikimediato Pywikibot (:phab:`T362529`) - i18n updates
22 June 2024
- Add support for
btmwikito Pywikibot (:phab:`T368069`) - Include image repository extensions in :attr:`site.APISite.file_extensions <pywikibot.site._apisite.APISite.file_extensions>`
- Add :func:`pagegenerators.SupersetPageGenerator` pagegenerator (:phab:`T367684`)
- No longer wait in :meth:`data.api.Request._http_request` for
ImportErrorandNameError - Replace
requests.utils.urlparsewithurllib.parse.urlparsein :func:`comms.http.get_authentication` (:phab:`T367649`) - Show an appropriate message if
requests_oauthlibpackage is required but missing (:phab:`T353387`) - Retry
DBUnexpectedErrorin :meth:`data.api.Request._internal_api_error` (:phab:`T367383`) - Duplicated entries found in :mod:`pywikibot` were removed
- Pass
Noneinstead of an empty string as expiry argument in :meth:`site.APISite.protect()<pywikibot.site._apisite.APISite.protect>` (:phab:`T367176`) - Fix keyword argument in :meth:`Page.undelete()<page.BasePage.undelete>` when calling :meth:`site.APISite.undelete()<pywikibot.site._apisite.APISite.undelete>` (:phab:`T367037`)
- Check whether :attr:`BaseBot.generator<bot.BaseBot.generator>` is None in :meth:`run()<bot.BaseBot.run>` method
- Add namespaces parameter to :meth:`Page.templates()<page.BasePage.templates>` and :meth:`Page.itertemplates()<page.BasePage.itertemplates>` and require keyword arguments; only use TEMPLATE namespace for meth:Page.isDisambig()<page.BasePage.isDisambig> (:phab:`T365199`)
- Drop pheetools support for :mod:`proofreadpage` which is no longer available upstreams (:phab:`T366036`)
- Raise :exc:`exceptions.SectionError` if a section does not exists on a page (:phab:`T107141`)
- Retry api request on ServerError (:phab:`T364275`, :phab:`T364393`)
- i18n updates
28 May 2024
- Add support for dtpwiki (:phab:`T365232`)
- i18n updates
03 May 2024
- Remove line endings in :func:`version.getversion_nightly` (:phab:`T363943`)
- Provide
-nouseroption with :mod:`pywikibot.scripts.version` - i18n updates
27 April 2024
- Add support for new wikis (:phab:`T363272`, :phab:`T363265`, :phab:`T363258`, :phab:`T363251`, :phab:`T363245`, :phab:`T360312`, :phab:`T360305`)
- i18n updates
22 April 2024
- Circumvent problems with unique and prefix parameters in :meth:`Site.alllinks() <pywikibot.site._generators.GeneratorsMixin.alllinks>` (:phab:`T359427`)
- Detect nightly version file with :func:`version.getversion_nightly` (:phab:`T362492`)
- :mod:`version`.github_svn_rev2hash() was removed; it was no longer functional (:phab:`T362484`)
- SVN support has been dropped;
.svnpropsproperty settings was removed (:phab:`T362484`) - Skip process that requires login to logout (:phab:`T326614`)
- File title of :class:`specialbots.UploadRobot` must have a valid file extension (:phab:`T345786`)
- Add a :attr:`post_processor<specialbots.UploadRobot.post_processor>` attribute to :class:`specialbots.UploadRobot` which can be called after each upload (:phab:`T359766`)
- Avoid using :meth:`pywikibot.handle_args` in private scripts; use :mod:`pwb<pywikibot.scripts.wrapper>` wrapper instead (:phab:`T359766`)
- Show upload count with :class:`specialbots.UploadRobot`
- Use the same
iipropproperties in :class:`data.api.PageGenerator` as in :meth:`APISite.loadimageinfo<pywikibot.site._apisite.APISite.loadimageinfo>` (:phab:`T360093`) - i18n updates
08 March 2024
Improvements
- Python 3.13 is supported
- Update :mod:`tools`._unidata._category_cf from Unicodedata version 15.1.0
- :meth:`Timestamp.nowutc()<pywikibot.time.Timestamp.nowutc>` and :meth:`Timestamp.utcnow()<pywikibot.time.Timestamp.utcnow>` were added (:phab:`T337748`)
- Remove content parameter of :meth:`proofreadpage.IndexPage.page_gen` method. (:phab:`T358635`)
- Backport
itertools.batchedfrom Python 3.13 to :func:`backports.batched` - A copy button was added to the sphinx documentation.
- Make :attr:`languages_by_size<family.WikimediaFamily.languages_by_size>` dynamic (:phab:`T78396`). The property is
only available for :class:`family.WikimediaFamily` families. The
wikimedia_sites.pymaintenance script was removed. - Add :func:`config.base_dir<config.get_base_dir>` to scripts search path with :mod:`pwb` wrapper (:phab:`T324287`)
- Detect range blocks with :meth:`pywikibot.User.is_blocked` and :meth:`pywikibot.User.getprops` (:phab:`T301282`)
- Add :func:`tools.is_ip_network` and :meth:`pywikibot.User.is_CIDR` (:phab:`T301282`)
- :meth:`pywikibot.WbTime.equal_instant` was added (:phab:`T325248`)
revisionsparameter of :class:`xmlreader.XmlDump` was introduced to specify parsing method (:phab:`T340804`)- Pass global -nolog argument into bot script from wrapper (:phab:`T328900`)
- Add :meth:`site.APISite.ratelimit()<pywikibot.site._apisite.APISite.ratelimit>` method and :class:`tools.collections.RateLimit` NamedTuple (:phab:`T304808`)
- L10N and i18n updates
- Add :class:`pagegenerators.PagePilePageGenerator` (:phab:`T353086`)
Bugfixes
- :meth:`Timestamp.now()<pywikibot.time.Timestamp.now>` and :meth:`Timestamp.fromtimestamp()<pywikibot.time.Timestamp.fromtimestamp>` also returns a :class:`Timestamp<pywikibot.time.Timestamp>` object with Python 3.7
- Populate :class:`pywikibot.MediaInfo`._content with expected attributes when loaded (:phab:`T357608`)
- Raise :exc:`exceptions.APIError` if the same error comes twice within :meth:`data.api.Request.submit` loop (:phab:`T357870`)
- Only delegate :mod:`site` methods to public :class:`family.Family` methods which have code as first parameter.
- Use
strinstead ofreprfor several messages with :class:`family.Family` objects (:phab:`T356782`) - Add
hyto special languages in :class:`textlib.TimeStripper` (:phab:`T356175`) - Pass login token when using
action=login(:phab:`T309898`) - Detect range blocks with :meth:`pywikibot.User.is_blocked` (:phab:`T301282`)
- Use only
endtags in ElementTree.iterparse in :mod:`xmlreader` module (:phab:`T354095`) - Suppress error in :meth:`cosmetic_changes.CosmeticChangesToolkit.cleanUpLinks` (:phab:`T337045`)
- :func:`pywikibot.input_choice` validates default parameter (:phab:`T353097`)
- Remove typing imports from user-config.py file (:phab:`T352965`)
Breaking changes and code cleanups
- Cache directory was renamed from
apicache-py3toapicachedue to timestamp changes. (:phab:`T337748`) Warning: Do not use Pywikibot 9+ together with Pywikibot 3.0.20181203 and below. - Raise
TypeErrorinstead ofAttributeErrorin :meth:`Site.randompages() <pywikibot.site._generators.GeneratorsMixin.randompages>` if redirects parameter is invalid. - A RuntimeError will be raised if a :class:`family.Family` subclass has an
__init__initializer method. :meth:`family.Family.__post_init__` classmethod can be used instead. - :class:`InteractiveReplace<bot_choice.InteractiveReplace>` was moved from :mod:`bot` to :mod:`bot_choice` module
userinterfaces.transliteration.transliteratorwas renamed to :class:`Transliterator <userinterfaces.transliteration.Transliterator>`pywikibot.BaseSiteandpywikibotAPISitewere dropped. :func:`pywikibot.Site` has to be used to create a :mod:`site` object.nextparameter of :meth:`userinterfaces.transliteration.Transliterator.transliterate` was renamed tosucctypeparameter of :meth:`site.APISite.protectedpages()<pywikibot.site._generators.GeneratorsMixin.protectedpages>` was renamed toprotect_typeallparameter of :meth:`site.APISite.namespace()<pywikibot.site._apisite.APISite.namespace>` was renamed toall_nsfilterparameter of :func:`date.dh` was renamed tofilter_funcdictparameter of :class:`data.api.OptionSet` was renamed todatasetuptoolspackage is no longer mandatory but required for tests (:phab:`T340640`, :phab:`T347052`, :phab:`T354515`)rootattribute of :class:`xmlreader.XmlDump` was removedtools.Versionclass was removed; use classes frompackaging.versioninstead (:phab:`T340640`)packagingpackage is mandatory;importlib_metadatapackage is required for Python 3.7 (:phab:`T340640`)SelfCallMixin,SelfCallDictandSelfCallStringof :mod:`tools` module were removed- Calling :attr:`site.BaseSite.sitename<pywikibot.site._basesite.BaseSite.sitename>` as a function is no longer supported
config.register_family_file()function was removed- require
PyMySQL >= 1.0.0if necessary keys()anditems()methods of :class:`data.api.Request` gives a view instead a list (:phab:`T310953`)SequenceOutputter.format_list()was removed in favour of :attr:`tools.formatter.SequenceOutputter.out` property- output parameter of :class:`bot_choice.OutputProxyOption` (i.e.
OutputOptioninstance) without out property is no longer supported OutputOption.output()method was removedContextOption.output_range()andHighlightContextOption.output_range()methods were removedpage.url2unicode()function was removed in favour of :func:`tools.chars.url2string`- iterables of :func:`tools.itertools.intersect_generators` must not be given as a single list or tuple; either consecutive iterables must be used or '*' to unpack
- allow_duplicates parameter of :func:`tools.itertools.intersect_generators` must be given as keyword argument
- Infinite rotating file handler with
config.logfilesizeof -1 is no longer supported Throttle.multiplydelayattribute was removed- Python 3.6 support was dropped (:phab:`T347026`)
05 December 2023
- Lazy load imageinfo metadata (:phab:`T253591`, :phab:`T258036`)
- Fetch URL of page scan via :api:`imageforpage` in :mod:`proofreadpage` module (:phab:`T114318`, :phab:`T181913`, :phab:`T352524`)
- Sort page names before loading pages in :mod:`proofreadpage` module
- L10N and i18n updates
- check for valid family and site option after
-helpis processed (:phab:`T350756`) - Handle canary events in comms.eventstreams (:phab:`T350756`)
11. November 2023
- Add support for new wikis (:phab:`T350231`, :phab:`T350237`, :phab:`T350243`, :phab:`T350375`)
05. November 2023
- Add a pagegenerators filter option to check if a page is redirect (:phab:`T261549`)
- Add support for
vikidia:nlsite - Replace MediaWiki API deprecated
inprop=preloadwithpreloadcontent(:phab:`T348910`) - Remove check for purge right from APISite.purgepages (:phab:`T349348`)
- Add MediaInfo editLabels, AddClaim and removeClaim functions (:phab:`T348422`)
- Drop unused
Family.use_hard_category_redirects(:phab:`T348953`) - No longer drop site decorators for optimized codes (:phab:`T74424`)
- Improve handling of uninitialized MediaInfo
- Add support for
vikidia:arsite - Make exception about missing mediainfo more friendly
- L10N and i18n updates
- Give visible error to user when there are no rights (:phab:`T345342`)
07. October 2023
- Add support for fonwiki (:phab:`T347941`)
- :meth:`site.BaseSite.redirects()<pywikibot.site._basesite.BaseSite.redirects>` and :meth:`site.APISite.redirects()<pywikibot.site._apisite.APISite.redirects>` methods were added (:phab:`T347226`)
- Upcast to :class:`pywikibot.FilePage` for a proper extension only (:phab:`T346889`)
- Handle missing SDC mediainfo (:phab:`T345038`)
- modules_only_mode parameter of :class:`data.api.ParamInfo`, its paraminfo_keys class attribute and its preloaded_modules property was deprecated, the :meth:`data.api.ParamInfo.normalize_paraminfo` method became a staticmethod (:phab:`T306637`)
- raise ValueError when :class:`pywikibot.FilePage` title doesn't have a valid file extension (:phab:`T345786`)
- :attr:`site.APISite.file_extensions <pywikibot.site._apisite.APISite.file_extensions>` property was added (:phab:`T345786`)
dropdelayandreleasepidattributes of :class:`throttle.Throttle` where deprecated in favour of expiry class attribute- Add https scheme if missing in url asked by :mod:`pywikibot.scripts.generate_family_file`
- L10N updates and i18n updates
- use inline re.IGNORECASE flag in :func:`textlib.case_escape` function (:phab:`T308265`)
- Convert URL-encoded characters also for links outside main namespace with :meth:`cosmetic_changes.CosmeticChangesToolkit.cleanUpLinks` (:phab:`T342470`)
- Implement Flow topic summaries (:phab:`T109443`)
20. September 2023
- Extract code and family from dbname in :meth:`site.APISite.fromDBName() <pywikibot.site._apisite.APISite.fromDBName>` (:phab:`T345036`)
- L10N and i18n updates
29. August 2023
- Add support for tlywiki (:phab:`T345172`)
- L10N and i18n updates
17. August 2023
- Add support for suwikisource and blkwiktionary (:phab:`T343544`, :phab:`T343550`)
- :mod:`families.wikifunctions_family` was added (:phab:`T343573`)
- i18n updates
27 July 2023
- Add support for btmwiktionary (:phab:`T336117`)
- Add 'yue'/'zh-yue' code_aliases to family files (:phab:`T341960`)
- All wbtypes are placed in
pywkibot._wbtypesmodule - Use
site.langinstead ofsite.codein :func:`comms.http.user_agent` (:phab:`T228322`) - Make header extraction in :func:`textlib.extract_sections` more robust (:phab:`T341787`)
05 July 2023
- Add support for gpewiki (:phab:`T335989`)
- :class:`family.WikibaseFamily` and :class:`family.DefaultWikibaseFamily` were added to :mod:`family` module
- Remove incorrect time normalization in :class:`page.Claim` (:phab:`T338748`, :phab:`T325860`, :phab:`T57755`)
- Add support for other types of diffs in :meth:`Site.compare()<pywikibot.site._apisite.APISite.compare>`
- Improvements for :func:`textlib.extract_sections` function (:phab:`T338748`)
- Backport
itertools.batched()from Python 3.12 which replaces :func:`tools.itertools.itergroup` - Upcast page types in :func:`pagegenerators.RecentChangesPageGenerator` (:phab:`T340450`)
- Enable :meth:`FilePage.download()<pywikibot.FilePage.download>` to download thumbnails (:phab:`T247095`)
- Refactor :func:`tools.compute_file_hash` and use
hashlib.file_digestwith Python 3.11 - Url ends with curly bracket in :func:`textlib.compileLinkR` (:phab:`T338029`)
- Allows spaces in environment variables for :class:`editor.TextEditor` (:phab:`T102465`, :phab:`T323078`)
- Add :func:`textlib.get_regexes` public function (:phab:`T336144`)
- Return 'https' scheme with :meth:`family.Family.protocol` (:phab:`T326046`)
- Use
buildinstead ofsetuptools.setup()to build the distribution - Raise
ConnectionErroronrequests.ReadTimeoutin :func:`comms.http.error_handling_callback` - Raise :exc:`exceptions.ServerError` on
requests.ReadTimeoutin :func:`comms.http.error_handling_callback` - Do not evaluate :func:`pywikibot.Site` with dict.pop() as default value (:phab:`T335720`)
- L10N updates
- :class:`family.Family` class was rewritten.
obsolete.setterwas removed, :meth:`family.Family.interwiki_replacements` returns an invariant mapping, :meth:`family.Family.interwiki_removals` returns a frozenset.closed_wikis,removed_wikisandcode_aliasesare :class:`family.Family` class attributes. (:phab:`T334834`)
23 April 2023
- Add support for guwwikinews (:phab:`T334461`)
- Add support for kbdwiktionary (:phab:`T333271`)
- Fix :func:`tools.chars.url2string` parsing for multiple encodings (:phab:`T335224`)
21 April 2023
- Add support for fatwikipedia (:phab:`T335021`)
- Add support for kcgwiktionary (:phab:`T334742`)
- Update for wowwiki family
16 April 2023
- :mod:`generate_family_file<pywikibot.scripts.generate_family_file>` script was improved (:phab:`T334775`)
- A
quietparameter was added to :meth:`APISite.preloadpages() <pywikibot.site._generators.GeneratorsMixin.preloadpages>` which is True by default - Fix getting HTTPStatus enum in site_detect check_response (:phab:`T334728`)
- Do not show a logging in message if password is entered (:phab:`T178061`)
- Enable preleading
Bot:prefix with twtranslate messages (:phab:`T161459`) - Disable command.log if -nolog option is given (:phab:`T334381`)
- Guess the last needed token key if the token is not found (:phab:`T334288`)
- Show parameters with APIError (:phab:`T333957`)
- Raise :exc:`exceptions.NoSiteLinkError` instead of :exc:`exceptions.NoPageError` when sitelink is missing in :meth:`ItemPage.getSitelink()<pywikibot.ItemPage.getSitelink>` (:phab:`T332341`)
- :exc:`exceptions.ClientError` was added
- Raise :exc:`exceptions.NoPageError` when deleting a missing Page (:phab:`T332924`)
textparameter of :class:`proofreadpage.PagesTagParser` has a default value- L10N updates
- Ignore talk pages with :meth:`APISite.watched_pages()<pywikibot.site._generators.GeneratorsMixin.watched_pages>` (:phab:`T330806`)
- Load page info when creating a page if not updated previously (:phab:`T330980`)
- Improve flush exception logging (:phab:`T108444`)
13 April 2023
- L10N Updates
- Minimal needed mwparserfromhell was decreased to 0.5.2 (:phab:`T326498`, :phab:`T327600`)
- No longer lazy load password cookies (:phab:`T271858`, :phab:`T326779`, :phab:`T329132`, :phab:`T330488`, :phab:`T331315`)
29 March 2023
- Add support for ckb-wiktionary (:phab:`T332093`)
25 March 2023
- Add support for anpwiki (:phab:`T332115`)
04 March 2023
- Add support for azwikimedia, gucwiki, gurwiki (:phab:`T317121`, :phab:`T326238`, :phab:`T327844`)
- Avoid error when replacement includes backslash (:phab:`T330021`)
- Copy snak IDs/hashes when using :meth:`page.WikibaseEntity.editEntity` (:phab:`T327607`)
- Add
timezone_awareto :meth:`pywikibot.WbTime.toTimestamp` (:phab:`T325868`) - L10N and i18n updates
21 January 2023
Improvements
- Allow copying timezone from timestamp in :class:`pywikibot.WbTime` (:phab:`T325864`)
- Support federated Wikibase (:phab:`T173195`)
- Improve warning if a Non-JSON response was received from server (:phab:`T326046`)
- Allow normalization of :class:`pywikibot.WbTime` objects (:phab:`T123888`)
- Add parser for
<pages />tag to :mod:`proofreadpage` addOnlyparameter of :func:`textlib.replaceLanguageLinks` and :func:`textlib.replaceCategoryLinks` were renamed toadd_onlyknown_codesattribute was added to :class:`family.WikimediaFamily` (:phab:`T325426`)- Unify representation for :class:`time.Timestamp` between CPython and Pypy (:phab:`T325905`)
- Implement comparison for :class:`pywikibot.WbTime` object (:phab:`T148280`, :phab:`T325863`)
- Create a cookie file for each account (:phab:`T324000`)
- Move data.api._login.LoginManager to :class:`login.ClientLoginManager`
- Let user the choice which section to be copied with :mod:`generate_user_files <pywikibot.scripts.generate_user_files>` (:phab:`T145372`)
- use :func:`roundrobin_generators<tools.itertools.roundrobin_generators>` to combine generators when limit option is given
- Ignore OSError if API cache cannot be written
- Update tools._unidata._category_cf from Unicodedata version 15.0.0
- :meth:`Timestamp.set_timestamp()<pywikibot.time.Timestamp.set_timestamp>` raises TypeError instead of ValueError if conversion fails
- Python 3.12 is supported
- All parameters of :meth:`APISite.categorymembers() <pywikibot.site._generators.GeneratorsMixin.categorymembers>` are provided with :meth:`Category.members()<page.Category.members>`, :meth:`Category.subcategories()<page.Category.subcategories>` (member_type excluded) and :meth:`Category.articles()<page.Category.articles>` (member_type excluded) (:phab:`T102406`)
- Enable site-package installation from git repository (:phab:`T320851`)
- Enable 2FA login (:phab:`T186274`)
- :meth:`Page.editTime()<page.BasePage.editTime>` was replaced by :attr:`Page.latest_revision.timestamp<page.BasePage.latest_revision>`
- Raise a generic ServerError if requests response is a ServerError (:phab:`T320590`)
- Add a new variable 'private_folder_permission' to config.py (:phab:`T315045`)
- L10N and i18n updates
- Adjust subprocess args in :mod:`tools.djvu`
- Short site value can be given if site code is equal to family like
-site:metaor-site:commons
Documentation improvements
- Add highlighting to targeted code snippet within documentation (:phab:`T323800`)
- Add previous, next, index, and modules links to documentation sidebar (:phab:`T323803`)
- Introduce standard colors (legacy palette) in Furo theme (:phab:`T323802`)
- Improve basic content structure and navigation of documentation (:phab:`T323812`)
- Use
Furosphinx theme instead ofNaturaland improve documentation look and feel (:phab:`T322212`) - MediaWiki API cross reference was added to the documentation
Bugfixes
- Fix representation string for :class:`page.Claim` stub instances (:phab:`T326453`)
- Don't raise StopIteration in :meth:`login.LoginManager.check_user_exists` if given user is behind the last user (:phab:`T326063`)
- Normalize :class:`WbTimes<pywikibot.WbTime>` sent to Wikidata (:phab:`T325860`)
- Fix :class:`pywikibot.WbTime` precision (:phab:`T324798`)
- Unquote title for red-links in class:proofreadpage.IndexPage
- Find month with first letter uppercase or lowercase with :class:`textlib.TimeStripper` (:phab:`T324310`)
- Fix disolving script_paths for site-package (:phab:`T320530`)
- Respect limit argument with Board.topics() (:phab:`T138215`, :phab:`T138307`)
Breaking changes
mwparserfromhellpackage is mandatory (:phab:`T326498`)- Several package dependencies were updated
- All parameters of :meth:`Category.members()<page.Category.members>`, :meth:`Category.subcategories()<page.Category.subcategories>` and :meth:`Category.articles()<page.Category.articles>` are keyword only
- The
parent_idandcontent_modelattributes of :class:`page.Revision` were removed in favour ofparentidandcontentmodel - Support for MediaWiki < 1.27 was dropped
- ListBoxWindows class of :mod:`userinterfaces.gui` was removed
- Require Python 3.6.1+ with Pywikibot and drop support for Python 3.6.0 (:phab:`T318912`)
- pymysql >= 0.9.3 is required (:phab:`T216741`)
- Python 3.5 support was dropped (:phab:`T301908`)
- See also Code cleanups below
Code cleanups
maintenance/sorting_orderscript was removed (:phab:`T325426`)alphabetic_svandinterwiki_putfirstattributes of :class:`Wiktionary<families.wiktionary_family.Family>` family were removed (:phab:`T325426`)alphabetic,alphabetic_revisedandfyinterwikiattributes of :class:`family.Family` were removed (:phab:`T325426`)
08 January 2023
- Add support for shn-wikibooks, as quote, guw quote, got-wikt families (:phab:`T148280`, :phab:`T326141`, :phab:`T321285`, :phab:`T321297`)
03 December 2022
- Fix :class:`textlib.TimeStripper` for
visite code (:phab:`T324310`)
10 October 2022
- New wikis are supported (:phab:`T314642`, :phab:`T314648`, :phab:`T316459`, :phab:`T317115`, :phab:`T319193`)
25 September 2022
- TypeError is raised if aliases parameter of :meth:`WikibasePage.editAliases <page.WikibasePage.editEntity>` method is not a list (:phab:`T318034`)
- Raise TypeError in :meth:`AliasesDict.normalizeData <pywikibot.page._collections.AliasesDict.normalizeData>` if data value is not a list (:phab:`T318034`)
- tools' threading classes were moved to :mod:`tools.threading` submodule
- No longer raise NotimplementedError in :meth:`APISite.page_from_repository <pywikibot.site._apisite.APISite.page_from_repository>` (:phab:`T318033`)
- Ability to set
PYWIKIBOT_TEST_...environment variables with pwb wrapper (:phab:`T139847`) - OmegaWiki family was removed
- Provide global
-configoption to specify the user config file name - Run :mod:`pywikibot.scripts.login` script in parallel tasks if
-asyncoption is given (:phab:`T57899`) - Ability to preload categories was added to :meth:`APISite.preloadpages <pywikibot.site._generators.GeneratorsMixin.preloadpages>` (:phab:`T241689`)
- Add :class:`WikiBlame<page._toolforge.WikiBlameMixin>` support was added to get the five topmost authors
- Raise KeyError instead of AttributeError if :class:`page.FileInfo` is used as Mapping
- i18n and L10N updates
21 August 2022
- Add support for pcmwiki, guvwikt and bjnwikt (:phab:`T309059`, :phab:`T310882`, :phab:`T312217`)
- support not loading text :meth:`site.APISite.preloadpages` (:phab:`T67163`)
- :func:`textlib.TimeStripper.timestripper` removes HTML elements before searching for timestamp in text (:phab:`T302496`)
- backport :mod:`backports.pairwise()<backports>` from Python 3.10
- L10N updates
- Fix partial caching in :meth:`Category.subcategories()<page.Category.subcategories>` (:phab:`T88217`)
- Method :meth:`Page.has_content()<page.BasePage.has_content>` was added (:phab:`T313736`)
- Discard cache and reload it if cache was loaded without content and content is required in :meth:`Page.templates()<page.BasePage.templates>` (:phab:`T313736`)
- Add support for vikidia:oc
- Exit loop in PageFromFileReader if match.end() <= 0 (:phab:`T313684`)
- Allow Exception as parameter of pywikibot.exceptions.Error
- Make :func:`GoogleSearchPageGenerator<pagegenerators.GoogleSearchPageGenerator>` and :func:`PetScanPageGenerator<pagegenerators.PetScanPageGenerator>` a restartable Generator (:phab:`T313681`, :phab:`T313683`)
- Provide a :class:`collections.GeneratorWrapper<tools.collections.GeneratorWrapper>` class to start/restart a generator (:phab:`T301318`, :phab:`T312654`, :phab:`T312883`)
- tools' itertools functions were moved to :mod:`tools.itertools` submodule
- tools' collections classes were moved to :mod:`tools.collections` submodule
- Set successful login status for the OAuth case (:phab:`T313571`)
22 July 2022
- Add support for blkwiki (:phab:`T310875`)
- L10N Updates
- Fix duplicate source detection in :meth:`pywikibot.WikidataBot.user_add_claim_unless_exists`
- :mod:`pywikibot.textlib`.tzoneFixedOffset class was renamed to :class:`pywikibot.time.TZoneFixedOffset`
- Wrapper method :meth:`parsevalue()<pywikibot.site._datasite.DataSite.parsevalue>` around wbparsevalue was added (:phab:`T112140`, :phab:`T312755`)
- L10N updates
- Fix cp encodings in :func:`get_charset_from_content_type() <comms.http.get_charset_from_content_type>` (:phab:`T312230`)
- New :mod:`pywikibot.time` module with new functions in addition to Timestamp
- :meth:`Page.revisions()<page.BasePage.revisions>` supports more formats/types for starttime and endtime parameters, in addition to those allowed by :meth:`Timestamp.fromISOformat()<pywikibot.Timestamp.fromISOformat>`.
- New :meth:`Timestamp.set_timestamp()<pywikibot.Timestamp.set_timestamp>` method
- Fully ISO8601 and POSIX format support with :class:`pywikibot.Timestamp`; formats are compliant with MediaWiki supported formats
- Handle asynchronous page_put_queue after KeyboardInterrupt in Python 3.9+ (:phab:`T311076`)
- No longer expect a specific namespace alias in cosmetic_changes :meth:`translateAndCapitalizeNamespaces <cosmetic_changes.CosmeticChangesToolkit.translateAndCapitalizeNamespaces>`
26 June 2022
- Provide Built Distribution with Pywikibot (PEP 427)
- Update WRITE_ACTIONS in used by :class:`api.Request<data.api.Request>`
- Move :func:`get_closest_memento_url<data.memento.get_closest_memento_url>` from weblinkchecker script to memento module.
- Add :mod:`memento module<data.memento>` to fix memento_client package (:phab:`T185561`)
- L10N and i18n updates
- Fix Flow board topic continuation when iterating in reverse (:phab:`T138323`)
- Add Avestan transliteration
- Use Response.json() instead of json.loads(Response.text)
- Show an APIError if PetScanPageGenerator.query() fails (:phab:`T309538`)
- login.py is now a utiliy script even for site-package installation (:phab:`T309290`)
- preload_sites.py is now a utiliy script even for site-package installation (:phab:`T308912`)
- :attr:`generator_completed<bot.BaseBot.generator_completed>` became a public attribute
- Return gracefully from pwb.find_alternates if folder in user_script_paths does not exist (:phab:`T308910`)
21 May 2022
- Add support for kcgwiki (:phab:`T305282`)
- Raise InvalidTitleError instead of unspecific ValueError in ProofreadPage (:phab:`T308016`)
- Preload pages if GeneratorFactory.articlenotfilter_list is not empty; also set attribute
is_preloading. - ClaimCollection.toJSON() should not ignore new claim (:phab:`T308245`)
- use linktrail via siteinfo and remove update_linktrails maintenance script
- Print counter statistic for all counters (:phab:`T307834`)
- Use proofreadpagesinindex query module
- Prioritize -namespaces options in pagegenerators.handle_args (:phab:`T222519`)
- Remove ThreadList.stop_all() method (:phab:`T307830`)
- L10N updates
- Improve get_charset_from_content_type function (:phab:`T307760`)
- A tiny cache wrapper was added to hold results of parameterless methods and properties
- Increase workers in preload_sites.py
- Close logging handlers before deleting them (:phab:`T91375`, :phab:`T286127`)
- Clear _sites cache if called with pwb wrapper (:phab:`T225594`)
- Enable short creation of a site if family name is equal to site code
- Use exc_info=True with pywikibot.exception() by default (:phab:`T306762`)
- Make IndexPage more robust when getting links in Page ns (:phab:`T307280`)
- Do not print log header twice in log files (:phab:`T264235`)
- Do not delegate logging output to the root logger (:phab:`T281643`)
- Add get_charset_from_content_type to extract the charset from the content-type response header
26 April 2022
- Make logging system consistent, add pywikibot.info() alias for pywikibot.output() (:phab:`T85620`)
- L10N updates
- Circumvent circular import in tools module (:phab:`T306760`)
- Don't fix html inside syntaxhighlight parts in fixes.py (:phab:`T306723`)
- Make layer parameter optional in :func:`pywikibot.debug()<pywikibot.logging.debug>` (:phab:`T85620`)
- Retry for internal_api_error_DBQueryTimeoutError errors due to :phab:`T297708`
- Handle ParserError within xmlreader.XmlDump.parse() instead of raising an exception (:phab:`T306134`)
- XMLDumpOldPageGenerator is deprecated in favour of a content parameter (:phab:`T306134`)
- use_disambig BaseBot attribute was added to handle disambig skipping
- Deprecate RedirectPageBot and NoRedirectPageBot in favour of use_redirects attribute
- tools.formatter.color_format is deprecated and will be removed
- A new and easier color format was implemented; colors can be used like:
'this is a <<green>>colored<<default>> text'
- Unused and unsupported xmlreader.XmlParserThread was removed
- Use upercased IP user titles (:phab:`T306291`)
- Use pathlib to extract filename and file_package in pwb.py
- Fix isbn messages in fixes.py (:phab:`T306166`)
- Fix Page.revisions() with starttime (:phab:`T109181`)
- Use stream_output for messages inside input_list_choice method (:phab:`T305940`)
- Expand simulate query result (:phab:`T305918`)
- Do not delete text when updating a Revision (:phab:`T304786`)
- Re-enable scripts package version check with pwb wrapper (:phab:`T305799`)
- Provide textlib.ignore_case() as a public method
- Don't try to upcast timestamp from global userinfo if global account does not exists (:phab:`T305351`)
- Archived scripts were removed; create a Phabricator task to restore some (:phab:`T223826`)
- Add Lexeme support for Lexicographical data (:phab:`T189321`, :phab:`T305297`)
- enable all parameters of APISite.imageusage() with FilePage.using_pages()
- Don't raise NoPageError with file_is_shared (:phab:`T305182`)
- Fix URL of GoogleOCR
- Handle ratelimit with purgepages() (:phab:`T152597`)
- Add movesubpages parameter to Page.move() and APISite.movepage() (:phab:`T57084`)
- Do not iterate over sys.modules (:phab:`T304785`)
26 March 2022
- Add FilePage.file_is_used property to determine whether a file is used on a site
- Add support for guwwiki and shnwikivoyage (:phab:`T303762`, :phab:`T302799`)
- TextExtracts support was added (:phab:`T72682`)
- Unused get_redirect parameter of Page.getOldVersion() has been dropped
- Provide BasePage.get_parsed_page() as a public method
- Provide BuiltinNamespace.canonical_namespaces() with BuiltinNamespace IntEnum
- BuiltinNamespace got a canonical() method
- Enable nested templates with MultiTemplateMatchBuilder (:phab:`T110529`)
- Introduce APISite.simple_request as a public method
- Provide an Uploader class to upload files
- Enable use of deletetalk parameter of the delete API
- Fix contextlib redirection for terminal interfaces (:phab:`T283808`)
- No longer use win32_unicode for Python 3.6+ (:phab:`T281042`, :phab:`T283808`, :phab:`T303373`)
- L10N updates
- -cosmetic_changes (-cc) option allows to assign the value directly instead of toggle it
- distutils.util.strtobool() was implemented as tools.strtobool() due to PEP 632
- The "in" operator always return whether the siteinfo contains the key even it is not cached (:phab:`T302859`)
- Siteinfo.clear() and Siteinfo.is_cached() methods were added
26 February 2022
Improvements
- i18n updates for date.py
- Add number transliteration of 'lo', 'ml', 'pa', 'te' to NON_ASCII_DIGITS
- Detect range blocks with Page.is_blocked() method (:phab:`T301282`)
- to_ascii_digits() function was added to textlib as counterpart of to_local_digits() function
- api.Request.submit now handles search-title-disabled and search-text-disabled API Errors
- A show_diff parameter was added to Page.put() and Page.change_category()
- Allow categories when saving IndexPage (:phab:`T299806`)
- Add a new function case_escape to textlib
- Support inheritance of the __STATICREDIRECT__
- Avoid non-deteministic behavior in removeDisableParts
- Update isbn dependency and require python-stdnum >= 1.17
- Synchronize Page.linkedPages() parameters with Site.pagelinks() parameters
- Scripts hash bang was changed from python to python3
- i18n.bundles(), i18n.known_languages and i18n._get_bundle() functions were added
- Raise ConnectionError immediately if urllib3.NewConnectionError occurs (:phab:`T297994`, :phab:`T298859`)
- Make pywikibot messages available with site package (:phab:`T57109`, :phab:`T275981`)
- Add support for API:Redirects
- Enable shell script with Pywikibot site package
- Enable generate_user_files.py and generate_family_file with site-package (:phab:`T107629`)
- Add support for Python 3.11
- Pywikibot supports PyPy 3 (:phab:`T101592`)
- A new method User.is_locked() was added to determine whether the user is currently locked globally (:phab:`T249392`)
- A new method APISite.is_locked() was added to determine whether a given user or user id is locked globally (:phab:`T249392`)
- APISite.get_globaluserinfo() method was added to retrieve globaluserinfo for any user or user id (:phab:`T163629`)
- APISite.globaluserinfo attribute may be deleted to force reload
- APISite.is_blocked() method has a force parameter to reload that info
- Allow family files in base_dir by default
- Make pwb wrapper script a pywikibot entry point for scripts (:phab:`T139143`, :phab:`T270480`)
- Enable -version and --version with pwb wrapper or code entry point (:phab:`T101828`)
- Add title_delimiter_and_aliases attribute to family files to support WikiHow family (:phab:`T294761`)
- BaseBot has a public collections.Counter for reading, writing and skipping a page
- Upload: Retry upload if 'copyuploadbaddomain' API error occurs (:phab:`T294825`)
- Update invisible characters from unicodedata 14.0.0
- Add support for Wikimedia OCR engine with proofreadpage
- Rewrite :func:`tools.itertools.intersect_generators` which makes it running up to 10'000 times faster. (:phab:`T85623`, :phab:`T293276`)
- The cached output functionality from compat release was re-implemented (:phab:`T151727`, :phab:`T73646`, :phab:`T74942`, :phab:`T132135`, :phab:`T144698`, :phab:`T196039`, :phab:`T280466`)
- L10N updates
- Adjust groupsize within pagegenerators.PreloadingGenerator (:phab:`T291770`)
- New "maxlimit" property was added to APISite (:phab:`T291770`)
Bugfixes
- Don't raise an exception if BlockEntry initializer found a hidden title (:phab:`T78152`)
- Fix KeyError in create_warnings_list (:phab:`T301610`)
- Enable similar script call of pwb.py on toolforge (:phab:`T298846`)
- Remove question mark character from forbidden file name characters (:phab:`T93482`)
- Enable -interwiki option with pagegenerators (:phab:`T57099`)
- Don't assert login result (:phab:`T298761`)
- Allow title placeholder $1 in the middle of an url (:phab:`T111513`, :phab:`T298078`)
- Don't create a Site object if pywikibot is not fully imported (:phab:`T298384`)
- Use page.site.data_repository when creating a _WbDataPage (:phab:`T296985`)
- Fix mysql AttributeError for sock.close() on toolforge (:phab:`T216741`)
- Only search user_script_paths inside config.base_dir (:phab:`T296204`)
- pywikibot.argv has been fixed for pwb.py wrapper if called with global args (:phab:`T254435`)
- Only ignore FileExistsError when creating the api cache (:phab:`T295924`)
- Only handle query limit if query module is limited (:phab:`T294836`)
- Upload: Only set filekey/offset for files with names (:phab:`T294916`)
- Make site parameter of textlib.replace_links() mandatory (:phab:`T294649`)
- Raise a generic ServerError if the http status code is unofficial (:phab:`T293208`)
Breaking changes
- Support of Python 3.5.0 - 3.5.2 has been dropped (:phab:`T286867`)
- generate_user_files.py, generate_user_files.py, shell.py and version.py were moved to pywikibot/scripts and must be used with pwb wrapper script
- See also Code cleanups below
Code cleanups
- Deprecated http.get_fake_user_agent() function was removed
- FilePage.fileIsShared() was removed in favour of FilePage.file_is_shared()
- Page.canBeEdited() was removed in favour of Page.has_permission()
- BaseBot.stop() method were removed in favour of BaseBot.generator.close()
- showHelp() function was remove in favour of show_help
- CombinedPageGenerator pagegenerator was removed in favour of itertools.chain
- Remove deprecated echo.Notification.id
- Remove APISite.newfiles() method (:phab:`T168339`)
- Remove APISite.page_exists() method
- Raise a TypeError if BaseBot.init_page return None
- Remove private upload parameters in UploadRobot.upload_file(), FilePage.upload() and APISite.upload() methods
- Raise an Error exception if 'titles' is still used as where parameter in Site.search()
- Deprecated version.get_module_version() function was removed
- Deprecated setOptions/getOptions OptionHandler methods were removed
- Deprecated from_page() method of CosmeticChangesToolkit was removed
- Deprecated diff attribute of CosmeticChangesToolkit was removed in favour of show_diff
- Deprecated namespace and pageTitle parameter of CosmeticChangesToolkit were removed
- Remove deprecated BaseSite namespace shortcuts
- Remove deprecated Family.get_cr_templates method in favour of Site.category_redirects()
- Remove deprecated Page.put_async() method (:phab:`T193494`)
- Ignore baserevid parameter for several DataSite methods
- Remove deprecated preloaditempages method
- Remove disable_ssl_certificate_validation kwargs in http functions in favour of verify parameter (:phab:`T265206`)
- Deprecated PYWIKIBOT2 environment variables were removed
- version.ParseError was removed in favour of exceptions.VersionParseError
- specialbots.EditReplacement and specialbots.EditReplacementError were removed in favour of exceptions.EditReplacementError
- site.PageInUse exception was removed in favour of exceptions.PageInUseError
- page.UnicodeToAsciiHtml and page.unicode2html were removed in favour of tools.chars.string_to_ascii_html and tools.chars.string2html
- interwiki_graph.GraphImpossible and login.OAuthImpossible exception were removed in favour of ImportError
- i18n.TranslationError was removed in favour of exceptions.TranslationError
- WikiaFamily was removed in favour of FandomFamily
- data.api exceptions were removed in favour of exceptions module
- cosmetic_changes CANCEL_ALL/PAGE/METHOD/MATCH constants were removed in favour of CANCEL enum
- pywikibot.__release__ was removed in favour of pywikibot.__version__
- TextfilePageGenerator was replaced by TextIOPageGenerator
- PreloadingItemGenerator was replaced by PreloadingEntityGenerator
- DuplicateFilterPageGenerator was replaced by :func:`tools.itertools.filter_unique`
- ItemPage.concept_url method was replaced by ItemPage.concept_uri
- Outdated parameter names has been dropped
- Deprecated pywikibot.Error exception were removed in favour of pywikibot.exceptions.Error classes (:phab:`T280227`)
- Deprecated exception identifiers were removed (:phab:`T280227`)
- Deprecated date.FormatDate class was removed in favour of date.format_date function
- language_by_size property of wowwiki Family was removed in favour of codes attribute
- availableOptions was removed in favour of available_options
- config2 was removed in favour of config
- tools.RotatingFileHandler was removed in favour of logging.handlers.RotatingFileHandler
- tools.DotReadableDict, tools.LazyRegex and tools.DeprecatedRegex classes were removed
- tools.frozenmap was removed in favour of types.MappingProxyType
- tools.empty_iterator() was removed in favour of iter(())
- tools.concat_options() function was removed in favour of bot_choice.Option
- tools.is_IP was be removed in favour of tools.is_ip_address()
- textlib.unescape() function was be removed in favour of html.unescape()
- APISite.deletepage() and APISite.deleteoldimage() methods were removed in favour of APISite.delete()
- APISite.undeletepage() and APISite.undelete_file_versions() were be removed in favour of APISite.undelete() method
07 February 2022
- L10N updates
27 January 2022
- L10N updates
01 December 2021
- L10N updates
28 October 2021
- L10N updates (:phab:`T292423`, :phab:`T294526`, :phab:`T294527`)
21 September 2021
- Fix for removed action API token parameters of MediaWiki 1.37 (:phab:`T291202`)
- APISite.validate_tokens() no longer replaces outdated tokens (:phab:`T291202`)
- L10N updates
15 September 2021
- Drop piprop from meta=proofreadinfo API call (:phab:`T290585`)
- Remove use_2to3 with setup.py (:phab:`T290451`)
- Unify WbRepresentation's abstract method signature
- L10N updates
05 August 2021
- Add support for jvwikisource (:phab:`T286247`)
- Handle missingtitle error code when deleting
- Check for outdated setuptools in pwb.py wrapper (:phab:`T286980`)
- Remove traceback for original exception for known API error codes
- Unused strm parameter of init_handlers was removed
- Ignore throttle.pid if a Site object cannot be created (:phab:`T286848`)
- Explicitly return an empty string with OutputProxyOption.out property (:phab:`T286403`)
- Explicitly return None from ContextOption.result() (:phab:`T286403`)
- Add support for Lingua Libre family (:phab:`T286303`)
- Catch invalid titles in Category.isCategoryRedirect()
- L10N updates
- Provide structured data on Commons (:phab:`T213904`, :phab:`T223820`)
01 July 2021
- Add support for dagwiki, shiwiki and banwikisource
- Fix and clean up DataSite.get_property_by_name
- Update handling of abusefilter-{disallow,warning} codes (:phab:`T285317`)
- Fix terminal_interface_base.input_list_choice (:phab:`T285597`)
- Fix ItemPage.fromPage call
- Use *iterables instead of genlist in intersect_generators
- Use a sentinel variable to determine the end of an iterable in roundrobin_generators
- Require setuptools 20.8.1 (:phab:`T284297`)
- Add setter and deleter for summary_parameters of AutomaticTWSummaryBot
- L10N updates
- Add update_options attribute to BaseBot class to update available_options
- Clear put_queue when canceling page save (:phab:`T284396`)
- Add -url option to pagegenerators (:phab:`T239436`)
- Add add_text function to textlib (:phab:`T284388`)
- Require setuptools >= 49.4.0 (:phab:`T284297`)
- Require wikitextparser>=0.47.5
- Allow images to upload locally even they exist in the shared repository (:phab:`T267535`)
- Show a warning if pywikibot.__version__ is behind scripts.__version__ (:phab:`T282766`)
- Handle <ce>/<chem> tags as <math> aliases within textlib.replaceExcept() (:phab:`T283990`)
- Expand simulate query response for wikibase support (:phab:`T76694`)
- Double the wait time if ratelimit exceeded (:phab:`T270912`)
- Deprecated extract_templates_and_params_mwpfh and extract_templates_and_params_regex functions were removed
31 May 2021
- Check bot/nobots templates for cosmetic_changes hook (:phab:`T283989`)
- Remove outdated opt._option which is already dropped (:phab:`T284005`)
- Use IntEnum with cosmetic_changes CANCEL
- Remove lru_cache from botMayEdit method and fix it's logic (:phab:`T283957`)
- DataSite.createNewItemFromPage() method was removed in favour of ImagePage.fromPage() (:phab:`T98663`)
- mwparserfromhell or wikitextparser MediaWiki markup parser is mandatory (:phab:`T106763`)
28 May 2021
Improvements and Bugfixes
- Use different logfiles for multiple processes of the same script (:phab:`T56685`)
- throttle.pip will be reused as soon as possibile
- terminal_interface_base.TerminalHandler is subclassed from logging.StreamHandler
- Fix iterating of SizedKeyCollection (:phab:`T282865`)
- An abstract base user interface module was added
- APISite method pagelanglinks() may skip links with empty titles (:phab:`T223157`)
- Fix Page.getDeletedRevision() method which always returned an empty list
- Async chunked uploads are supported (:phab:`T129216`, :phab:`T133443`)
- A new InvalidPageError will be raised if a Page has no version history (:phab:`T280043`)
- L10N updates
- Fix __getattr__ for WikibaseEntity (:phab:`T281389`)
- Handle abusefilter-{disallow,warning} codes (:phab:`T85656`)
Code cleanups
- MultipleSitesBot.site attribute was removed (:phab:`T283209`)
- Deprecated BaseSite.category_namespaces() method was removed
- i18n.twntranslate() function was removed in favour of twtranslate()
- siteinfo must be used as a dictionary ad cannot be called anymore
- APISite.has_transcluded_data() method was removed
- Deprecated LogEntry.title() method was removed
- Deprecated APISite.watchpage() method was removed
- OptionHandler.options dict has been removed in favour of OptionHandler.opt
- The toStdout parameter of ui.output has been dropped
- terminal_interface_base.TerminalFormatter was removed
- Move page functions UnicodeToAsciiHtml, unicode2html, url2unicode to tools.chars with renaming them
- Rename _MultiTemplateMatchBuilder to MultiTemplateMatchBuilder
- User.name() method was removed in favour of User.username property
- BasePage.getLatestEditors() method was removed in favour of contributors() or revisions()
- pagenenerators.handleArg() method was renamed to handle_arg() (:phab:`T271437`)
- CategoryGenerator, FileGenerator, ImageGenerator and ReferringPageGenerator pagegenerator functions were removed
- Family.ignore_certificate_error() method was removed in favour of verify_SSL_certificate (:phab:`T265205`)
- tools.is_IP was renamed to is_ip_address due to PEP 8
- config2.py was renamed to config.py
- Exceptions were renamed having a suffix "Error" due to PEP 8 (:phab:`T280227`)
17 April 2021
Improvements and Bugfixes
- interwiki_graph module was restored (:phab:`T223826`)
- proofreadpage: search for "new" class after purge (:phab:`T280357`)
- Enable different types with BaseBot.treat()
- Context manager depends on pymysql version, not Python release (:phab:`T279753`)
- Bugfix for Site.interwiki_prefix() (:phab:`T188179`)
- Exclude expressions from parsed template in mwparserfromhell (:phab:`T71384`)
- Provide an object representation for DequeGenerator
- Allow deleting any subclass of BasePage by title (:phab:`T278659`)
- Add support for API:Revisiondelete with Site.deleterevs() method (:phab:`T276726`)
- L10N updates
- Family files can be collected from a zip folder (:phab:`T278076`)
Dependencies
- mwparserfromhell or wikitextparser are strictly recommended (:phab:`T106763`)
- Require Pillow>=8.1.1 due to vulnerability found (:phab:`T278743`)
- TkDialog of GUI userinterface requires Python 3.6+ (:phab:`T278743`)
- Enable textlib.extract_templates_and_params with wikitextparser package
- Add support for PyMySQL 1.0.0+
Code cleanups
- APISite.resolvemagicwords(), BaseSite.ns_index() and remove BaseSite.getNamespaceIndex() were removed
- Deprecated MoveEntry.new_ns() and new_title() methods were removed
- Unused NoSuchSite and PageNotSaved exception were removed
- Unused BadTitle exception was removed (:phab:`T267768`)
- getSite() function was removed in favour of Site() constructor
- Page.fileUrl() was removed in favour of Page.get_file_url()
- Deprecated getuserinfo and getglobaluserinfo Site methods were removed
20 March 2021
- Add support for taywiki, trvwiki and mnwwiktionary (:phab:`T275838`, :phab:`T276128`, :phab:`T276250`)
16 March 2021
Breaking changes
- interwiki_graph module was removed (:phab:`T223826`)
- Require setuptools >= 20.2 due to PEP 440
- Support of MediaWiki < 1.23 has been dropped (:phab:`T268979`)
- APISite.loadimageinfo will no longer return any content
- Return requests.Response with http.request() instead of plain text (:phab:`T265206`)
- config.db_hostname has been renamed to db_hostname_format
Code cleanups
- tools.PY2 was removed (:phab:`T213287`)
- Site.language() method was removed in favour of Site.lang property
- Deprecated Page.getMovedTarget() method was removed in favour of moved_target()
- Remove deprecated Wikibase.lastrevid attribute
- config settings of archived scripts were removed (:phab:`T223826`)
- Drop startsort/endsort parameter for site.categorymembers method (:phab:`T74101`)
- Deprecated data attribute of http.fetch() result has been dropped (:phab:`T265206`)
- toStdout parameter of pywikibot.output() has been dropped
- Deprecated Site.getToken() and Site.case was removed
- Deprecated Family.known_families dict was removed (:phab:`T89451`)
- Deprecated DataSite.get_* methods was removed
- Deprecated LogEntryFactory.logtypes classproperty was removed
- Unused comms.threadedhttp module was removed; threadedhttp.HttpRequest was already replaced with requests.Response (:phab:`T265206`)
Other changes
- Raise a SiteDefinitionError if api request response is Non-JSON and site is AutoFamily (:phab:`T272911`)
- Support deleting and undeleting specific file versions (:phab:`T276725`)
- Only add bot option generator if the bot class have it already
- Raise a RuntimeError if pagegenerators -namespace option is provided too late (:phab:`T276916`)
- Check for LookupError exception in http._decide_encoding (:phab:`T276715`)
- Re-enable setting private family files (:phab:`T270949`)
- Move the hardcoded namespace identifiers to an IntEnum
- Buffer 'pageprops' in api.QueryGenerator
- Ensure that BaseBot.generator is a Generator
- Add additional info into log if 'messagecode' is missing during login (:phab:`T261061`, :phab:`T269503`)
- Use hardcoded messages if i18n system is not available (:phab:`T275981`)
- Move wikibase data structures to page/_collections.py
- L10N updates
- Add support for altwiki (:phab:`T271984`)
- Add support for mniwiki and mniwiktionary (:phab:`T273467`, :phab:`T273462`)
- Don't use mime parameter as boolean in api.Request (:phab:`T274723`)
- textlib.removeDisabledPart is able to remove templates (:phab:`T274138`)
- Create a SiteLink with __getitem__ method and implement lazy load (:phab:`T273386`, :phab:`T245809`, :phab:`T238471`, :phab:`T226157`)
- Fix date.formats['MonthName'] behaviour (:phab:`T273573`)
- Implement pagegenerators.handle_args() to process all options at once
- Add enabled_options, disabled_options to GeneratorFactory (:phab:`T271320`)
- Move interwiki() interwiki_prefix() and local_interwiki() methods from BaseSite to APISite
- Add requests.Response.headers to log when an API error occurs (:phab:`T272325`)
24 January 2021
- Use string instead of Path-like object with "open" function in UploadRobot for Python 3.5 compatibility (:phab:`T272345`)
- Add support for trwikivoyage (:phab:`T271263`)
- UI.input_list_choice() has been improved (:phab:`T272237`)
- Global handleArgs() function was removed in favour of handle_args
- Deprecated originPage and foundIn property has been removed in interwiki_graph.py
- ParamInfo modules, prefixes, query_modules_with_limits properties and module_attribute_map() method was removed
- Allow querying alldeletedrevisions with APISite.alldeletedrevisions() and User.deleted_contributions()
- data attribute of http.fetch() response is deprecated (:phab:`T265206`)
- Positional arguments of page.Revision aren't supported any longer (:phab:`T259428`)
- pagenenerators.handleArg() method was renamed to handle_arg() (:phab:`T271437`)
- Page methods deprecated for 6 years were removed
- Create a Site with AutoFamily if a family isn't predefined (:phab:`T249087`)
- L10N updates
12 January 2021
- Add support for niawiki, bclwikt, diqwikt, niawikt (:phab:`T270416`, :phab:`T270282`, :phab:`T270278`, :phab:`T270412`)
- Delete page using pageid instead of title (:phab:`T57072`)
- version.getversion_svn_setuptools function was removed (:phab:`T270393`)
- Add support for "musical notation" data type to wikibase
- -grepnot filter option was added to pagegenerators module (:phab:`T219281`)
- L10N updates
2 January 2021
- Re-enable reading user-config.py from site package (:phab:`T270941`)
- LoginManager.getCookie() was renamed to login_to_site()
- Deprecation warning for MediaWiki < 1.23 (:phab:`T268979`)
- Add backports to support some Python 3.9 changes
- Desupported
iwkeys(),nicepath(),nice_get_address,shared_data_repository()methods andnocapitalizeattribute were removed (:phab:`T89451`) - pywikibot.cookie_jar was removed in favour of pywikibot.comms.http.cookie_jar
- Align http.fetch() params with requests and rename 'disable_ssl_certificate_validation' to 'verify' (:phab:`T265206`)
- Deprecated compat BasePage.getRestrictions() method was removed
- Outdated Site.recentchanges() parameters has been dropped
- site.LoginStatus has been removed in favour of login.LoginStatus
- L10N Updates
19 December 2020
- Allow using pywikibot as site-package without user-config.py (:phab:`T270474`)
- Python 3.10 is supported
- Fix AutoFamily scriptpath() call (:phab:`T270370`)
- Add support for skrwiki, skrwiktionary, eowikivoyage, wawikisource, madwiki (:phab:`T268414`, :phab:`T268460`, :phab:`T269429`, :phab:`T269434`, :phab:`T269442`)
- wikistats methods fetch, raw_cached, csv, xml has been removed
- PageRelatedError.getPage() has been removed in favour of PageRelatedError.page
- DataSite.get_item() method has been removed
- global put_throttle option may be given as float (:phab:`T269741`)
- Property.getType() method has been removed
- Family.server_time() method was removed; it is still available from Site object (:phab:`T89451`)
- All HttpRequest parameters except of charset has been dropped (:phab:`T265206`)
- A lot of methods and properties of HttpRequest are deprecated in favour of requests.Response attributes (:phab:`T265206`)
- Method and properties of HttpRequest are delegated to requests.Response object (:phab:`T265206`)
- comms.threadedhttp.HttpRequest.raw was replaced by HttpRequest.content property (:phab:`T265206`)
- Desupported version.getfileversion() has been removed
- site parameter of comms.http.requests() function is mandatory and cannot be omitted
- date.MakeParameter() function has been removed
- api.Request.http_params() method has been removed
- L10N updates
10 December 2020
- Remove deprecated args for Page.protect() (:phab:`T227610`)
- Move BaseSite its own site/_basesite.py file
- Improve toJSON() methods in page.__init__.py
- _is_wikibase_error_retryable rewritten (:phab:`T48535`, 268645)
- Replace FrozenDict with frozenmap
- WikiStats table may be sorted by any key
- Retrieve month names from mediawiki_messages when required
- Move Namespace and NamespacesDict to site/_namespace.py file
- Fix TypeError in api.LoginManager (:phab:`T268445`)
- Add repr() method to BaseDataDict and ClaimCollection
- Define availableOptions as deprecated property
- Do not strip all whitespaces from Link.title (:phab:`T197642`)
- Introduce a common BaseDataDict as parent for LanguageDict and AliasesDict
- Replaced PageNotSaved by PageSaveRelatedError (:phab:`T267821`)
- Add -site option as -family -code shortcut
- Enable APISite.exturlusage() with default parameters (:phab:`T266989`)
- Update tools._unidata._category_cf from Unicode version 13.0.0
- Move TokenWallet to site/_tokenwallet.py file
- Fix import of httplib after release of requests 2.25 (:phab:`T267762`)
- user keyword parameter can be passed to Site.rollbackpage() (:phab:`T106646`)
- Check for {{bots}}/{{nobots}} templates in Page.text setter (:phab:`T262136`, :phab:`T267770`)
- Remove deprecated UserBlocked exception and Page.contributingUsers()
- Add support for some 'wbset' actions in DataSite
- Fix UploadRobot site attribute (:phab:`T267573`)
- Ignore UnicodeDecodeError on input (:phab:`T258143`)
- Replace 'source' exception regex with 'syntaxhighlight' (:phab:`T257899`)
- Fix get_known_families() for wikipedia_family (:phab:`T267196`)
- Move _InterwikiMap class to site/_interwikimap.py
- instantiate a CosmeticChangesToolkit by passing a page
- Create a Site from sitename
- pywikibot.Site() parameters "interface" and "url" must be keyworded
- Lookup the code parameter in xdict first (:phab:`T255917`)
- Remove interwiki_forwarded_from list from family files (:phab:`T104125`)
- Rewrite Revision class; each data can be accessed either by key or as an attribute (:phab:`T102735`, :phab:`T259428`)
- L10N-Updates
1 November 2020
- Avoid conflicts between site and possible site keyword in api.Request.create_simple() (:phab:`T262926`)
- Remove wrong param of rvision() call in Page.latest_revision_id
- Do not raise Exception in Page.get_best_claim() but follow redirect (:phab:`T265839`)
- xml-support of wikistats will be dropped
- Remove deprecated mime_params in api.Request()
- cleanup interwiki_graph.py and replace deprecated originPage by origin in Subjects
- Upload a file that ends with the 'r' byte (:phab:`T132676`)
- Fix incorrect server time (:phab:`T266084`)
- L10N-Updates
- Support Namespace packages in version.py (:phab:`T265946`)
- Server414Error was added to pywikibot (:phab:`T266000`)
- Deprecated editor.command() method was removed
- comms.PywikibotCookieJar and comms.mode_check_decorator were deleted
- Remove deprecated tools classes Stringtypes and UnicodeType
- Remove deprecated tools function open_compressed and signature and UnicodeType class
- HttpRequest properties were renamed to request.Response identifiers (:phab:`T265206`)
19 October 2020
- Add support for smn-wiki (:phab:`T264962`)
- callback parameter of comms.http.fetch() is desupported
- Fix api.APIError() calls for Flow and Thanks extension
- edit, move, create, upload, unprotect and prompt parameters of Page.protect() are deprecated (:phab:`T227610`)
- Accept only valid names in generate_family_file.py (:phab:`T265328`, :phab:`T265353`)
- New plural.plural_rule() function returns a rule for a given language
- Replace deprecated urllib.request.URLopener with http.fetch (:phab:`T255575`)
- OptionHandler/BaseBot options are accessible as OptionHandler.opt attributes or keyword item (see also :phab:`T264721`)
- pywikibot.setAction() function was removed
- A namedtuple is the result of textlib.extract_sections()
- Prevent circular imports in config2.py and http.py (:phab:`T264500`)
- version.get_module_version() is deprecated and gives no meaningful result
- Fix version.get_module_filename() and update log lines (:phab:`T264235`)
- Re-enable printing log header (:phab:`T264235`)
- Fix result of :func:`tools.itertools.intersect_generators` (:phab:`T263947`)
- Only show _GLOBAL_HELP options if explicitly wanted
- Deprecated Family.version() methods were removed
- Unused parameters of page methods like forceReload, insite, throttle, step was removed
- Raise RuntimeError instead of AttributeError for old wikis (:phab:`T263951`)
- Deprecated script options were removed
- lyricwiki_family was removed (:phab:`T245439`)
- RecentChangesPageGenerator parameters has been synced with APISite.recentchanges
- APISite.recentchanges accepts keyword parameters only
- LoginStatus enum class was moved from site to login.py
- WbRepresentation derives from abstract base class abc.ABC
- Update characters in the Cf category to Unicode version 12.1.0
- Update __all__ variable in pywikibot (:phab:`T122879`)
- Use api.APIGenerator through site._generator (:phab:`T129013`)
- Support of MediaWiki releases below 1.19 has been dropped (:phab:`T245350`)
- Page.get_best_claim () retrieves preferred Claim of a property referring to the given page (:phab:`T175207`)
- Check whether _putthead is current_thread() to join() (:phab:`T263331`)
- Add BasePage.has_deleted_revisions() method
- Allow querying deleted revs without the deletedhistory right
- Use ignore_discard for login cookie container (:phab:`T261066`)
- Siteinfo.get() loads data via API instead from cache if expiry parameter is True (:phab:`T260490`)
- Move latest revision id handling to WikibaseEntity (:phab:`T233406`)
- Load wikibase entities when necessary (:phab:`T245809`)
- Fix path for stable release in version.getversion() (:phab:`T262558`)
- "since" parameter in EventStreams given as Timestamp or MediaWiki timestamp string has been fixed
- Methods deprecated for 6 years or longer were removed
- Page.getVersionHistory and Page.fullVersionHistory() methods were removed (:phab:`T136513`, :phab:`T151110`)
- Allow multiple types of contributors parameter given for Page.revision_count()
- Deprecated tools.UnicodeMixin and tools.IteratorNextMixin has been removed
- Localisation updates
2 September 2020
- Don't check for valid Family/Site if running generate_user_files.py (:phab:`T261771`)
- Remove socket_timeout fix in config2.py introduced with :phab:`T103069`
- Prevent huge traceback from underlying python libraries (:phab:`T253236`)
- Localisation updates
28 August 2020
- Add support for ja.wikivoyage (:phab:`T261450`)
- Only run cosmetic changes on wikitext pages (:phab:`T260489`)
- Leave a script gracefully for wrong -code and -family option (:phab:`T259756`)
- Change meaning of BasePage.text (:phab:`T260472`)
- site/family methods code2encodings() and code2encoding() has been removed in favour of encoding()/encodings() methods
- Site.getExpandedString() method was removed in favour of expand_text
- Site.Family() function was removed in favour of Family.load() method
- Add wikispore family (:phab:`T260049`)
18 August 2020
- Add support for lldwiki to Pywikibot
- Fix getversion_git subprocess command
16 August 2020
- Enable Pywikibot for Python 3.9
- APISite.loadpageinfo does not discard changes to page content when information was not loaded (:phab:`T260472`)
- tools.UnicodeType and tools.signature are deprecated
- BaseBot.stop() method is deprecated in favour of BaseBot.generator.close()
- Escape bot password correctly (:phab:`T259488`)
- Bugfixes and improvements
- Localisation updates
4 August 2020
- Read correct object in SiteLinkCollection.normalizeData (:phab:`T259426`)
- tools.count and tools classes Counter, OrderedDict and ContextManagerWrapper were removed
- Deprecate UnicodeMixin and IteratorNextMixin
- Restrict site module interface
- EventStreams "since" parameter settings has been fixed
- Unsupported debug and uploadByUrl parameters of UploadRobot were removed
- Unported compat decode parameter of Page.title() has been removed
- Wikihow family file was added (:phab:`T249814`)
- Improve performance of CosmeticChangesToolkit.translateMagicWords
- Prohibit positional arguments with Page.title()
- Functions dealing with stars list were removed
- Some pagegenerators functions were deprecated which should be replaced by site generators
- LogEntry became a UserDict; all content can be accessed by its key
- URLs for new toolforge.org domain were updated
- pywikibot.__release__ was deprecated
- Use one central point for framework version (:phab:`T106121`, :phab:`T171886`, :phab:`T197936`, :phab:`T253719`)
- rvtoken parameter of Site.loadrevisions() and Page.revisions() has been dropped (:phab:`T74763`)
- getFilesFromAnHash and getImagesFromAnHash Site methods have been removed
- Site and Page methods deprecated for 10 years or longer have been removed
- Support for Python 2 and 3.4 has been dropped (:phab:`T213287`, :phab:`T239542`)
- Bugfixes and improvements
- Localisation updates
3 July 2020
- Page.botMayEdit() method was improved (:phab:`T253709`)
- PageNotFound, SpamfilterError, UserActionRefuse exceptions were removed (:phab:`T253681`)
- tools.ip submodule has been removed (:phab:`T243171`)
- Wait in BaseBot.exit() until asynchronous saving pages are completed
- Solve IndexError when showing an empty diff with a non-zero context (:phab:`T252724`)
- linktrails were added or updated for a lot of sites
- Resolve namespaces with underlines (:phab:`T252940`)
- Fix getversion_svn for Python 3.6+ (:phab:`T253617`, :phab:`T132292`)
- Bugfixes and improvements
- Localisation updates
9 June 2020
- Fix page_can_be_edited for MediaWiki < 1.23 (:phab:`T254623`)
- Show global options with pwb.py -help
- Usage of SkipPageError with BaseBot has been removed
- Throttle requests after ratelimits exceeded (:phab:`T253180`)
- Make Pywikibot daemon logs unexecutable (:phab:`T253472`)
- Check for missing generator after BaseBot.setup() call
- Do not change usernames when creating a Site (:phab:`T253127`)
- pagegenerators: handle protocols in -weblink (:phab:`T251308`, :phab:`T251310`)
- Bugfixes and improvements
- Localisation updates
8 May 2020
- Unify and extend formats for setting sitelinks (:phab:`T225863`, :phab:`T251512`)
- Do not return a random i18n.translation() result (:phab:`T220099`)
- tools.ip_regexp has been removed (:phab:`T174482`)
- Page.getVersionHistory and Page.fullVersionHistory() methods has been desupported (:phab:`T136513`, :phab:`T151110`)
- Update wikimediachapter_family (:phab:`T250802`)
- Raise SpamblacklistError with spamblacklist APIError (:phab:`T249436`)
- SpamfilterError was renamed to SpamblacklistError (:phab:`T249436`)
- Do not removeUselessSpaces inside source/syntaxhighlight tags (:phab:`T250469`)
- Restrict Pillow to 6.2.2+ (:phab:`T249911`)
- Fix PetScan generator language and project (:phab:`T249704`)
- Bugfixes and improvements
- Localisation updates
5 April 2020
- Fix regression of combining sys.path in pwb.py wrapper (:phab:`T249427`)
- Site and Page methods deprecated for 10 years or longer are desupported and may be removed (:phab:`T106121`)
- Usage of SkipPageError with BaseBot is desupported and may be removed
- Ignore InvalidTitle in textlib.replace_links() (:phab:`T122091`)
- Raise ServerError also if connection to PetScan timeouts
- pagegenerators.py no longer supports 'oursql' or 'MySQLdb'. It now solely supports PyMySQL (:phab:`T243154`, :phab:`T89976`)
- Dysfunctional Family.versionnumber() method was removed
- Refactor login functionality (:phab:`T137805`, :phab:`T224712`, :phab:`T248767`, :phab:`T248768`, :phab:`T248945`)
- Bugfixes and improvements
- Localisation updates
26 March 2020
- site.py and page.py files were moved to their own folders and will be split in the future
- Refactor data attributes of Wikibase entities (:phab:`T233406`)
- Functions dealing with stars list are desupported and may be removed
- Use path's stem of script filename within pwb.py wrapper (:phab:`T248372`)
- Dysfunctional cgi_interface.py was removed (:phab:`T248292`, :phab:`T248250`, :phab:`T193978`)
- Fix logout on MW < 1.24 (:phab:`T214009`)
- Fixed TypeError in getFileVersionHistoryTable method (:phab:`T248266`)
- Outdated secure connection overrides were removed (:phab:`T247668`)
- Check for all modules which are needed by a script within pwb.py wrapper
- Check for all modules which are mandatory within pwb.py wrapper script
- Enable -help option with similar search of pwb.py (:phab:`T241217`)
- compat module has been removed (:phab:`T183085`)
- Category.copyTo and Category.copyAndKeep methods have been removed
- Site.page_restrictions() does no longer raise NoPage (:phab:`T214286`)
- Use site.userinfo getter instead of site._userinfo within api (:phab:`T243794`)
- Fix endprefix parameter in Category.articles() (:phab:`T247201`)
- Fix search for changed claims when saving entity (:phab:`T246359`)
- backports.py has been removed (:phab:`T244664`)
- Site.has_api method has been removed (:phab:`T106121`)
- Bugfixes and improvements
- Localisation updates
6 March 2020
- Fix mul Wikisource aliases (:phab:`T242537`, :phab:`T241413`)
- Let Site('test', 'test) be equal to Site('test', 'wikipedia') (:phab:`T228839`)
- Support of MediaWiki releases below 1.19 will be dropped (:phab:`T245350`)
- Provide mediawiki_messages for foreign language codes
- Use mw API IP/anon user detection (:phab:`T245318`)
- Correctly choose primary coordinates in BasePage.coordinates() (:phab:`T244963`)
- Rewrite APISite.page_can_be_edited (:phab:`T244604`)
- compat module is deprecated for 5 years and will be removed in next release (:phab:`T183085`)
- ipaddress module is required for Python 2 (:phab:`T243171`)
- tools.ip will be dropped in favour of tools.is_IP (:phab:`T243171`)
- tools.ip_regexp is deprecatd for 5 years and will be removed in next release
- backports.py will be removed in next release (:phab:`T244664`)
- stdnum package is required for ISBN scripts and cosmetic_changes (:phab:`T132919`, :phab:`T144288`, :phab:`T241141`)
- preload urllib.quote() with Python 2 (:phab:`T243710`, :phab:`T222623`)
- Drop isbn_hyphenate package due to outdated data (:phab:`T243157`)
- Fix UnboundLocalError in ProofreadPage._ocr_callback (:phab:`T243644`)
- Deprecate/remove sysop parameter in several methods and functions
- Refactor Wikibase entity namespace handling (:phab:`T160395`)
- Site.has_api method will be removed in next release
- Category.copyTo and Category.copyAndKeep will be removed in next release
- weblib module has been removed (:phab:`T85001`)
- botirc module has been removed (:phab:`T212632`)
- Bugfixes and improvements
- Localisation updates
11 January 2020
- Fix broken get_version() in setup.py (:phab:`T198374`)
- Rewrite site.log_page/site.unlock_page implementation
- Require requests 2.20.1 (:phab:`T241934`)
- Make bot.suggest_help a function
- Fix gui settings for Python 3.7.4+ (:phab:`T241216`)
- Better api error message handling (:phab:`T235500`)
- Ensure that required props exists as Page attribute (:phab:`T237497`)
- Refactor data loading for WikibaseEntities (:phab:`T233406`)
- replaceCategoryInPlace: Allow LRM and RLM at the end of the old_cat title (:phab:`T240084`)
- Support for Python 3.4 will be dropped (:phab:`T239542`)
- Derive LoginStatus from IntEnum (:phab:`T213287`, :phab:`T239533`)
- enum34 package is mandatory for Python 2.7 (:phab:`T213287`)
- call LoginManager with keyword arguments (:phab:`T237501`)
- Enable Pywikibot for Python 3.8 (:phab:`T238637`)
- Derive BaseLink from tools.UnicodeMixin (:phab:`T223894`)
- Make _flush aware of _putthread ongoing tasks (:phab:`T147178`)
- Add family file for foundation wiki (:phab:`T237888`)
- Fix generate_family_file.py for private wikis (:phab:`T235768`)
- Add rank parameter to Claim initializer
- Add current directory for similar script search (:phab:`T217195`)
- Release BaseSite.lock_page mutex during sleep
- Implement deletedrevisions api call (:phab:`T75370`)
- assert_valid_iter_params may raise AssertionError instead of pywikibot.Error (:phab:`T233582`)
- Upcast getRedirectTarget result and return the appropriate page subclass (:phab:`T233392`)
- Add ListGenerator for API:filearchive to site module (:phab:`T230196`)
- Deprecate the ability to login with a secondary sysop account (:phab:`T71283`)
- Enable global args with pwb.py wrapper script (:phab:`T216825`)
- Add a new ConfigParserBot class to set options from the scripts.ini file (:phab:`T223778`)
- Check a user's rights rather than group memberships; 'sysopnames' will be deprecated (:phab:`T229293`, :phab:`T189126`, :phab:`T122705`, :phab:`T119335`, :phab:`T75545`)
- proofreadpage.py: fix footer detection (:phab:`T230301`)
- Add allowusertalk to the User.block() options (:phab:`T229288`)
- botirc module will be removed in next release (:phab:`T212632`)
- weblib module will be removed in next release (:phab:`T85001`)
- Bugfixes and improvements
- Localisation updates
22 July 2019
- Increase the throttling delay if maxlag >> retry-after (:phab:`T210606`)
- Add "user_agent_description" option in config.py
- APISite.fromDBName works for all known dbnames (:phab:`T225590`, 225723, 226960)
- remove the unimplemented "proxy" variable in config.py
- Make Family.langs property more robust (:phab:`T226934`)
- Remove strategy family
- Handle closed_wikis as read-only (:phab:`T74674`)
- TokenWallet: login automatically
- Add closed_wikis to Family.langs property (:phab:`T225413`)
- Redirect 'mo' site code to 'ro' and remove interwiki_replacement_overrides (:phab:`T225417`, :phab:`T89451`)
- Add support for badges on Wikibase item sitelinks through a SiteLink object instead plain str (:phab:`T128202`)
- Remove login.showCaptchaWindow() method
- New parameter supplied in suggest_help function for missing dependencies
- Remove NonMWAPISite class
- Introduce Claim.copy and prevent adding already saved claims (:phab:`T220131`)
- Fix create_short_link method after MediaWiki changes (:phab:`T223865`)
- Validate proofreadpage.IndexPage contents before saving it
- Refactor Link and introduce BaseLink (:phab:`T66457`)
- Count skipped pages in BaseBot class
- 'actionthrottledtext' is a retryable wikibase error (:phab:`T192912`)
- Clear tokens on logout(:phab:`T222508`)
- Deprecation warning: support for Python 2 will be dropped (:phab:`T213287`)
- botirc.IRCBot has been dropped
- Avoid using outdated browseragents (:phab:`T222959`)
- textlib: avoid infinite execution of regex (:phab:`T222671`)
- Add CSRF token in sitelogout() api call (:phab:`T222508`)
- Refactor WikibasePage.get and overriding methods and improve documentation
- Improve title patterns of WikibasePage extensions
- Add support for property creation (:phab:`T160402`)
- Bugfixes and improvements
- Localisation updates
30 April 2019
- Unicode literals are required for all scripts; the usage of ASCII bytes may fail (:phab:`T219095`)
- Don't fail if the number of forms of a plural string is less than required (:phab:`T99057`, :phab:`T219097`)
- Implement create_short_link Page method to use Extension:UrlShortener (:phab:`T220876`)
- Remove wikia family file (:phab:`T220921`)
- Remove deprecated ez_setup.py
- Changed requirements for sseclient (:phab:`T219024`)
- Set optional parameter namespace to None in site.logpages (:phab:`T217664`)
- Add ability to display similar scripts when misspelled (:phab:`T217195`)
- Check if QueryGenerator supports namespaces (:phab:`T198452`)
- Bugfixes and improvements
- Localisation updates
1 March 2019
- Fix version comparison (:phab:`T164163`)
- Remove pre MediaWiki 1.14 code
- Dropped support for Python 2.7.2 and 2.7.3 (:phab:`T191192`)
- Fix header regex beginning with a comment (:phab:`T209712`)
- Implement Claim.__eq__ (:phab:`T76615`)
- cleanup config2.py
- Add missing Wikibase API write actions
- Bugfixes and improvements
- Localisation updates
4 February 2019
- Support python version 3.7
- pagegenerators.py: add -querypage parameter to yield pages provided by any special page (:phab:`T214234`)
- Fix comparison of str, bytes and int literal
- site.py: add generic self.querypage() to query SpecialPages
- echo.Notification has a new event_id property as integer
- Bugfixes and improvements
- Localisation updates
6 January 2019
- Ensure "modules" parameter of ParamInfo._fetch is a set (:phab:`T122763`)
- Support adding new claims with qualifiers and/or references (:phab:`T112577`, :phab:`T170432`)
- Support LZMA and XZ compression formats
- Update correct-ar Typo corrections in fixes.py (:phab:`T211492`)
- Enable MediaWiki timestamp with EventStreams (:phab:`T212133`)
- Convert Timestamp.fromtimestampformat() if year, month and day are given only
- tools.concat_options is deprecated
- Additional ListOption subclasses ShowingListOption, MultipleChoiceList, ShowingMultipleChoiceList
- Bugfixes and improvements
- Localisation updates
3 December 2018
- Remove compat module references from autogenerated docs (:phab:`T183085`)
- site.preloadpages: split pagelist in most max_ids elements (:phab:`T209111`)
- Disable empty sections in cosmetic_changes for user namespace
- Prevent touch from re-creating pages (:phab:`T193833`)
- New Page.title() parameter without_brackets; also used by titletranslate (:phab:`T200399`)
- Security: require requests version 2.20.0 or later (:phab:`T208296`)
- Check appropriate key in Site.messages (:phab:`T163661`)
- Make sure the cookie file is created with the right permissions (:phab:`T206387`)
- pydot >= 1.2 is required for interwiki_graph
- Move methods for simple claim adding/removing to WikibasePage (:phab:`T113131`)
- Enable start timestamp for EventStreams (:phab:`T205121`)
- Re-enable notifications (:phab:`T205184`)
- Use FutureWarning for warnings intended for end users (:phab:`T191192`)
- Provide new -wanted... page generators (:phab:`T56557`, :phab:`T150222`)
- api.QueryGenerator: Handle slots during initialization (:phab:`T200955`, :phab:`T205210`)
- Bugfixes and improvements
- Localisation updates
22 September 2018
- Enable multiple streams for EventStreams (:phab:`T205114`)
- Fix Wikibase aliases handling (:phab:`T194512`)
- Remove cryptography support from python<=2.7.6 requirements (:phab:`T203435`)
- textlib._tag_pattern: Do not mistake self-closing tags with start tag (:phab:`T203568`)
- page.Link.langlinkUnsafe: Always set _namespace to a Namespace object (:phab:`T203491`)
- Enable Namespace.content for mw < 1.16
- Allow terminating the bot generator by BaseBot.stop() method (:phab:`T198801`)
- Allow bot parameter in set_redirect_target
- Do not show empty error messages (:phab:`T203462`)
- Show the exception message in async mode (:phab:`T203448`)
- Fix the extended user-config extraction regex (:phab:`T145371`)
- Solve UnicodeDecodeError in site.getredirtarget (:phab:`T126192`)
- Introduce a new APISite property: mw_version
- Improve hash method for BasePage and Link
- Avoid applying two uniquifying filters (:phab:`T199615`)
- Fix skipping of language links in CosmeticChangesToolkit.removeEmptySections (:phab:`T202629`)
- New mediawiki projects were provided
- Bugfixes and improvements
- Localisation updates
23 August 2018
- Don't reset Bot._site to None if we have already a site object (:phab:`T125046`)
- pywikibot.site.Siteinfo: Fix the bug in cache_time when loading a CachedRequest (:phab:`T202227`)
- pagegenerators._handle_recentchanges: Do not request for reversed results (:phab:`T199199`)
- Use a key for filter_unique where appropriate (:phab:`T199615`)
- pywikibot.tools: Add exceptions for first_upper (:phab:`T200357`)
- Fix usages of site.namespaces.NAMESPACE_NAME (:phab:`T201969`)
- pywikibot/textlib.py: Fix header regex to allow comments
- Use 'rvslots' when fetching revisions on MW 1.32+ (:phab:`T200955`)
- Drop the '2' from PYWIKIBOT2_DIR, PYWIKIBOT2_DIR_PWB, and PYWIKIBOT2_NO_USER_CONFIG environment variables. The old names are now deprecated. The other PYWIKIBOT2_* variables which were used only for testing purposes have been renamed without deprecation. (:phab:`T184674`)
- Introduce a timestamp in deprecated decorator (:phab:`T106121`)
- textlib.extract_sections: Remove footer from the last section (:phab:`T199751`)
- Don't let WikidataBot crash on save related errors (:phab:`T199642`)
- Allow different projects to have different L10N entries (:phab:`T198889`)
- remove color highlights before fill function (:phab:`T196874`)
- Fix Portuguese file namespace translation in cc (:phab:`T57242`)
- textlib._create_default_regexes: Avoid using inline flags (:phab:`T195538`)
- Not everything after a language link is footer (:phab:`T199539`)
- code cleanups
- New mediawiki projects were provided
- Bugfixes and improvements
- Localisation updates
10 July 2018
- Enable any LogEntry subclass for each logevent type (:phab:`T199013`)
- Deprecated pagegenerators options -<logtype>log aren't supported any longer (:phab:`T199013`)
- Open RotatingFileHandler with utf-8 encoding (:phab:`T188231`)
- Fix occasional failure of TestLogentries due to hidden namespace (:phab:`T197506`)
- Remove multiple empty sections at once in cosmetic_changes (:phab:`T196324`)
- Fix stub template position by putting it above interwiki comment (:phab:`T57034`)
- Fix handling of API continuation in PropertyGenerator (:phab:`T196876`)
- Use PyMySql as pure-Python MySQL client library instead of oursql, deprecate MySQLdb (:phab:`T89976`, :phab:`T142021`)
- Ensure that BaseBot.treat is always processing a Page object (:phab:`T196562`, :phab:`T196813`)
- Update global bot settings
- New mediawiki projects were provided
- Bugfixes and improvements
- Localisation updates
3 June 2018
- Move main categories to top in cosmetic_changes
- shell.py always imports pywikibot as default
- New roundrobin_generators in tools
- New BaseBot method "skip_page" to adjust page counting
- Family class is made a singleton class
- New rule 'startcolon' was introduced in textlib
- BaseBot has new methods setup and teardown
- UploadBot got a filename prefix parameter (:phab:`T170123`)
- cosmetic_changes is able to remove empty sections (:phab:`T140570`)
- Pywikibot is following PEP 396 versioning
- CombinedPageGenerator is deprecated, itertools.chain can be used instead
- Some DayPageGenerator parameters has been renamed
- unicodedata2, httpbin and Flask dependency was removed (:phab:`T102461`, :phab:`T108068`, :phab:`T178864`, :phab:`T193383`)
- New projects were provided
- Bugfixes and improvements
- Documentation updates
- Localisation updates (:phab:`T194893`)
- Translation updates
5 May 2018
- Enable makepath and datafilepath not to create the directory
- Use API's retry-after value (:phab:`T144023`)
- Provide startprefix parameter for Category.articles() (:phab:`T74101`, :phab:`T143120`)
- Page.put_async() is marked as deprecated (:phab:`T193494`)
- Deprecate requests-requirements.txt (:phab:`T193476`)
- Bugfixes and improvements
- New mediawiki projects were provided
- Localisation updates
3 April 2018
- Deprecation warning: support for Python 2.7.2 and 2.7.3 will be dropped (:phab:`T191192`)
- Dropped support for Python 2.6 (:phab:`T154771`)
- Dropped support for Python 3.3 (:phab:`T184508`)
- Bugfixes and improvements
- Localisation updates
4 March 2018
- Bugfixes and improvements
- Localisation updates
2 March 2018
- Changed requirements for requests and sseclient
- Bugfixes and improvements
- Localisation updates
4 February 2018
- Deprecation warning: support for py2.6 and py3.3 will be dropped
- Changed requirements for cryprography, Pillow and pyOpenSSL
- Bugfixes and improvements
- Localisation updates
8 January 2018
- Maintenance script to download Wikimedia database dump
- Option to auto-create accounts when logging in
- Ship wikimania family file
- Drop battlestarwiki family file
- Bugfixes and improvements
- Localisation updates
12 December 2017
- Introduce userscripts directory
- Generator settings inside (user-)fixes.py
- BaseUnlinkBot has become part of the framework in specialbots.py
- Decommission of rcstream
- Script files added to https://doc.wikimedia.org/pywikibot/
- Other documentation updates
- Bugfixes and improvements
- Localisation updates
1 August 2017
- Bugfixes and improvements
- Localisation updates
13 July 2017
- Deprecate APISite.newfiles()
- Inverse of pagegenerators -namespace option
- Bugfixes and improvements
- Localisation updates
- CODE_OF_CONDUCT included
Bugfixes
- Manage temporary readonly error (:phab:`T154011`)
- Unbreak wbGeoShape and WbTabularData (:phab:`T166362`)
- Clean up issue with _WbDataPage (:phab:`T166362`)
- Re-enable xml for WikiStats with py2 (:phab:`T165830`)
- Solve httplib.IncompleteRead exception in eventstreams (:phab:`T168535`)
- Only force input_choice if self.always is given (:phab:`T161483`)
- Add colon when replacing category and file weblink (:phab:`T127745`)
- API Request: set uiprop only when ensuring 'userinfo' in meta (:phab:`T169202`)
Improvements
- Introduce the new WbUnknown data type for Wikibase (:phab:`T165961`)
- djvu.py: add replace_page() and delete_page()
- Build GeoShape and TabularData from shared base class
- Remove non-breaking spaces when tidying up a link (:phab:`T130818`)
- Replace private mylang variables with mycode in generate_user_files.py
- FilePage: remove deprecated use of fileUrl
- Make socket_timeout recalculation reusable (:phab:`T166539`)
- FilePage.download(): add revision parameter to download arbitrary revision (:phab:`T166939`)
- Make pywikibot.Error more precise (:phab:`T166982`)
- Implement pywikibot support for adding thanks to normal revisions (:phab:`T135409`)
- Implement server side event client EventStreams (:phab:`T158943`)
- new pagegenerators filter option -titleregexnot
- Add exception for -namespace option (:phab:`T167580`)
- InteractiveReplace: Allow no replacements by default
- Encode default globe in family file
- Add on to pywikibot support for thanking normal revisions (:phab:`T135409`)
- Add log entry code for thanks log (:phab:`T135413`)
- Create superclass for log entries with user targets
- Use relative reference to class attribute
- Allow pywikibot to authenticate against a private wiki (:phab:`T153903`)
- Make WbRepresentations hashable (:phab:`T167827`)
Updates
- Update linktails
- Update languages_by_size
- Update cross_allowed (global bot wikis group)
- Add atjwiki to wikipedia family file (:phab:`T168049`)
- remove closed sites from languages_by_size list
- Update category_redirect_templates for wikipedia and commons Family
- Update logevent type parameter list
- Disable cleanUpSectionHeaders on jbo.wiktionary (:phab:`T168399`)
- Add kbpwiki to wikipedia family file (:phab:`T169216`)
- Remove anarchopedia family out of the framework (:phab:`T167534`)
21 May 2017
- Support for Python 2.6 but higher releases are strictly recommended
- Bugfixes and improvements
- Localisation updates
Bugfixes
- Increase the default socket_timeout to 75 seconds (:phab:`T163635`)
- use repr() of exceptions to prevent UnicodeDecodeErrors (:phab:`T120222`)
- Handle offset mismatches during chunked upload (:phab:`T156402`)
- Correct _wbtypes equality comparison (:phab:`T160282`)
- Re-enable getFileVersionHistoryTable() method (:phab:`T162528`)
- Replaced the word 'async' with 'asynchronous' due to py3.7 (:phab:`T106230`)
- Raise ImportError if no editor is available (:phab:`T163632`)
- templatesWithParams: cache and standardise params (:phab:`T113892`)
- getInternetArchiveURL: Retry http.fetch if there is a ConnectionError (:phab:`T164208`)
- Remove wikidataquery from pywikibot (:phab:`T162585`)
Improvements
- Introduce user_add_claim and allow asynchronous ItemPage.addClaim (:phab:`T87493`)
- Enable private edit summary in specialbots (:phab:`T162527`)
- Make a decorator for asynchronous methods
- Provide options by a separate handler class
- Show a warning when a LogEntry type is not known (:phab:`T135505`)
- Add Wikibase Client extension requirement to APISite.unconnectedpages()
- Update content after editing entity
- Make WbTime from Timestamp and vice versa (:phab:`T131624`)
- Add support for geo-shape Wikibase data type (:phab:`T161726`)
- Add async parameter to ItemPage.editEntity (:phab:`T86074`)
- Make sparql use Site to access sparql endpoint and entity_url (:phab:`T159956`)
- timestripper: search wikilinks to reduce false matches
- Set Coordinate globe via item
- use extract_templates_and_params_regex_simple for template validation
- Add _items for WbMonolingualText
- Allow date-versioned pypi releases from setup.py (:phab:`T152907`)
- Provide site to WbTime via WbTime.fromWikibase
- Provide preloading via GeneratorFactory.getCombinedGenerator() (:phab:`T135331`)
- Accept QuitKeyboardInterrupt in specialbots.Uploadbot (:phab:`T163970`)
- Remove unnecessary description change message when uploading a file (:phab:`T163108`)
- Add 'OptionHandler' to bot.__all__ tuple
- Use FilePage.upload inside UploadRobot
- Add support for tabular-data Wikibase data type (:phab:`T163981`)
- Get thumburl information in FilePage() (:phab:`T137011`)
Updates
- Update languages_by_size in family files
- wikisource_family.py: Add "pa" to languages_by_size
- Config2: limit the number of retries to 15 (:phab:`T165898`)
3 April 2017
- First major release from master branch
- requests package is mandatory
- Deprecate previous 2.0 branches and tags
Bugfixes
- Use default summary when summary value does not contain a string (:phab:`T160823`)
- Enable specialbots.py for PY3 (:phab:`T161457`)
- Change tw(n)translate from Site.code to Site.lang dependency (:phab:`T140624`)
- Do not use the "imp" module in Python 3 (:phab:`T158640`)
- Make sure the order of parameters does not change (:phab:`T161291`)
- Use pywikibot.tools.Counter instead of collections.Counter (:phab:`T160620`)
- Introduce a new site method page_from_repository()
- Add pagelist tag for replaceExcept (:phab:`T151940`)
- logging in python3 when deprecated_args decorator is used (:phab:`T159077`)
- Avoid ResourceWarning using subprocess in python 3.6 (:phab:`T159646`)
- load_pages_from_pageids: do not fail on empty string (:phab:`T153592`)
- Add missing not-equal comparison for wbtypes (:phab:`T158848`)
- textlib.getCategoryLinks catch invalid category title exceptions (:phab:`T154309`)
- Fix html2unicode (:phab:`T130925`)
- Ignore first letter case on 'first-letter' sites, obey it otherwise (:phab:`T130917`)
- textlib.py: Limit catastrophic backtracking in FILE_LINK_REGEX (:phab:`T148959`)
- FilePage.get_file_history(): Check for len(self._file_revisions) (:phab:`T155740`)
- Fix for positional_arg behavior of GeneratorFactory (:phab:`T155227`)
- Fix broken LDAP based login (:phab:`T90149`)
Improvements
- Simplify User class
- Renamed isImage and isCategory
- Add -property option to pagegenerators.py
- Add a new site method pages_with_property
- Allow retrieval of unit as ItemPage for WbQuantity (:phab:`T143594`)
- return result of userPut with put_current method
- Provide a new generator which yields a subclass of Page
- Implement FilePage.download()
- make general function to compute file sha
- Support adding units to WbQuantity through ItemPage or entity url (:phab:`T143594`)
- Make PropertyPage.get() return a dictionary
- Add Wikibase Client extension requirement to APISite.unconnectedpages()
- Make Wikibase Property provide labels data
- APISite.data_repository(): handle warning with re.match() (:phab:`T156596`)
- GeneratorFactory: make getCategory respect self.site (:phab:`T155687`)
- Fix and improve default regexes
Updates
- Update linktrails
- Update languages_by_size
- Updating global bot wikis, closed wikis and deleted wikis
- Deprecate site.has_transcluded_data
- update plural rules
- Correcting month names in date.py for Euskara (eu)
- Linktrail for Euskara
- Define template documentation subpages for es.wikibooks
- self.doc_subpages for Meta-Wiki
- Updating Wikibooks projects which allows global bots
- Updated list of closed projects
- Add 'Bilde' as a namespace alias for file namespace of nn Wikipedia (:phab:`T154947`)
17 August 2016
- Last stable 2.0 branch
Bugfixes
- Establish the project's name, once and for all
- setup.py: Add Python 3.4 and 3.5 to pypi classifiers
- Remove item count output in page generators
- Test Python 3.5 on Travis
- Fix docstring capitalization in return types and behavior
- Stop reading 'cookieprefix' upon login
- Fix travis global environment variables
- Fix notifications building from JSON
- pywikibot: Store ImportError in imported variable
- Use default tox pip install
- Add asteroids that are being used as locations
- Fix ID for Rhea
- [bugfix] pass User page object to NotEmailableError
- Allow pywikibot to run on Windows 10 as well
- listpages.py: Fix help docstring
- pwb.py: make sure pywikibot is correctly loaded before starting a script
- win32_unicode: force truetype font in console
- Update main copyright year to 2016
- [L10N] add "sco" to redirected category pages
- date.py: fix Hungarian day-month title
- Prevent <references.../> from being destroyed
- [FIX] Page: Use repr-like if it can't be encoded
- pywikibot.WARNING -> pywikibot.logging.WARNING
- Do not expand text by default in getCategoryLinks
- Typo fix
- Prevent AttributeError for when filename is None
- Split TestUserContribs between user and non-user
15 December 2015
Bugfixes
- Remove dependency on pYsearch
- Require google>=0.7
- Desupport Python 2.6 for Pywikibot 2.0 release branch
- config: Don't crash on later get_base_dir calls
- cosmetic_changes: merge similar regexes
- Update revId upon claim change
- Update WOW hostnames
- Mark site.patrol() as a user write action
- Fix interwikiFormat support for Link
- Changes are wrongly detected in the last langlink
- getLanguageLinks: Skip own site
- fix intersection of sets of namespaces
- Import textlib.TimeStripper
- Change "PyWikiBot" to "Pywikibot"
- Stop crashing item loads due to support of units
- __all__ items must be bytes on Python 2
- Omit includeredirects parameter for allpages generator
- Performance fix for sites using interwiki_putfirst option
- Fix Persian Wikipedia configuration
- rollback: Use Revision instance properly
- Add must_be to DataSite write actions
- Remove unneeded site argument to AutoFamily
- Fix ComparableMixin
- Deprecate ParamInfo.query_modules_with_limits
- be-x-old is renamed to be-tarask
- Correctly identify qualifier from JSON
30 September 2015
Bugfixes
- New Wikipedia site: azb
- Indexes in str.format
- MediaWikiVersion: Accept new wmf style
- i18n: always follow master
- Bugfixes
- Localisation updates
- i18n: always follow master branch
- exception.UploadWarning was replaced by data.api.UploadWarning
9 July 2015
Configuration updates
- Changing the sandbox content template on Fa WP
Family file updates
- Remove broken wikis from battlestarwiki family
- Adding euskara and sicilianu languages to Vikidia family
- WOW Wiki subdomains hr, ro & sr deleted
- Add new Wikipedia languages gom and lrc
Bugfixes
- fix UnicodeDecodeError on api error
- pwb.py now correctly passes arguments to generate_family_file
- Fix Win32 config.editor detection
- open_compressed: Wrap BZ2File in Py 2.7
- Skip RC entries without a title
- PatrolEntry: Allow cur/prev id to be str
- Updates to i18n changes
- Do not use ParamInfo during action=login
- Let pydot encode labels for Python 3 support
- Fix and test interwiki_graph
- textlib: replaceExcept: Handle empty matches
- Bugfixes and improvements
- Localisation updates
25 May 2015
Major improvements
- Sphinx documentation at https://doc.wikimedia.org/pywikibot/
- Initial ProofreadPage support
- Improved diff output, with context
- Batch upload support
- Compat scripts patrol.py and piper.py ported
- isbn.py now supports wikibase
- RecentChanges stream (rcstream) support
Pywikibot API improvements
- Python 3 ipaddress support
- Support for Python warning system
- Wikibase:
- added ISBN support
- added redirect support
- Optionally uses external library for improved isbn validation
- Automatically generating user files when -user, -family and -code are provided to a script
- Page.content_model added
- Page.contributors() and Page.revision_count() added
- APISite.compare added
- Site.undelete and Page.undelete added
- DataSite.search_entities support
- FilePage.latest_file_info and FilePage.oldest_file_info added
- ItemClaimFilterPageGenerator added
Low-level changes
- Switch to JSON-based i18n data format
- Unicode_literals used throughout source code
- API badtoken recovery
- API client side prevention of anonymous writes
- API layer support for boolean and date datatypes
- Improved MediaWiki version detection
- PageNotFound exception is no longer used
- UserActionRefuse exception was replaced by UserRightsError and NotEmailableError
Other changes
- Python 3 support fixes
- Daemonize support
- Allow pywikibot to load without i18n data
- AppVeyor CI Win32 builds
- New scripts patrol.py and piper.py ported from old compat branch
- Bugfixes and improvements
- Localisation updates
30 November 2014
- Library initialisation no longer connects to servers
- generate_user_files.py rewritten
- API Version 1.14 support
- Support HTTPS for families with certificate validation errors (Python 2 only)
- API HTTP(S) GET support
- API simplified continuation support
- Upload uses a fake filename to avoid various MIME encoding issues
- API class ParamInfo inspects API modules
- Several QueryGenerator efficiency improvements
- Improved 'same title' detection and 'get redirect target' handling
- Site interwiki methods now use dynamic Interwikimap
- Site methods return Namespace object instead of int
- New WikiStats module
- New PatchManager module used for showDiff
- New pagegenerators, including -intersect support
- Several category_redirect.py improvements
- archivebot: support more languages
- reflinks: changed from GPL to MIT
- Bugfixes and improvements
7 October 2014
- Bugfixes and improvements
26 August 2013
- First stable release branch
19 June 2007
- BeautifulSoup becomes mandatory
- new scripts were added
- new family files were supported
- some scripts were archived
26 September 2005
- First PyWikipediaBot framework release
- scripts and libraries for standardizing content
- tools for making minor modifications
- script making interwiki links