From: Isaku Yamahata <[email protected]>

ryu-manager ryu/topology/dumper.py ryu/services/vrrp/dumper.py
results in loading ryu.topology.dumper twice.
ryu/services/vrrp/dumper.py is not loaded.
And also don't populate sys.path multiple times with same path.

Signed-off-by: Isaku Yamahata <[email protected]>
Signed-off-by: YAMAMOTO Takashi <[email protected]>
---
 ryu/utils.py | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 53 insertions(+), 9 deletions(-)

diff --git a/ryu/utils.py b/ryu/utils.py
index dd22084..435ce03 100644
--- a/ryu/utils.py
+++ b/ryu/utils.py
@@ -39,17 +39,61 @@ import re
 LOG = logging.getLogger('ryu.utils')
 
 
+def _abspath(path):
+    if path == '':
+        path = '.'
+    return os.path.abspath(path)
+
+
+def _split_modname(modpath):
+    sys_path = [_abspath(path) for path in sys.path]
+    modname = os.path.basename(modpath)
+    dirname = os.path.dirname(modpath)
+    while True:
+        if dirname in sys_path:
+            break
+        if not os.path.exists(os.path.join(dirname, '__init__.py')):
+            break
+
+        basename = os.path.basename(dirname)
+        if basename:
+            old_dirname = dirname
+            dirname = os.path.dirname(dirname)
+            if old_dirname == dirname:
+                break
+            if modname:
+                modname = basename + '.' + modname
+            else:
+                modname = basename
+        else:
+            break
+
+    return dirname, modname
+
+
+def _import(modname):
+    __import__(modname)
+    return sys.modules[modname]
+
+
 def import_module(modname):
     try:
-        __import__(modname)
-    except:
-        sys.path.append(os.path.dirname(os.path.abspath(modname)))
-        name = os.path.basename(modname)
-        if name.endswith('.py'):
-            name = name[:-3]
-        __import__(name)
-        return sys.modules[name]
-    return sys.modules[modname]
+        return _import(modname)
+    except ImportError:
+        pass
+
+    if modname.endswith('.py'):
+        modname = modname[:-3]
+        try:
+            return _import(modname)
+        except ImportError:
+            pass
+
+    modname = os.path.abspath(modname)
+    dirname, name = _split_modname(modname)
+    if dirname not in [_abspath(path) for path in sys.path]:
+        sys.path.append(dirname)
+    return _import(name)
 
 
 def round_up(x, y):
-- 
1.8.1.5


------------------------------------------------------------------------------
Get your SQL database under version control now!
Version control is standard for application code, but databases havent 
caught up. So what steps can you take to put your SQL databases under 
version control? Why should you start doing it? Read more to find out.
http://pubads.g.doubleclick.net/gampad/clk?id=49501711&iu=/4140/ostg.clktrk
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to