Page MenuHomePhabricator

Pywikibot's missing config-file check blocks access to module documentation
Closed, ResolvedPublic

Description

Because the check for existence of a valid user-config.py file is performed immediately on import of the pywikibot module, and results in a fatal error if that check fails, the check interferes with the ability to access the module documentation using pydoc in the absence of a configuration file or supported override:

$ pip3 install --user pywikibot
# Before
$ pydoc3 pywikibot
problem in pywikibot - RuntimeError: No user-config.py found in directory '/path/to/current/directory'.
  Please check that user-config.py is stored in the correct location.
  Directory where user-config.py is searched is determined as follows:

    Return the directory in which user-specific information is stored.

    This is determined in the following order:
     1.  If the script was called with a -dir: argument, use the directory
         provided in this argument.
     2.  If the user has a PYWIKIBOT_DIR environment variable, use the value
         of it.
     3.  If user-config is present in current directory, use the current
         directory.
     4.  If user-config is present in pwb.py directory, use that directory
     5.  Use (and if necessary create) a 'pywikibot' folder under
         'Application Data' or 'AppData\Roaming' (Windows) or
         '.pywikibot' directory (Unix and similar) under the user's home
         directory.

    Set PYWIKIBOT_NO_USER_CONFIG=1 to disable loading user-config.py

    @param test_directory: Assume that a user config file exists in this
        directory. Used to test whether placing a user config file in this
        directory will cause it to be selected as the base directory.
    @type test_directory: str or None
    @rtype: str
    


# After
$ PYWIKIBOT_NO_USER_CONFIG=1 pydoc3 pywikibot
Skipping loading of user-config.py.
family and mylang are not set.
Defaulting to family='wikipedia' and mylang='test'.
Help on package pywikibot:

NAME
    pywikibot - The initialization file for the Pywikibot framework.

PACKAGE CONTENTS
    __metadata__
    _wbtypes
    bot
    bot_choice
    comms (package)
    config2
    cosmetic_changes
    daemonize
    data (package)
    date
    diff
    echo
    editor
    exceptions
    families (package)
    family
    fixes
    flow
    i18n
    interwiki_graph
    logentries
    logging
    login
    page (package)
    pagegenerators
    plural
    proofreadpage
    site (package)
    site_detect
    specialbots (package)
    textlib
    throttle
    titletranslate
    tools (package)
    userinterfaces (package)
    version
    xmlreader

SUBMODULES
    config
[...]

Obviously, this is a low-severity issue as it can be worked around with little trouble by simply inserting PYWIKIBOT_NO_USER_CONFIG=1 into the environment, or even just creating a dummy user-config.py file. The current behavior is little more than a paper cut.

Still, it's one that will divide users into just two basic groups: either this issue becomes their very _first_ impression of pywikibot, or they never encounter it at all. If there's any way to put off the config-file check so that it's only performed when the module code is being executed (as opposed to merely imported) — or even just to special-case importing into the pydoc environment, specifically — it'd make the experience of the first group a bit more pleasant.