eric7/DebugClients/Python/coverage/optional.py

branch
eric7
changeset 8312
800c432b34c8
parent 7975
7d493839a8fc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/DebugClients/Python/coverage/optional.py	Sat May 15 18:45:04 2021 +0200
@@ -0,0 +1,76 @@
+# 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