Change log#

What is new with Pywikibot 9.1.2? What are the main changes of older version?


Current release#


Will be removed in Pywikibot 10#

  • 9.1.0: version.svn_rev_info() and version.getversion_svn() will be removed. SVN is no longer supported. (T362484)

  • 7.7.0: tools.threading classes should no longer imported from tools

  • 7.6.0: tools.itertools datatypes should no longer imported from tools

  • 7.6.0: tools.collections datatypes should no longer imported from tools

  • 7.5.0: textlib.tzoneFixedOffset class will be removed in favour of time.TZoneFixedOffset

  • 7.4.0: FilePage.usingPages() was renamed to using_pages()

  • 7.3.0: Old color escape sequences like \03{color} is deprecated in favour of new color format like <<color>>

  • 7.3.0: linkitrail method of family.Family is deprecated; use APISite.linktrail() instead

  • 7.2.0: tb parameter of exception() function was renamed to exc_info

  • 7.2.0: XMLDumpOldPageGenerator is deprecated in favour of a content parameter of XMLDumpPageGenerator (T306134)

  • 7.2.0: RedirectPageBot and NoRedirectPageBot bot classes are deprecated in favour of use_redirects attribute

  • 7.2.0: tools.formatter.color_format is deprecated and will be removed

  • 7.1.0: Unused get_redirect parameter of Page.getOldVersion() will be removed

  • 7.0.0: User.isBlocked() method is renamed to is_blocked for consistency

  • 7.0.0: A boolean watch parameter in is deprecated and will be desupported

  • 7.0.0: baserevid parameter of editSource(), editQualifier(), removeClaims(), removeSources(), remove_qualifiers() DataSite methods will be removed

  • 7.0.0: Values of APISite.allpages() parameter filterredir other than True, False and None are deprecated

  • 7.0.0: The i18n identifier ‘cosmetic_changes-append’ will be removed in favour of ‘pywikibot-cosmetic-changes’

Release history#


27 April 2024


22 April 2024


08 March 2024



Breaking changes and code cleanups#


05 December 2023


11. November 2023


05. November 2023

  • Add a pagegenerators filter option to check if a page is redirect (T261549)

  • Add support for vikidia:nl site

  • Replace MediaWiki API deprecated inprop=preload with preloadcontent (T348910)

  • Remove check for purge right from APISite.purgepages (T349348)

  • Add MediaInfo editLabels, AddClaim and removeClaim functions (T348422)

  • Drop unused Family.use_hard_category_redirects (T348953)

  • No longer drop site decorators for optimized codes (T74424)

  • Improve handling of uninitialized MediaInfo

  • Add support for vikidia:ar site

  • Make exception about missing mediainfo more friendly

  • L10N and i18n updates

  • Give visible error to user when there are no rights (T345342)


07. October 2023


20. September 2023


29. August 2023

  • Add support for tlywiki (T345172)

  • L10N and i18n updates


17. August 2023


27 July 2023


05 July 2023


23 April 2023


21 April 2023

  • Add support for fatwikipedia (T335021)

  • Add support for kcgwiktionary (T334742)

  • Update for wowwiki family


16 April 2023


13 April 2023


29 March 2023

  • Add support for ckb-wiktionary (T332093)


25 March 2023

  • Add support for anpwiki (T332115)


04 March 2023


21 January 2023


Documentation improvements#

  • Add highlighting to targeted code snippet within documentation (T323800)

  • Add previous, next, index, and modules links to documentation sidebar (T323803)

  • Introduce standard colors (legacy palette) in Furo theme (T323802)

  • Improve basic content structure and navigation of documentation (T323812)

  • Use Furo sphinx theme instead of Natural and improve documentation look and feel (T322212)

  • MediaWiki API cross reference was added to the documentation


Breaking changes#

Code cleanups#

  • maintenance/sorting_order script was removed (T325426)

  • alphabetic_sv and interwiki_putfirst attributes of Wiktionary family were removed (T325426)

  • alphabetic, alphabetic_revised and fyinterwiki attributes of family.Family were removed (T325426)


08 January 2023


03 December 2022


10 October 2022


25 September 2022


21 August 2022


22 July 2022


26 June 2022

  • Provide Built Distribution with Pywikibot (PEP 427)

  • Update WRITE_ACTIONS in used by api.Request

  • Move get_closest_memento_url from weblinkchecker script to memento module.

  • Add memento module to fix memento_client package (T185561)

  • L10N and i18n updates

  • Fix Flow board topic continuation when iterating in reverse (T138323)

  • Add Avestan transliteration

  • Use Response.json() instead of json.loads(Response.text)

  • Show an APIError if PetScanPageGenerator.query() fails (T309538)

  • is now a utiliy script even for site-package installation (T309290)

  • is now a utiliy script even for site-package installation (T308912)

  • generator_completed became a public attribute

  • Return gracefully from pwb.find_alternates if folder in user_script_paths does not exist (T308910)


