-def get_shared_imported_with_copy(name):
- module_dict= shared_imported.get(name)
- m=imp.new_module(name)
- m.__dict__.update(module_dict)
- return m
-def set_shared_imported_with_copy(name,module):
- shared_imported[name]=module.__dict__.copy()
- #print "Module %s shared registered" % name
-
-def import_hook(name, globals=None, locals=None, fromlist=None):
+def import_module(partname, fqname, parent):
+ """ 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:
+ pass
+ else:
+ return m
+
+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 == "*":
+ if not recursive:
+ try:
+ all = m.__all__
+ except AttributeError:
+ pass
+ else:
+ l.extend(ensure_fromlist(m, all, 1))
+ 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:
+ subname="%s.%s" % (m.__name__, sub)
+ submod = import_module(sub, subname, m)
+ #if not found ignore it
+ if submod:
+ l.append((subname,submod))
+ return l
+
+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
+ """