Metadata-Version: 2.4
Name: pywikibot
Version: 5.6.0
Summary: Python MediaWiki Bot Framework
Home-page: https://www.mediawiki.org/wiki/Manual:Pywikibot
Download-URL: https://pywikibot.toolforge.org/
Maintainer: The Pywikibot team
Maintainer-email: pywikibot@lists.wikimedia.org
License: MIT License
Keywords: API,bot,client,framework,mediawiki,pwb,pybot,python,pywiki,pywikibase,pywikibot,pywikipedia,pywikipediabot,wiki,wikibase,wikidata,wikimedia,wikipedia
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content :: Wiki
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Utilities
Requires-Python: >=3.5.0
License-File: LICENSE
Requires-Dist: requests<2.26.0,>=2.20.1; python_version < "3.6"
Requires-Dist: requests>=2.20.1; python_version >= "3.6"
Provides-Extra: eventstreams
Requires-Dist: sseclient!=0.0.23,!=0.0.24,>=0.0.18; extra == "eventstreams"
Provides-Extra: isbn
Requires-Dist: python-stdnum>=1.15; extra == "isbn"
Provides-Extra: graphviz
Requires-Dist: pydot>=1.2; extra == "graphviz"
Provides-Extra: google
Requires-Dist: google>=1.7; extra == "google"
Provides-Extra: mwparserfromhell
Requires-Dist: mwparserfromhell>=0.3.3; extra == "mwparserfromhell"
Provides-Extra: tkinter
Requires-Dist: Pillow<8.0.0,>=6.2.2; python_version < "3.6" and extra == "tkinter"
Requires-Dist: Pillow>=6.2.2; (python_version >= "3.6" and python_version < "3.9") and extra == "tkinter"
Requires-Dist: Pillow>=8.0.0; python_version >= "3.9" and extra == "tkinter"
Provides-Extra: mwoauth
Requires-Dist: mwoauth!=0.3.1,>=0.2.4; extra == "mwoauth"
Provides-Extra: html
Requires-Dist: BeautifulSoup4; extra == "html"
Provides-Extra: http
Requires-Dist: fake_useragent; extra == "http"
Provides-Extra: flake8
Requires-Dist: flake8>=3.7.5; extra == "flake8"
Requires-Dist: pydocstyle>=4.0.0; extra == "flake8"
Requires-Dist: hacking; extra == "flake8"
Requires-Dist: flake8-coding; extra == "flake8"
Requires-Dist: flake8-colors>=0.1.9; extra == "flake8"
Requires-Dist: flake8-comprehensions>=3.1.4; python_version >= "3.8" and extra == "flake8"
Requires-Dist: flake8-comprehensions>=2.2.0; extra == "flake8"
Requires-Dist: flake8-docstrings>=1.3.1; extra == "flake8"
Requires-Dist: flake8-future-import; extra == "flake8"
Requires-Dist: flake8-mock>=0.3; extra == "flake8"
Requires-Dist: flake8-print>=2.0.1; extra == "flake8"
Requires-Dist: flake8-quotes>=2.0.1; extra == "flake8"
Requires-Dist: flake8-string-format; extra == "flake8"
Requires-Dist: flake8-tuple>=0.2.8; extra == "flake8"
Requires-Dist: flake8-no-u-prefixed-strings>=0.2; extra == "flake8"
Requires-Dist: pep8-naming>=0.7; extra == "flake8"
Requires-Dist: pyflakes>=2.1.0; extra == "flake8"
Provides-Extra: flickrripper-py
Requires-Dist: flickrapi>=2.2; extra == "flickrripper-py"
Requires-Dist: Pillow<8.0.0,>=6.2.2; python_version < "3.6" and extra == "flickrripper-py"
Requires-Dist: Pillow>=6.2.2; (python_version >= "3.6" and python_version < "3.9") and extra == "flickrripper-py"
Requires-Dist: Pillow>=8.0.0; python_version >= "3.9" and extra == "flickrripper-py"
Provides-Extra: imageharvest-py
Requires-Dist: BeautifulSoup4; extra == "imageharvest-py"
Provides-Extra: isbn-py
Requires-Dist: python-stdnum>=1.15; extra == "isbn-py"
Provides-Extra: match-images-py
Requires-Dist: Pillow<8.0.0,>=6.2.2; python_version < "3.6" and extra == "match-images-py"
Requires-Dist: Pillow>=6.2.2; (python_version >= "3.6" and python_version < "3.9") and extra == "match-images-py"
Requires-Dist: Pillow>=8.0.0; python_version >= "3.9" and extra == "match-images-py"
Provides-Extra: patrol-py
Requires-Dist: mwparserfromhell>=0.3.3; extra == "patrol-py"
Provides-Extra: states-redirect-py
Requires-Dist: pycountry; extra == "states-redirect-py"
Provides-Extra: weblinkchecker-py
Requires-Dist: memento_client!=0.6.0,>=0.5.1; extra == "weblinkchecker-py"
Provides-Extra: scripts
Requires-Dist: flickrapi>=2.2; extra == "scripts"
Requires-Dist: Pillow<8.0.0,>=6.2.2; python_version < "3.6" and extra == "scripts"
Requires-Dist: Pillow>=6.2.2; (python_version >= "3.6" and python_version < "3.9") and extra == "scripts"
Requires-Dist: Pillow>=8.0.0; python_version >= "3.9" and extra == "scripts"
Requires-Dist: BeautifulSoup4; extra == "scripts"
Requires-Dist: python-stdnum>=1.15; extra == "scripts"
Requires-Dist: Pillow<8.0.0,>=6.2.2; python_version < "3.6" and extra == "scripts"
Requires-Dist: Pillow>=6.2.2; (python_version >= "3.6" and python_version < "3.9") and extra == "scripts"
Requires-Dist: Pillow>=8.0.0; python_version >= "3.9" and extra == "scripts"
Requires-Dist: mwparserfromhell>=0.3.3; extra == "scripts"
Requires-Dist: pycountry; extra == "scripts"
Requires-Dist: memento_client!=0.6.0,>=0.5.1; extra == "scripts"
Dynamic: classifier
Dynamic: description
Dynamic: download-url
Dynamic: home-page
Dynamic: keywords
Dynamic: license
Dynamic: license-file
Dynamic: maintainer
Dynamic: maintainer-email
Dynamic: provides-extra
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

