From b38d6870ebbb96662e7cbe5216f34a57c88517fd Mon Sep 17 00:00:00 2001 From: Jan Pochyla Date: Tue, 3 Apr 2018 20:38:12 +0200 Subject: [PATCH] src/trezor/utils: replace unimport with explicit fns, remove parent references --- src/trezor/utils.py | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/trezor/utils.py b/src/trezor/utils.py index ca2eab057..4673c6aff 100644 --- a/src/trezor/utils.py +++ b/src/trezor/utils.py @@ -4,18 +4,24 @@ import gc from trezorutils import halt, memcpy, set_mode_unprivileged, symbol, model # noqa: F401 -def unimport(genfunc): - async def inner(*args, **kwargs): - mods = set(sys.modules) - try: - ret = await genfunc(*args, **kwargs) - finally: - for mod in sys.modules: - if mod not in mods: - del sys.modules[mod] - gc.collect() - return ret - return inner +def unimport_begin(): + return set(sys.modules) + + +def unimport_end(mods): + for mod in sys.modules: + if mod not in mods: + # remove reference from sys.modules + del sys.modules[mod] + # remove reference from the parent module + i = mod.rfind('.') + if i < 0: + continue + path = mod[:i] + name = mod[i + 1:] + delattr(sys.modules[path], name) + # collect removed modules + gc.collect() def ensure(cond, msg=None):