summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrien Di Mascio <Adrien.DiMascio@logilab.fr>2009-08-04 18:36:34 +0200
committerAdrien Di Mascio <Adrien.DiMascio@logilab.fr>2009-08-04 18:36:34 +0200
commitec54cda5aae89144345adb1545239af7c55fd470 (patch)
tree4685d070cb80192df9a38a8bc6c0065e03372f98
parentd401c140c6d0f791da7a3f3d4090529f86933c4b (diff)
downloadlogilab-common-ec54cda5aae89144345adb1545239af7c55fd470.tar.gz
[modutils] new cleanup_sys_modules function (backported from yams)
-rw-r--r--ChangeLog3
-rw-r--r--modutils.py10
2 files changed, 13 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index e9d4fed..08cd6d0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -14,6 +14,9 @@ ChangeLog for logilab.common
* sphinxutils: simplified API
+ * modutils: new cleanup_sys_modules function that removes modules under a list
+ of directories from sys.modules
+
2009-07-17 -- 0.42.0
* pyro_ext: new module for pyro utilities
diff --git a/modutils.py b/modutils.py
index 5755a4f..837d2b0 100644
--- a/modutils.py
+++ b/modutils.py
@@ -444,6 +444,16 @@ def get_source_file(filename, include_no_ext=False):
raise NoSourceFile(filename)
+def cleanup_sys_modules(directories):
+ """remove submodules of `directories` from `sys.modules`"""
+ for modname, module in sys.modules.items():
+ modfile = getattr(module, '__file__', None)
+ if modfile:
+ for directory in directories:
+ if modfile.startswith(directory):
+ del sys.modules[modname]
+ break
+
def is_python_source(filename):
"""