.. image:: https://travis-ci.org/wikimedia/pywikibot.svg?branch=master
   :alt: Travis Build Status
   :target: https://travis-ci.org/wikimedia/pywikibot
.. image:: https://ci.appveyor.com/api/projects/status/xo2g4ctoom8k6yvw/branch/master?svg=true
   :alt: AppVeyor Build Status
   :target: https://ci.appveyor.com/project/ladsgroup/pywikibot-g4xqx
.. image:: https://codecov.io/gh/wikimedia/pywikibot/branch/master/graph/badge.svg
   :alt: Code coverage
   :target: https://codecov.io/gh/wikimedia/pywikibot
.. image:: https://api.codeclimate.com/v1/badges/de6ca4c66e7c7bee4156/maintainability
   :alt: Maintainability
   :target: https://codeclimate.com/github/wikimedia/pywikibot/maintainability
.. image:: https://img.shields.io/pypi/pyversions/pywikibot.svg
   :alt: Python
   :target: https://www.python.org/downloads/
.. image:: https://img.shields.io/pypi/v/pywikibot.svg
   :alt: Pywikibot release
   :target: https://pypi.org/project/pywikibot/
.. image:: https://pepy.tech/badge/pywikibot
   :alt: Total downloads
   :target: https://pepy.tech/project/pywikibot
.. image:: https://static.pepy.tech/personalized-badge/pywikibot?period=month&units=international_system&left_color=black&right_color=blue&left_text=monthly
   :alt: Monthly downloads
   :target: https://pepy.tech/project/pywikibot
.. image:: https://static.pepy.tech/personalized-badge/pywikibot?period=week&units=international_system&left_color=black&right_color=blue&left_text=weekly
   :alt: Weekly downloads
   :target: https://pepy.tech/project/pywikibot
 
Pywikibot
=========

The Pywikibot framework is a Python library that interfaces with the
`MediaWiki API <https://www.mediawiki.org/wiki/API:Main_page>`_
version 1.19 or higher.

Also included are various general function scripts that can be adapted for
different tasks.

For further information about the library excluding scripts see
the full `code documentation <https://doc.wikimedia.org/pywikibot/>`_.

Quick start
-----------

::

    git clone https://gerrit.wikimedia.org/r/pywikibot/core.git
    cd core
    git submodule update --init
    python pwb.py script_name

Or to install using PyPI (excluding scripts)
::

    pip install -U setuptools
    pip install pywikibot

Our `installation
guide <https://www.mediawiki.org/wiki/Manual:Pywikibot/Installation>`_
has more details for advanced usage.