21 May 2022

  • Add support for kcgwiki (T305282)

  • Raise InvalidTitleError instead of unspecific ValueError in ProofreadPage (T308016)

  • Preload pages if GeneratorFactory.articlenotfilter_list is not empty; also set attribute is_preloading.

  • ClaimCollection.toJSON() should not ignore new claim (T308245)

  • use linktrail via siteinfo and remove update_linkrtrails maintenance script

  • Print counter statistic for all counters (T307834)

  • Use proofreadpagesinindex query module

  • Prioritize -namespaces options in pagegenerators.handle_args (T222519)

  • Remove ThreadList.stop_all() method (T307830)

  • L10N updates

  • Improve get_charset_from_content_type function (T307760)

  • A tiny cache wrapper was added to hold results of parameterless methods and properties

  • Increase workers in

  • Close logging handlers before deleting them (T91375, T286127)

  • Clear _sites cache if called with pwb wrapper (T225594)

  • Enable short creation of a site if family name is equal to site code

  • Use exc_info=True with pywikibot.exception() by default (T306762)

  • Make IndexPage more robust when getting links in Page ns (T307280)

  • Do not print log header twice in log files (T264235)

  • Do not delegate logging output to the root logger (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 alias for pywikibot.output() (T85620)

  • L10N updates

  • Circumvent circular import in tools module (T306760)

  • Don’t fix html inside syntaxhighlight parts in (T306723)

  • Make layer parameter optional in pywikibot.debug() (T85620)

  • Retry for internal_api_error_DBQueryTimeoutError errors due to T297708

  • Handle ParserError within xmlreader.XmlDump.parse() instead of raising an exception (T306134)

  • XMLDumpOldPageGenerator is deprecated in favour of a content parameter (T306134)

  • use_disambig BaseBot attribute was added to hande 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 (T306291)

  • Use pathlib to extract filename and file_package in

  • Fix isbn messages in (T306166)

  • Fix Page.revisions() with starttime (T109181)

  • Use stream_output for messages inside input_list_choice method (T305940)

  • Expand simulate query result (T305918)

  • Do not delete text when updating a Revision (T304786)

  • Re-enable scripts package version check with pwb wrapper (T305799)

  • Provide textlib.ignore_case() as a public method

  • Don’t try to upcast timestamp from global userinfo if global account does not exists (T305351)

  • Archived scripts were removed; create a Phabricator task to restore some (T223826)

  • Add Lexeme support for Lexicographical data (T189321, T305297)

  • enable all parameters of APISite.imageusage() with FilePage.using_pages()

  • Don’t raise NoPageError with file_is_shared (T305182)

  • Fix URL of GoogleOCR

  • Handle ratelimit with purgepages() (T152597)

  • Add movesubpages parameter to Page.move() and APISite.movepage() (T57084)

  • Do not iterate over sys.modules (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 (T303762, T302799)

  • TextExtracts support was aded (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 (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 (T283808)

  • No longer use win32_unicode for Python 3.6+ (T281042, T283808, 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 (T302859)

  • Siteinfo.clear() and Siteinfo.is_cached() methods were added


26 February 2022


  • i18n updates for

  • Add number transliteration of ‘lo’, ‘ml’, ‘pa’, ‘te’ to NON_LATIN_DIGITS

  • Detect range blocks with Page.is_blocked() method (T301282)

  • to_latin_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 (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 (T297994, T298859)

  • Make pywikibot messages available with site package (T57109, T275981)

  • Add support for API:Redirects

  • Enable shell script with Pywikibot site package

  • Enable and generate_family_file with site-package (T107629)

  • Add support for Python 3.11

  • Pywikibot supports PyPy 3 (T101592)

  • A new method User.is_locked() was added to determine whether the user is currently locked globally (T249392)

  • A new method APISite.is_locked() was added to determine whether a given user or user id is locked globally (T249392)

  • APISite.get_globaluserinfo() method was added to retrieve globaluserinfo for any user or user id (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 (T139143, T270480)

  • Enable -version and –version with pwb wrapper or code entry point (T101828)

  • Add title_delimiter_and_aliases attribute to family files to support WikiHow family (T294761)

  • BaseBot has a public collections.Counter for reading, writing and skipping a page

  • Upload: Retry upload if ‘copyuploadbaddomain’ API error occurs (T294825)

  • Update invisible characters from unicodedata 14.0.0

  • Add support for Wikimedia OCR engine with proofreadpage

  • Rewrite tools.itertools.intersect_generators() which makes it running up to 10’000 times faster. (T85623, T293276)

  • The cached output functionality from compat release was re-implemented (T151727, T73646, T74942, T132135, T144698, T196039, T280466)

  • L10N updates

  • Adjust groupsize within pagegenerators.PreloadingGenerator (T291770)

  • New “maxlimit” property was added to APISite (T291770)


  • Don’t raise an exception if BlockEntry initializer found a hidden title (T78152)

  • Fix KeyError in create_warnings_list (T301610)

  • Enable similar script call of on toolforge (T298846)

  • Remove question mark character from forbidden file name characters (T93482)

  • Enable -interwiki option with pagegenerators (T57099)

  • Don’t assert login result (T298761)

  • Allow title placeholder $1 in the middle of an url (T111513, T298078)

  • Don’t create a Site object if pywikibot is not fully imported (T298384)

  • Use when creating a _WbDataPage (T296985)

  • Fix mysql AttributeError for sock.close() on toolforge (T216741)

  • Only search user_script_paths inside config.base_dir (T296204)

  • pywikibot.argv has been fixed for wrapper if called with global args (T254435)

  • Only ignore FileExistsError when creating the api cache (T295924)

  • Only handle query limit if query module is limited (T294836)

  • Upload: Only set filekey/offset for files with names (T294916)

  • Make site parameter of textlib.replace_links() mandatory (T294649)

  • Raise a generic ServerError if the http status code is unofficial (T293208)

Breaking changes#

  • Support of Python 3.5.0 - 3.5.2 has been dropped (T286867)

  •,, and 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

  • Remove APISite.newfiles() method (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

  • 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 (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 (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 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 (T280227)

  • Deprecated exception identifiers were removed (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


21 September 2021

  • Fix for removed action API token parameters of MediaWiki 1.37 (T291202)

  • APISite.validate_tokens() no longer replaces outdated tokens (T291202)

  • L10N updates


15 September 2021

  • Drop piprop from meta=proofreadinfo API call (T290585)

  • Remove use_2to3 with (T290451)

  • Unify WbRepresentation’s abstract method signature

  • L10N updates


05 August 2021

  • Add support for jvwikisource (T286247)

  • Handle missingtitle error code when deleting

  • Check for outdated setuptools in wrapper (T286980)

  • Remove traceback for original exception for known API error codes

  • Unused strm parameter of init_handlers was removed

  • Ignore if a Site object cannot be created (T286848)

  • Explicitly return an empty string with OutputProxyOption.out property (T286403)

  • Explicitly return None from ContextOption.result() (T286403)

  • Add support for Lingua Libre family (T286303)

  • Catch invalid titles in Category.isCategoryRedirect()

  • L10N updates

  • Provide structured data on Commons (T213904, 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 (T285317)

  • Fix terminal_interface_base.input_list_choice (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 (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 (T284396)

  • Add -url option to pagegenerators (T239436)

  • Add add_text function to textlib (T284388)

  • Require setuptools >= 49.4.0 (T284297)

  • Require wikitextparser>=0.47.5

  • Allow images to upload locally even they exist in the shared repository (T267535)

  • Show a warning if pywikibot.__version__ is behind scripts.__version__ (T282766)

  • Handle <ce>/<chem> tags as <math> aliases within textlib.replaceExcept() (T283990)

  • Expand simulate query response for wikibase support (T76694)

  • Double the wait time if ratelimit exceeded (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 (T283989)

  • Remove outdated opt._option which is already dropped (T284005)

  • Use IntEnum with cosmetic_changes CANCEL

  • Remove lru_cache from botMayEdit method and fix it’s logic (T283957)

  • DataSite.createNewItemFromPage() method was removed in favour of ImagePage.fromPage() (T98663)

  • mwparserfromhell or wikitextparser MediaWiki markup parser is mandatory (T106763)


28 May 2021

Improvements and Bugfixes#

  • Use different logfiles for multiple processes of the same script (T56685)

  • throttle.pip will be reused as soon as possbile

  • terminal_interface_base.TerminalHandler is subclassed from logging.StreamHandler

  • Fix iterating of SizedKeyCollection (T282865)

  • An abstract base user interface module was added

  • APISite method pagelanglinks() may skip links with empty titles (T223157)

  • Fix Page.getDeletedRevision() method which always returned an empty list

  • Async chunked uploads are supported (T129216, T133443)

  • A new InvalidPageError will be raised if a Page has no version history (T280043)

  • L10N updates

  • Fix __getattr__ for WikibaseEntity (T281389)

  • Handle abusefilter-{disallow,warning} codes (T85656)

Code cleanups#

  • attribute was removed (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

  • 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() (T271437)

  • CategoryGenerator, FileGenerator, ImageGenerator and ReferringPageGenerator pagegenerator functions were removed

  • Family.ignore_certificate_error() method was removed in favour of verify_SSL_certificate (T265205)

  • tools.is_IP was renamed to is_ip_address due to PEP 8

  • was renamed to

  • Exceptions were renamed having a suffix “Error” due to PEP 8 (T280227)


17 April 2021

Improvements and Bugfixes#

  • interwiki_graph module was restored (T223826)

  • proofreadpage: search for “new” class after purge (T280357)

  • Enable different types with BaseBot.treat()

  • Context manager depends on pymysql version, not Python release (T279753)

  • Bugfix for Site.interwiki_prefix() (T188179)

  • Exclude expressions from parsed template in mwparserfromhell (T71384)

  • Provide an object representation for DequeGenerator

  • Allow deleting any subclass of BasePage by title (T278659)

  • Add support for API:Revisiondelete with Site.deleterevs() method (T276726)

  • L10N updates

  • Family files can be collected from a zip folder (T278076)


  • mwparserfromhell or wikitextparser are strictly recommended (T106763)

  • Require Pillow>=8.1.1 due to vulnerability found (T278743)

  • TkDialog of GUI userinterface requires Python 3.6+ (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 (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


16 March 2021

Breaking changes#

  • interwiki_graph module was removed (T223826)

  • Require setuptools >= 20.2 due to PEP 440

  • Support of MediaWiki < 1.23 has been dropped (T268979)

  • APISite.loadimageinfo will no longer return any content

  • Return requests.Response with http.request() instead of plain text (T265206)

  • config.db_hostname has been renamed to db_hostname_format

Code cleanups#

  • tools.PY2 was removed (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 (T223826)

  • Drop startsort/endsort parameter for site.categorymembers method (T74101)

  • Deprecated data attribute of http.fetch() result has been dropped (T265206)

  • toStdout parameter of pywikibot.output() has been dropped

  • Deprecated Site.getToken() and was removed

  • Deprecated Family.known_families dict was removed (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 (T265206)

Other changes#

  • Raise a SiteDefinitionError if api request response is Non-JSON and site is AutoFamily (T272911)

  • Support deleting and undeleting specific file versions (T276725)

  • Only add bot option generator if the bot class have it already

  • Raise a RuntimeError if pagegenerators -namespace option is provided too late (T276916)

  • Check for LookupError exception in http._decide_encoding (T276715)

  • Re-enable setting private family files (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 (T261061, T269503)

  • Use hardcoded messages if i18n system is not available (T275981)

  • Move wikibase data structures to page/

  • L10N updates

  • Add support for altwiki (T271984)

  • Add support for mniwiki and mniwiktionary (T273467, T273462)

  • Don’t use mime parameter as boolean in api.Request (T274723)

  • textlib.removeDisabledPart is able to remove templates (T274138)

  • Create a SiteLink with __getitem__ method and implement lazy load (T273386, T245809, T238471, T226157)

  • Fix date.formats[‘MonthName’] behaviour (T273573)

  • Implement pagegenerators.handle_args() to process all options at once

  • Add enabled_options, disabled_options to GeneratorFactory (T271320)

  • Move interwiki() interwiki_prefix() and local_interwiki() methods from BaseSite to APISite

  • Add requests.Response.headers to log when an API error occurs (T272325)


24 January 2021

  • Use string instead of Path-like object with “open” function in UploadRobot for Python 3.5 compatibility (T272345)

  • Add support for trwikivoyage (T271263)

  • UI.input_list_choice() has been improved (T272237)

  • Global handleArgs() function was removed in favour of handle_args

  • Deprecated originPage and foundIn property has been removed in

  • 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 (T265206)

  • Positional arguments of page.Revision aren’t supported any longer (T259428)

  • pagenenerators.handleArg() method was renamed to handle_arg() (T271437)

  • Page methods deprecated for 6 years were removed

  • Create a Site with AutoFamily if a family isn’t predefined (T249087)

  • L10N updates


12 January 2021

  • Add support for niawiki, bclwikt, diqwikt, niawikt (T270416, T270282, T270278, T270412)

  • Delete page using pageid instead of title (T57072)

  • version.getversion_svn_setuptools function was removed (T270393)

  • Add support for “musical notation” data type to wikibase

  • -grepnot filter option was added to pagegenerators module (T219281)

  • L10N updates


2 January 2021

  • Re-enable reading from site package (T270941)

  • LoginManager.getCookie() was renamed to login_to_site()

  • Deprecation warning for MediaWiki < 1.23 (T268979)

  • Add backports to support some Python 3.9 changes

  • Desupported shared_image_repository() and nocapitalize() methods were removed (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’ (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 (T270474)

  • Python 3.10 is supported

  • Fix AutoFamily scriptpath() call (T270370)

  • Add support for skrwiki, skrwiktionary, eowikivoyage, wawikisource, madwiki (T268414, T268460, T269429, T269434, T269442)

  • wikistats methods fetch, raw_cached, csv, xml has been removed

  • PageRelatedError.getPage() has been removed in favour of

  • DataSite.get_item() method has been removed

  • global put_throttle option may be given as float (T269741)

  • Property.getType() method has been removed

  • Family.server_time() method was removed; it is still available from Site object (T89451)

  • All HttpRequest parameters except of charset has been dropped (T265206)

  • A lot of methods and properties of HttpRequest are deprecated in favour of requests.Resonse attributes (T265206)

  • Method and properties of HttpRequest are delegated to requests.Response object (T265206)

  • comms.threadedhttp.HttpRequest.raw was replaced by HttpRequest.content property (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() (T227610)

  • Move BaseSite its own site/ file

  • Improve toJSON() methods in

  • _is_wikibase_error_retryable rewritten (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/ file

  • Fix TypeError in api.LoginManager (T268445)

  • Add repr() method to BaseDataDict and ClaimCollection

  • Define availableOptions as deprecated property

  • Do not strip all whitespaces from Link.title (T197642)

  • Introduce a common BaseDataDict as parent for LanguageDict and AliasesDict

  • Replaced PageNotSaved by PageSaveRelatedError (T267821)

  • Add -site option as -family -lang shortcut

  • Enable APISite.exturlusage() with default parameters (T266989)

  • Update tools._unidata._category_cf from Unicode version 13.0.0

  • Move TokenWallet to site/ file

  • Fix import of httplib after release of requests 2.25 (T267762)

  • user keyword parameter can be passed to Site.rollbackpage() (T106646)

  • Check for {{bots}}/{{nobots}} templates in Page.text setter (T262136, T267770)

  • Remove deprecated UserBlocked exception and Page.contributingUsers()

  • Add support for some ‘wbset’ actions in DataSite

  • Fix UploadRobot site attribute (T267573)

  • Ignore UnicodeDecodeError on input (T258143)

  • Replace ‘source’ exception regex with ‘syntaxhighlight’ (T257899)

  • Fix get_known_families() for wikipedia_family (T267196)

  • Move _InterwikiMap class to site/

  • 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 (T255917)

  • Remove interwiki_forwarded_from list from family files (T104125)

  • Rewrite Revision class; each data can be accessed either by key or as an attribute (T102735, T259428)

  • L10N-Updates


1 November 2020

  • Avoid conflicts between site and possible site keyword in api.Request.create_simple() (T262926)

  • Remove wrong param of rvision() call in Page.latest_revision_id

  • Do not raise Exception in Page.get_best_claim() but follow redirect (T265839)

  • xml-support of wikistats will be dropped

  • Remove deprecated mime_params in api.Request()

  • cleanup and replace deprecated originPage by origin in Subjects

  • Upload a file that ends with the ‘r’ byte (T132676)

  • Fix incorrect server time (T266084)

  • L10N-Updates

  • Support Namespace packages in (T265946)

  • Server414Error was added to pywikibot (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 (T265206)


19 October 2020

  • Add support for smn-wiki (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 (T227610)

  • Accept only valid names in (T265328, T265353)

  • New plural.plural_rule() function returns a rule for a given language

  • Replace deprecated urllib.request.URLopener with http.fetch (T255575)

  • OptionHandler/BaseBot options are accessable as OptionHandler.opt attributes or keyword item (see also T264721)

  • pywikibot.setAction() function was removed

  • A namedtuple is the result of textlib.extract_sections()

  • Prevent circular imports in and (T264500)

  • version.get_module_version() is deprecated and gives no meaningfull result

  • Fix version.get_module_filename() and update log lines (T264235)

  • Re-enable printing log header (T264235)

  • Fix result of tools.itertools.intersect_generators() (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 (T263951)

  • Deprecated script options were removed

  • lyricwiki_family was removed (T245439)

  • RecentChangesPageGenerator parameters has been synced with APISite.recentchanges

  • APISite.recentchanges accepts keyword parameters only

  • LoginStatus enum class was moved from site to

  • 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 (T122879)

  • Use api.APIGenerator through site._generator (T129013)

  • Support of MediaWiki releases below 1.19 has been dropped (T245350)

  • Page.get_best_claim () retrieves preferred Claim of a property referring to the given page (T175207)

  • Check whether _putthead is current_thread() to join() (T263331)

  • Add BasePage.has_deleted_revisions() method

  • Allow querying deleted revs without the deletedhistory right

  • Use ignore_discard for login cookie container (T261066)

  • Siteinfo.get() loads data via API instead from cache if expiry parameter is True (T260490)

  • Move latest revision id handling to WikibaseEntity (T233406)

  • Load wikibase entities when necessary (T245809)

  • Fix path for stable release in version.getversion() (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 (T136513, 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 (T261771)

  • Remove socket_timeout fix in introduced with T103069

  • Prevent huge traceback from underlying python libraries (T253236)

  • Localisation updates


28 August 2020

  • Add support for ja.wikivoyage (T261450)

  • Only run cosmetic changes on wikitext pages (T260489)

  • Leave a script gracefully for wrong -lang and -family option (T259756)

  • Change meaning of BasePage.text (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 (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 (T260472)

  • tools.UnicodeType and tools.signature are deprecated

  • BaseBot.stop() method is deprecated in favour of BaseBot.generator.close()

  • Escape bot password correctly (T259488)

  • Bugfixes and improvements

  • Localisation updates


4 August 2020

  • Read correct object in SiteLinkCollection.normalizeData (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 (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 domain were updated

  • pywikibot.__release__ was deprecated

  • Use one central point for framework version (T106121, T171886, T197936, T253719)

  • rvtoken parameter of Site.loadrevisions() and Page.revisions() has been dropped (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 (T213287, T239542)

  • Bugfixes and improvements

  • Localisation updates


3 July 2020

  • Page.botMayEdit() method was improved (T253709)

  • PageNotFound, SpamfilterError, UserActionRefuse exceptions were removed (T253681)

  • tools.ip submodule has been removed (T243171)

  • Wait in BaseBot.exit() until asynchronous saving pages are completed

  • Solve IndexError when showing an empty diff with a non-zero context (T252724)

  • linktrails were added or updated for a lot of sites

  • Resolve namespaces with underlines (T252940)

  • Fix getversion_svn for Python 3.6+ (T253617, T132292)

  • Bugfixes and improvements

  • Localisation updates


9 June 2020

  • Fix page_can_be_edited for MediaWiki < 1.23 (T254623)

  • Show global options with -help

  • Usage of SkipPageError with BaseBot has been removed

  • Throttle requests after ratelimits exceeded (T253180)

  • Make Pywikibot daemon logs unexecutable (T253472)

  • Check for missing generator after BaseBot.setup() call

  • Do not change usernames when creating a Site (T253127)

  • pagegenerators: handle protocols in -weblink (T251308, T251310)

  • Bugfixes and improvements

  • Localisation updates


8 May 2020

  • Unify and extend formats for setting sitelinks (T225863, T251512)

  • Do not return a random i18n.translation() result (T220099)

  • tools.ip_regexp has been removed (T174482)

  • Page.getVersionHistory and Page.fullVersionHistory() methods has been desupported (T136513, T151110)

  • Update wikimediachapter_family (T250802)

  • Raise SpamblacklistError with spamblacklist APIError (T249436)

  • SpamfilterError was renamed to SpamblacklistError (T249436)

  • Do not removeUselessSpaces inside source/syntaxhighlight tags (T250469)

  • Restrict Pillow to 6.2.2+ (T249911)

  • Fix PetScan generator language and project (T249704)

  • Bugfixes and improvements

  • Localisation updates


5 April 2020

  • Fix regression of combining sys.path in wrapper (T249427)

  • Site and Page methods deprecated for 10 years or longer are desupported and may be removed (T106121)

  • Usage of SkipPageError with BaseBot is desupported and may be removed

  • Ignore InvalidTitle in textlib.replace_links() (T122091)

  • Raise ServerError also if connection to PetScan timeouts

  • no longer supports ‘oursql’ or ‘MySQLdb’. It now solely supports PyMySQL (T243154, T89976)

  • Disfunctional Family.versionnumber() method was removed

  • Refactor login functionality (T137805, T224712, T248767, T248768, T248945)

  • Bugfixes and improvements

  • Localisation updates


26 March 2020

  • and files were moved to their own folders and will be split in the future

  • Refactor data attributes of Wikibase entities (T233406)

  • Functions dealing with stars list are desupported and may be removed

  • Use path’s stem of script filename within wrapper (T248372)

  • Disfunctional was removed (T248292, T248250, T193978)

  • Fix logout on MW < 1.24 (T214009)

  • Fixed TypeError in getFileVersionHistoryTable method (T248266)

  • Outdated secure connection overrides were removed (T247668)

  • Check for all modules which are needed by a script within wrapper

  • Check for all modules which are mandatory within wrapper script

  • Enable -help option with similar search of (T241217)

  • compat module has been removed (T183085)

  • Category.copyTo and Category.copyAndKeep methods have been removed

  • Site.page_restrictions() does no longer raise NoPage (T214286)

  • Use site.userinfo getter instead of site._userinfo within api (T243794)

  • Fix endprefix parameter in Category.articles() (T247201)

  • Fix search for changed claims when saving entity (T246359)

  • has been removed (T244664)

  • Site.has_api method has been removed (T106121)

  • Bugfixes and improvements

  • Localisation updates


6 March 2020

  • Fix mul Wikisource aliases (T242537, T241413)

  • Let Site(‘test’, ‘test) be equal to Site(‘test’, ‘wikipedia’) (T228839)

  • Support of MediaWiki releases below 1.19 will be dropped (T245350)

  • Provide mediawiki_messages for foreign language codes

  • Use mw API IP/anon user detection (T245318)

  • Correctly choose primary coordinates in BasePage.coordinates() (T244963)

  • Rewrite APISite.page_can_be_edited (T244604)

  • compat module is deprecated for 5 years and will be removed in next release (T183085)

  • ipaddress module is required for Python 2 (T243171)

  • tools.ip will be dropped in favour of tools.is_IP (T243171)

  • tools.ip_regexp is deprecatd for 5 years and will be removed in next release

  • will be removed in next release (T244664)

  • stdnum package is required for ISBN scripts and cosmetic_changes (T132919, T144288, T241141)

  • preload urllib.quote() with Python 2 (T243710, T222623)

  • Drop isbn_hyphenate package due to outdated data (T243157)

  • Fix UnboundLocalError in ProofreadPage._ocr_callback (T243644)

  • Deprecate/remove sysop parameter in several methods and functions

  • Refactor Wikibase entity namespace handling (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 (T85001)

  • botirc module has been removed (T212632)

  • Bugfixes and improvements

  • Localisation updates


11 January 2020

  • Fix broken get_version() in (T198374)

  • Rewrite site.log_page/site.unlock_page implementation

  • Require requests 2.20.1 (T241934)

  • Make bot.suggest_help a function

  • Fix gui settings for Python 3.7.4+ (T241216)

  • Better api error message handling (T235500)

  • Ensure that required props exists as Page attribute (T237497)

  • Refactor data loading for WikibaseEntities (T233406)

  • replaceCategoryInPlace: Allow LRM and RLM at the end of the old_cat title (T240084)

  • Support for Python 3.4 will be dropped (T239542)

  • Derive LoginStatus from IntEnum (T213287, T239533)

  • enum34 package is mandatory for Python 2.7 (T213287)

  • call LoginManager with keyword arguments (T237501)

  • Enable Pywikibot for Python 3.8 (T238637)

  • Derive BaseLink from tools.UnicodeMixin (T223894)

  • Make _flush aware of _putthread ongoing tasks (T147178)

  • Add family file for foundation wiki (T237888)

  • Fix for private wikis (T235768)

  • Add rank parameter to Claim initializer

  • Add current directory for similar script search (T217195)

  • Release BaseSite.lock_page mutex during sleep

  • Implement deletedrevisions api call (T75370)

  • assert_valid_iter_params may raise AssertionError instead of pywikibot.Error (T233582)

  • Upcast getRedirectTarget result and return the appropriate page subclass (T233392)

  • Add ListGenerator for API:filearchive to site module (T230196)

  • Deprecate the ability to login with a secondary sysop account (T71283)

  • Enable global args with wrapper script (T216825)

  • Add a new ConfigParserBot class to set options from the scripts.ini file (T223778)

  • Check a user’s rights rather than group memberships; ‘sysopnames’ will be deprecated (T229293, T189126, T122705, T119335, T75545)

  • fix footer detection (T230301)

  • Add allowusertalk to the User.block() options (T229288)

  • botirc module will be removed in next release (T212632)

  • weblib module will be removed in next release (T85001)

  • Bugfixes and improvements

  • Localisation updates


22 July 2019

  • Increase the throttling delay if maxlag >> retry-after (T210606)

  • Add “user_agent_description” option in

  • APISite.fromDBName works for all known dbnames (T225590, 225723, 226960)

  • remove the unimplemented “proxy” variable in

  • Make Family.langs property more robust (T226934)

  • Remove strategy family

  • Handle closed_wikis as read-only (T74674)

  • TokenWallet: login automatically

  • Add closed_wikis to Family.langs property (T225413)

  • Redirect ‘mo’ site code to ‘ro’ and remove interwiki_replacement_overrides (T225417, T89451)

  • Add support for badges on Wikibase item sitelinks through a SiteLink object instead plain str (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 (T220131)

  • Fix create_short_link method after MediaWiki changes (T223865)

  • Validate proofreadpage.IndexPage contents before saving it

  • Refactor Link and introduce BaseLink (T66457)

  • Count skipped pages in BaseBot class

  • ‘actionthrottledtext’ is a retryable wikibase error (T192912)

  • Clear tokens on logout(T222508)

  • Deprecation warning: support for Python 2 will be dropped (T213287)

  • botirc.IRCBot has been dropped

  • Avoid using outdated browseragents (T222959)

  • textlib: avoid infinite execution of regex (T222671)

  • Add CSRF token in sitelogout() api call (T222508)

  • Refactor WikibasePage.get and overriding methods and improve documentation

  • Improve title patterns of WikibasePage extensions

  • Add support for property creation (T160402)

  • Bugfixes and improvements

  • Localisation updates


30 April 2019

  • Unicode literals are required for all scripts; the usage of ASCII bytes may fail (T219095)

  • Don’t fail if the number of forms of a plural string is less than required (T99057, T219097)

  • Implement create_short_link Page method to use Extension:UrlShortener (T220876)

  • Remove wikia family file (T220921)

  • Remove deprecated

  • Changed requirements for sseclient (T219024)

  • Set optional parameter namespace to None in site.logpages (T217664)

  • Add ability to display similar scripts when misspelled (T217195)

  • Check if QueryGenerator supports namespaces (T198452)

  • Bugfixes and improvements

  • Localisation updates


1 March 2019

  • Fix version comparison (T164163)

  • Remove pre MediaWiki 1.14 code

  • Dropped support for Python 2.7.2 and 2.7.3 (T191192)

  • Fix header regex beginning with a comment (T209712)

  • Implement Claim.__eq__ (T76615)

  • cleanup

  • Add missing Wikibase API write actions

  • Bugfixes and improvements

  • Localisation updates


4 February 2019

  • Support python version 3.7

  • add -querypage parameter to yield pages provided by any special page (T214234)

  • Fix comparison of str, bytes and int literal

  • 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 (T122763)

  • Support adding new claims with qualifiers and/or references (T112577, T170432)

  • Support LZMA and XZ compression formats

  • Update correct-ar Typo corrections in (T211492)

  • Enable MediaWiki timestamp with EventStreams (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 (T183085)

  • site.preloadpages: split pagelist in most max_ids elements (T209111)

  • Disable empty sections in cosmetic_changes for user namespace

  • Prevent touch from re-creating pages (T193833)

  • New Page.title() parameter without_brackets; also used by titletranslate (T200399)

  • Security: require requests version 2.20.0 or later (T208296)

  • Check appropriate key in Site.messages (T163661)

  • Make sure the cookie file is created with the right permissions (T206387)

  • pydot >= 1.2 is required for interwiki_graph

  • Move methods for simple claim adding/removing to WikibasePage (T113131)

  • Enable start timestamp for EventStreams (T205121)

  • Re-enable notifications (T205184)

  • Use FutureWarning for warnings intended for end users (T191192)

  • Provide new -wanted… page generators (T56557, T150222)

  • api.QueryGenerator: Handle slots during initialization (T200955, T205210)

  • Bugfixes and improvements

  • Localisation updates


22 September 2018

  • Enable multiple streams for EventStreams (T205114)

  • Fix Wikibase aliases handling (T194512)

  • Remove cryptography support from python<=2.7.6 requirements (T203435)

  • textlib._tag_pattern: Do not mistake self-closing tags with start tag (T203568)

  • page.Link.langlinkUnsafe: Always set _namespace to a Namespace object (T203491)

  • Enable Namespace.content for mw < 1.16

  • Allow terminating the bot generator by BaseBot.stop() method (T198801)

  • Allow bot parameter in set_redirect_target

  • Do not show empty error messages (T203462)

  • Show the exception message in async mode (T203448)

  • Fix the extended user-config extraction regex (T145371)

  • Solve UnicodeDecodeError in site.getredirtarget (T126192)

  • Introduce a new APISite property: mw_version

  • Improve hash method for BasePage and Link

  • Avoid applying two uniquifying filters (T199615)

  • Fix skipping of language links in CosmeticChangesToolkit.removeEmptySections (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 (T125046)

  • Fix the bug in cache_time when loading a CachedRequest (T202227)

  • pagegenerators._handle_recentchanges: Do not request for reversed results (T199199)

  • Use a key for filter_unique where appropriate (T199615)

  • Add exceptions for first_upper (T200357)

  • Fix usages of site.namespaces.NAMESPACE_NAME (T201969)

  • pywikibot/ Fix header regex to allow comments

  • Use ‘rvslots’ when fetching revisions on MW 1.32+ (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. (T184674)

  • Introduce a timestamp in deprecated decorator (T106121)

  • textlib.extract_sections: Remove footer from the last section (T199751)

  • Don’t let WikidataBot crash on save related errors (T199642)

  • Allow different projects to have different L10N entries (T198889)

  • remove color highlights before fill function (T196874)

  • Fix Portuguese file namespace translation in cc (T57242)

  • textlib._create_default_regexes: Avoid using inline flags (T195538)

  • Not everything after a language link is footer (T199539)

  • code cleanups

  • New mediawiki projects were provided

  • Bugfixes and improvements

  • Localisation updates


10 July 2018

  • Enable any LogEntry subclass for each logevent type (T199013)

  • Deprecated pagegenerators options -<logtype>log aren’t supported any longer (T199013)

  • Open RotatingFileHandler with utf-8 encoding (T188231)

  • Fix occasional failure of TestLogentries due to hidden namespace (T197506)

  • Remove multiple empty sections at once in cosmetic_changes (T196324)

  • Fix stub template position by putting it above interwiki comment (T57034)

  • Fix handling of API continuation in PropertyGenerator (T196876)

  • Use PyMySql as pure-Python MySQL client library instead of oursql, deprecate MySQLdb (T89976, T142021)

  • Ensure that BaseBot.treat is always processing a Page object (T196562, 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

  • 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 (T170123)

  • cosmetic_changes is able to remove empty sections (T140570)

  • Pywikibot is following PEP 396 versioning

  • pagegenerators AllpagesPageGenerator, CombinedPageGenerator, UnconnectedPageGenerator are deprecated

  • Some DayPageGenerator parameters has been renamed

  • unicodedata2, httpbin and Flask dependency was removed (T102461, T108068, T178864, T193383)

  • New projects were provided

  • Bugfixes and improvements

  • Documentation updates

  • Localisation updates (T194893)

  • Translation updates


5 May 2018

  • Enable makepath and datafilepath not to create the directory

  • Use API’s retry-after value (T144023)

  • Provide startprefix parameter for Category.articles() (T74101, T143120)

  • Page.put_async() is marked as deprecated (T193494)

  • Deprecate requests-requirements.txt (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 (T191192)

  • Dropped support for Python 2.6 (T154771)

  • Dropped support for Python 3.3 (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-)

  • BaseUnlinkBot has become part of the framework in

  • Decommission of rcstream

  • Script files added to

  • 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


  • Manage temporary readonly error (T154011)

  • Unbreak wbGeoShape and WbTabularData (T166362)

  • Clean up issue with _WbDataPage (T166362)

  • Re-enable xml for WikiStats with py2 (T165830)

  • Solve httplib.IncompleteRead exception in eventstreams (T168535)

  • Only force input_choise if self.always is given (T161483)

  • Add colon when replacing category and file weblink (T127745)

  • API Request: set uiprop only when ensuring ‘userinfo’ in meta (T169202)


  • Introduce the new WbUnknown data type for Wikibase (T165961)

  • add replace_page() and delete_page()

  • Build GeoShape and TabularData from shared base class

  • Remove non-breaking spaces when tidying up a link (T130818)

  • Replace private mylang variables with mycode in

  • FilePage: remove deprecated use of fileUrl

  • Make socket_timeout recalculation reusable (T166539)

  • add revision parameter to download arbitrary revision (T166939)

  • Make pywikibot.Error more precise (T166982)

  • Implement pywikibot support for adding thanks to normal revisions (T135409)

  • Implement server side event client EventStreams (T158943)

  • new pagegenerators filter option -titleregexnot

  • Add exception for -namepace option (T167580)

  • InteractiveReplace: Allow no replacements by default

  • Encode default globe in family file

  • Add on to pywikibot support for thanking normal revisions (T135409)

  • Add log entry code for thanks log (T135413)

  • Create superclass for log entries with user targets

  • Use relative reference to class attribute

  • Allow pywikibot to authenticate against a private wiki (T153903)

  • Make WbRepresentations hashable (T167827)


  • Update linktails

  • Update languages_by_size

  • Update cross_allowed (global bot wikis group)

  • Add atjwiki to wikipedia family file (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 (T168399)

  • Add kbpwiki to wikipedia family file (T169216)

  • Remove anarchopedia family out of the framework (T167534)


21 May 2017

  • Support for Python 2.6 but higher releases are strictly recommended

  • Bugfixes and improvements

  • Localisation updates


  • Increase the default socket_timeout to 75 seconds (T163635)

  • use repr() of exceptions to prevent UnicodeDecodeErrors (T120222)

  • Handle offset mismatches during chunked upload (T156402)

  • Correct _wbtypes equality comparison (T160282)

  • Re-enable getFileVersionHistoryTable() method (T162528)

  • Replaced the word ‘async’ with ‘asynchronous’ due to py3.7 (T106230)

  • Raise ImportError if no editor is available (T163632)

  • templatesWithParams: cache and standardise params (T113892)

  • getInternetArchiveURL: Retry http.fetch if there is a ConnectionError (T164208)

  • Remove wikidataquery from pywikibot (T162585)


  • Introduce user_add_claim and allow asynchronous ItemPage.addClaim (T87493)

  • Enable private edit summary in specialbots (T162527)

  • Make a decorator for asynchronous methods

  • Provide options by a separate handler class

  • Show a warning when a LogEntry type is not known (T135505)

  • Add Wikibase Client extension requirement to APISite.unconnectedpages()

  • Update content after editing entity

  • Make WbTime from Timestamp and vice versa (T131624)

  • Add support for geo-shape Wikibase data type (T161726)

  • Add async parameter to ItemPage.editEntity (T86074)

  • Make sparql use Site to access sparql endpoint and entity_url (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 (T152907)

  • Provide site to WbTime via WbTime.fromWikibase

  • Provide preloading via GeneratorFactory.getCombinedGenerator() (T135331)

  • Accept QuitKeyboardInterrupt in specialbots.Uploadbot (T163970)

  • Remove unnecessary description change message when uploading a file (T163108)

  • Add ‘OptionHandler’ to bot.__all__ tuple

  • Use FilePage.upload inside UploadRobot

  • Add support for tabular-data Wikibase data type (T163981)

  • Get thumburl information in FilePage() (T137011)


  • Update languages_by_size in family files

  • Add “pa” to languages_by_size

  • Config2: limit the number of retries to 15 (T165898)


3 April 2017

  • First major release from master branch

  • requests package is mandatory

  • Deprecate previous 2.0 branches and tags


  • Use default summary when summary value does not contain a string (T160823)

  • Enable for PY3 (T161457)

  • Change tw(n)translate from Site.code to Site.lang dependency (T140624)

  • Do not use the “imp” module in Python 3 (T158640)

  • Make sure the order of parameters does not change (T161291)

  • Use instead of collections.Counter (T160620)

  • Introduce a new site method page_from_repository()

  • Add pagelist tag for replaceExcept (T151940)

  • logging in python3 when deprecated_args decorator is used (T159077)

  • Avoid ResourceWarning using subprocess in python 3.6 (T159646)

  • load_pages_from_pageids: do not fail on empty string (T153592)

  • Add missing not-equal comparison for wbtypes (T158848)

  • textlib.getCategoryLinks catch invalid category title exceptions (T154309)

  • Fix html2unicode (T130925)

  • Ignore first letter case on ‘first-letter’ sites, obey it otherwise (T130917)

  • Limit catastrophic backtracking in FILE_LINK_REGEX (T148959)

  • FilePage.get_file_history(): Check for len(self._file_revisions) (T155740)

  • Fix for positional_arg behavior of GeneratorFactory (T155227)

  • Fix broken LDAP based login (T90149)


  • Simplify User class

  • Renamed isImage and isCategory

  • Add -property option to

  • Add a new site method pages_with_property

  • Allow retrieval of unit as ItemPage for WbQuantity (T143594)

  • return result of userPut with put_current method

  • Provide a new generator which yields a subclass of Page

  • Implement

  • make general function to compute file sha

  • Support adding units to WbQuantity through ItemPage or entity url (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() (T156596)

  • GeneratorFactory: make getCategory respect (T155687)

  • Fix and improve default regexes


  • 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 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 (T154947)


17 August 2016

  • Last stable 2.0 branch


  • Establish the project’s name, once and for all

  • 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

  • Fix help docstring

  • 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

  • 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


  • 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


  • 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


  • fix UnicodeDecodeError on api error

  • 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 include:

  • Sphinx documentation at

  • Initial ProofreadPage support

  • Improved diff output, with context

  • Batch upload support

  • Compat scripts and ported

  • now supports wikibase

  • RecentChanges stream (rcstream) support

Pywikibot API improvements include:

  • 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 -lang are provided to a script

  • Page.content_model added

  • Page.contributors() and Page.revision_count() added

  • 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 include:

  • 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 include:

  • Python 3 support fixes

  • Daemonize support

  • Allow pywikibot to load without i18n data

  • AppVeyor CI Win32 builds

  • New scripts and ported from old compat branch

  • Bugfixes and improvements

  • Localisation updates


30 November 2014

  • Library initialisation no longer connects to servers

  • 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 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

1.0 rv 2007-06-19#

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