File: helpers.py

package info (click to toggle)
python-griffe 1.15.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,292 kB
  • sloc: python: 17,202; makefile: 47; sh: 24; javascript: 13
file content (33 lines) | stat: -rw-r--r-- 1,298 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
"""Helpers for tests."""

from __future__ import annotations

import os
import sys
from tempfile import gettempdir

from griffe._internal.tests import _TMPDIR_PREFIX


def clear_sys_modules(name: str | None = None) -> None:
    """Clear `sys.modules` of a module and its submodules.

    Use this function after having used `temporary_pypackage` and `inspect` together.
    Better yet, use `temporary_inspected_package` and `temporary_inspected_module`
    which will automatically clear `sys.modules` when exiting.

    Parameters:
        name: A top-level module name. If None, clear all temporary inspected modules
            (located in the OS' default temporary directory).
    """
    if name:
        for module_name in tuple(sys.modules.keys()):
            if module_name == name or module_name.startswith(f"{name}."):
                sys.modules.pop(module_name, None)
    else:
        prefix = os.path.join(gettempdir(), _TMPDIR_PREFIX)  # noqa: PTH118
        for module_name, module in tuple(sys.modules.items()):
            if ((file := getattr(module, "__file__", "")) and file.startswith(prefix)) or (
                (paths := getattr(module, "__path__", ())) and any(path.startswith(prefix) for path in paths)
            ):
                sys.modules.pop(module_name, None)