Source code for pywikibot.scripts.version

#!/usr/bin/env python3
"""Script to determine the Pywikibot version (tag, revision and date).

The following option is supported:

-nouser  do not print usernames; otherwise they are printed for each
         registered family

.. versionchanged:: 7.0
   version script was moved to the framework scripts folder.
.. versionadded:: 9.1.2
   the *-nouser* option was added.
.. versionchanged:: 10.6
   The User-Agent string is now printed for the default site. To print
   it for another site, call the ``pwb`` wrapper with the global option,
   e.g.:

       pwb -site:wikipedia:test version

   .. note::
      The shown UA reflects the default config settings. It might differ
      if a user-agent is passed via the *headers* parameter to
      :func:`comms.http.request`, :func:`comms.http.fetch` or to
      :class:`comms.eventstreams.EventStreams`. It can also differ if
      :func:`comms.http.fetch` is used with *use_fake_user_agent* set to
      ``True`` or to a custom UA string, or if
      *fake_user_agent_exceptions* is defined in the :mod:`config` file.
"""
#
# (C) Pywikibot team, 2007-2025
#
# Distributed under the terms of the MIT license.
#
from __future__ import annotations

import os
import sys
from pathlib import Path

import pywikibot
from pywikibot.comms.http import user_agent
from pywikibot.version import getversion


[docs] class DummyModule: """Fake module instance.""" __version__ = 'n/a'
try: import packaging except ImportError: packaging = DummyModule() try: import mwparserfromhell except ImportError: mwparserfromhell = DummyModule() try: import wikitextparser except ImportError: wikitextparser = DummyModule() try: import requests except ImportError: requests = DummyModule() WMF_CACERT = 'MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs'
[docs] def main(*args: str) -> None: """Print pywikibot version and important settings. .. versionchanged:: 9.1.2 usernames are not printed with ``-nouser`` option. """ pywikibot.info('Pywikibot: ' + getversion()) pywikibot.info('Release version: ' + pywikibot.__version__) pywikibot.info('packaging version: ' + packaging.__version__) pywikibot.info('mwparserfromhell version: ' + mwparserfromhell.__version__) pywikibot.info('wikitextparser version: ' + wikitextparser.__version__) pywikibot.info('requests version: ' + requests.__version__) has_wikimedia_cert = False if (not hasattr(requests, 'certs') or not hasattr(requests.certs, 'where') or not callable(requests.certs.where)): pywikibot.info(' cacerts: not defined') else: cert = Path(requests.certs.where()) # is_symlink() required for Python 3.12 and below. # Otherwise follow_symlinks=True could be used in is_file(). if not cert.is_file() or cert.is_symlink(): pywikibot.info(f' cacerts: {cert.name} (missing)') else: pywikibot.info(f' cacerts: {cert}') text = cert.read_text(encoding='utf-8') if WMF_CACERT in text: has_wikimedia_cert = True pywikibot.info(' certificate test: {}' .format('ok' if has_wikimedia_cert else 'not ok')) if not has_wikimedia_cert: pywikibot.info(' Please reinstall requests!') pywikibot.info('Python: ' + sys.version) pywikibot.info('User-Agent: ' + user_agent(pywikibot.Site())) # check environment settings settings = {key for key in os.environ if key.startswith('PYWIKIBOT')} settings.update(['PYWIKIBOT_DIR', 'PYWIKIBOT_DIR_PWB', 'PYWIKIBOT_NO_USER_CONFIG']) for environ_name in sorted(settings): pywikibot.info( '{}: {}'.format(environ_name, os.environ.get(environ_name, 'Not set') or "''")) pywikibot.info('Config base dir: ' + pywikibot.config.base_dir) if '-nouser' in sys.argv: usernames_items = {} else: usernames_items = pywikibot.config.usernames.items() for family, usernames in usernames_items: if not usernames: continue pywikibot.info(f"Usernames for family '{family}':") for lang, username in usernames.items(): pywikibot.info(f'\t{lang}: {username}')
if __name__ == '__main__': main()