# -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
#
# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+
"""
This module replaces the standard import mechanism with one
that filters some imports that can't be done more than once.
""" Try to import module fqname
It's parent is module parent and has name partname
"""
+ #print "import_module",partname, fqname, parent
try:
m = sys.modules[fqname]
except KeyError:
def ensure_fromlist(m, fromlist, recursive=0):
""" Return the real modules list to be imported
"""
+ #print "ensure_fromlist",m, fromlist, recursive
l=[]
for sub in fromlist:
if sub == "*":
pass
else:
l.extend(ensure_fromlist(m, all, 1))
- elif hasattr(m,sub):
- submod=getattr(m,sub)
+ else:
+ #try to find if sub is an attribute (eventually dotted) of m
+ components=sub.split('.')
+ has_submod=True
+ submod=m
+ for comp in components:
+ if hasattr(submod,comp):
+ submod=getattr(submod, comp)
+ else:
+ has_submod=False
+ break
+
+ if has_submod:
+ #the attribute has been found
if type(submod) == type(sys):
l.append(("%s.%s" % (m.__name__, sub),submod))
- else:
+ else:
subname="%s.%s" % (m.__name__, sub)
submod = import_module(sub, subname, m)
- if not submod:
- raise ImportError, "No module named " + subname
- l.append((subname,submod))
+ #if not found ignore it
+ if submod:
+ l.append((subname,submod))
return l
-def import_hook(name, globals=None, locals=None, fromlist=None, *args):
+def import_hook(name, globals=None, locals=None, fromlist=None, *args, **kwds):
""" Import replacement for sharing modules among multiple interpreters
Mostly update sys.modules before doing real import
"""
#print "import_hook",name,fromlist
m=get_shared_imported(name,fromlist)
- module= original_import(name, globals, locals, fromlist, *args)
+ module= original_import(name, globals, locals, fromlist, *args, **kwds)
if fromlist:
#when fromlist is specified, module is the real module