Basic Usage
-----------

If you wish to write your own script it's very easy to get started:

::

    import pywikibot
    site = pywikibot.Site('en', 'wikipedia')  # The site we want to run our bot on
    page = pywikibot.Page(site, 'Wikipedia:Sandbox')
    page.text = page.text.replace('foo', 'bar')
    page.save('Replacing "foo" with "bar"')  # Saves the page

Wikibase Usage
--------------

Wikibase is a flexible knowledge base software that drives Wikidata.
A sample pywikibot script for getting data from Wikibase:

::

    import pywikibot
    site = pywikibot.Site('wikipedia:en')
    repo = site.data_repository()  # the wikibase repository for given site
    page = repo.page_from_repository('Q91')  # create a local page for the given item
    item = pywikibot.ItemPage(repo, 'Q91')  # a repository item
    data = item.get()  # get all item data from repository for this item

-------------------------------------------------------------------------------------------

For more documentation on pywikibot see our `docs <https://doc.wikimedia.org/pywikibot/>`_.

The contents of the package
---------------------------

    +----------------------------------------------------------------------------------+
    |  Directories                                                                     |
    +===========================+======================================================+
    |  pywikibot                | Library routines, control files and global settings  |
    +---------------------------+------------------------------------------------------+
    |  pywikibot/comms          | Communication layer                                  |
    +---------------------------+------------------------------------------------------+
    |  pywikibot/data           | Module with several layers for data access to wiki   |
    +---------------------------+------------------------------------------------------+
    |  pywikibot/families       | wiki-specific information and settings               |
    +---------------------------+------------------------------------------------------+
    |  pywikibot/page           | Module with classes for MediaWiki page content       |
    +---------------------------+------------------------------------------------------+
    |  pywikibot/site           | Module with classes for MediaWiki sites              |
    +---------------------------+------------------------------------------------------+
    |  pywikibot/specialbots    | Module containing special bots reusable by scripts   |
    +---------------------------+------------------------------------------------------+
    |  pywikibot/tools          | Miscellaneous helper functions (not wiki-dependent)  |
    +---------------------------+------------------------------------------------------+
    |  pywikibot/userinterfaces | GUI and terminal interface                           |
    +---------------------------+------------------------------------------------------+

Required external programs
---------------------------

It may require the following programs to function properly:

* `7za`: To extract 7z files

Roadmap
-------

**Note: 5.6.0 is the last release supporting MediaWiki 1.19-1.22.**

Breaking changes with Pywikibot 6.0.0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* MediaWiki 1.23+ is supported only
* comms.http.request() will return a requests.Response object rather than plain text
* comms.threadedhttp module will be removed
* config.db_hostname will be renamed to db_hostname_format
* APISite.loadimageinfo() will not return any content

Current release changes
~~~~~~~~~~~~~~~~~~~~~~~

* 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 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 (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

Future release notes
~~~~~~~~~~~~~~~~~~~~

* 5.6.0: APISite.loadimageinfo will no longer return any content
* 5.6.0: pagenenerators.handleArg() method will be removed in favour of handle_arg() (T271437)
* 5.5.0: Site.getuserinfo() method will be dropped in favour of userinfo property
* 5.5.0: Site.getglobaluserinfo() method will be dropped in favour of globaluserinfo property
* 5.4.0: Support of MediaWiki < 1.23 will be dropped with release 6.0  (T268979)
* 5.4.0: LoginManager.getCookie() is deprecated and will be removed
* 5.4.0: tools.PY2 will be removed (T213287)
* 5.3.0: LogEntryFactory.logtypes property will be removed
* 5.3.0: stdout parameter of logging.output()/pywikibot.output() function will be desupported
* 5.0.0: HttpRequest result of http.fetch() will be replaced by requests.Response (T265206)
* 5.0.0: OptionHandler.options dict will be removed in favour of OptionHandler.opt
* 5.0.0: Methods deprecated for 5 years or longer will be removed
* 5.0.0: pagegenerators.ReferringPageGenerator is desupported and will be removed

Release history
---------------

See https://github.com/wikimedia/pywikibot/blob/stable/HISTORY.rst

Contributing
------------

Our code is maintained on Wikimedia's `Gerrit installation <https://gerrit.wikimedia.org/>`_,
`learn <https://www.mediawiki.org/wiki/Developer_account>`_ how to get
started.

Code of Conduct
---------------

The development of this software is covered by a `Code of Conduct <https://www.mediawiki.org/wiki/Code_of_Conduct>`_.

