| 631 | |
| 632 | |
| 633 | class SysModulesSnapshot: |
| 634 | def __init__(self, preserve: Optional[Callable[[str], bool]] = None) -> None: |
| 635 | self.__preserve = preserve |
| 636 | self.__saved = dict(sys.modules) |
| 637 | |
| 638 | def restore(self) -> None: |
| 639 | if self.__preserve: |
| 640 | self.__saved.update( |
| 641 | (k, m) for k, m in sys.modules.items() if self.__preserve(k) |
| 642 | ) |
| 643 | sys.modules.clear() |
| 644 | sys.modules.update(self.__saved) |
| 645 | |
| 646 | |
| 647 | class SysPathsSnapshot: |
no outgoing calls