eric6/DebugClients/Python/coverage/optional.py

Sat, 19 Jun 2021 16:22:11 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 19 Jun 2021 16:22:11 +0200
changeset 8434
a105f31ba10f
parent 7975
7d493839a8fc
permissions
-rw-r--r--

Fixed an issue causing list, set, dict and tuple derived classes not being handled correctly in the Variables Viewer (issue393).
(grafted from 91d5ffe5583962135de9296ad1e04dae863b5cb6)

# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt

"""
Imports that we need at runtime, but might not be present.

When importing one of these modules, always do it in the function where you
need the module.  Some tests will need to remove the module.  If you import
it at the top level of your module, then the test won't be able to simulate
the module being unimportable.

The import will always succeed, but the value will be None if the module is
unavailable.

Bad::

    # MyModule.py
    import unsure

    def use_unsure():
        unsure.something()

Also bad::

    # MyModule.py
    from coverage.optional import unsure

    def use_unsure():
        unsure.something()

Good::

    # MyModule.py

    def use_unsure():
        from coverage.optional import unsure
        if unsure is None:
            raise Exception("Module unsure isn't available!")

        unsure.something()

"""

import contextlib

# This file's purpose is to provide modules to be imported from here.
# pylint: disable=unused-import

# TOML support is an install-time extra option.
try:
    import toml
except ImportError:         # pragma: not covered
    toml = None


@contextlib.contextmanager
def without(modname):
    """Hide a module for testing.

    Use this in a test function to make an optional module unavailable during
    the test::

        with coverage.optional.without('toml'):
            use_toml_somehow()

    Arguments:
        modname (str): the name of a module importable from
            `coverage.optional`.

    """
    real_module = globals()[modname]
    try:
        globals()[modname] = None
        yield
    finally:
        globals()[modname] = real_module

eric ide

mercurial