]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
PAL10310: Probleme with incomplete import of python CORBA modules. Solution provided... V2_2_6
authorjfa <jfa@opencascade.com>
Tue, 15 Nov 2005 16:27:20 +0000 (16:27 +0000)
committerjfa <jfa@opencascade.com>
Tue, 15 Nov 2005 16:27:20 +0000 (16:27 +0000)
src/SALOME_SWIG_WITHOUTIHM/Makefile.in
src/SALOME_SWIG_WITHOUTIHM/kernel_shared_modules.py
src/SALOME_SWIG_WITHOUTIHM/omnipatch.py [new file with mode: 0644]
src/SALOME_SWIG_WITHOUTIHM/salome.py
src/SALOME_SWIG_WITHOUTIHM/salome_shared_modules.py

index be103f272c60df02f81e9ba8bf681a241f0d2a55..f03d9431e7379f2decc90ccedd8557fe51ce9fb7 100755 (executable)
@@ -38,7 +38,7 @@ VPATH=.:@srcdir@:@top_srcdir@/idl
 LIB_SRC = 
 
 #SWIG_DEF = libSALOME_Swig.i
-EXPORT_PYSCRIPTS = Help.py PyInterp.py salome.py examplevtk1.py supervisionexample.py supervisiongeomexample.py salome_shared_modules.py batchmode_salome.py test_table.py test_big_table.py test_many_objects.py import_hook.py salome_test.py salome_kernel.py salome_study.py salome_iapp.py salome_ComponentGUI.py
+EXPORT_PYSCRIPTS = Help.py PyInterp.py salome.py examplevtk1.py supervisionexample.py supervisiongeomexample.py salome_shared_modules.py batchmode_salome.py test_table.py test_big_table.py test_many_objects.py import_hook.py salome_test.py salome_kernel.py salome_study.py salome_iapp.py salome_ComponentGUI.py omnipatch.py
 
 EXPORT_SHAREDPYSCRIPTS=kernel_shared_modules.py
 
index b218ef6d31aeaecda9ecfbbb62e27b0b416a02db..8de64ad3a5e82769797c7da1b1c5cb29500c8c52 100755 (executable)
@@ -15,69 +15,8 @@ register_pattern(lambda(x):x.endswith("_Swig"))
 register_name("omniORB")
 import omniORB
 
-register_name("CosNaming")
-import CosNaming
-
-# Modify omniORB to use right sys.modules dictionnary 
-# with multi-interpreter feature
-# openModule and newModule are functions of omniORB/__init__.py module
-# modified to register modules to share
-# Function to return a Python module for the required IDL module name
-def openModule(mname, fname=None):
-    # Salome modification start
-    import sys
-    # Salome modification end
-
-    if mname == "CORBA":
-        mod = sys.modules["omniORB.CORBA"]
-    elif sys.modules.has_key(mname):
-        mod = sys.modules[mname]
-    else:
-        mod = newModule(mname)
-
-    # Salome modification start
-    import_hook.set_shared_imported(mname,mod)
-    # Salome modification end
-
-
-    if not hasattr(mod, "__doc__") or mod.__doc__ is None:
-        mod.__doc__ = "omniORB IDL module " + mname + "\n\n" + \
-                      "Generated from:\n\n"
-
-    if fname is not None:
-        mod.__doc__ = mod.__doc__ + "  " + fname + "\n"
-
-    return mod
-
-# Function to create a new module, and any parent modules which do not
-# already exist
-def newModule(mname):
-    # Salome modification start
-    import sys
-    # Salome modification end
-
-    mlist   = string.split(mname, ".")
-    current = ""
-    mod     = None
-
-    for name in mlist:
-        current = current + name
-
-        if sys.modules.has_key(current):
-            mod = sys.modules[current]
-        else:
-            newmod = imp.new_module(current)
-            if mod: setattr(mod, name, newmod)
-            sys.modules[current] = mod = newmod
-
-        current = current + "."
-
-    return mod
-# Replace openModule and newModule by modified ones
-# to take into account the sys.modules that matches
-# the right one (multi-interpreter feature)
-omniORB.openModule=openModule
-omniORB.newModule=newModule
+register_name("omnipatch")
+import omnipatch
 
 # BE CAREFUL
 # Engines, SALOME, SALOMEDS must be imported in that order because :
diff --git a/src/SALOME_SWIG_WITHOUTIHM/omnipatch.py b/src/SALOME_SWIG_WITHOUTIHM/omnipatch.py
new file mode 100644 (file)
index 0000000..20addc6
--- /dev/null
@@ -0,0 +1,97 @@
+"""
+  This patch of omniORB is made to make it work with multiple interpreters
+  and to correct the problem of incomplete import of CORBA packages
+  in some situations common in SALOME
+
+  This patch add or modify functions in omniORB module.
+
+  In multiple interpreters context, omniORB module is meant to be shared among
+  all interpreters
+"""
+import sys,string,imp
+import omniORB
+# Map of partially-opened modules
+_partialModules = {}
+# Map of modules to share
+shared_imported={}
+
+# Function to return a Python module for the required IDL module name
+def openModule(mname, fname=None):
+    # Salome modification start
+    # Be sure to use the right module dictionnary
+    import sys
+    # Salome modification end
+
+    if mname == "CORBA":
+        mod = sys.modules["omniORB.CORBA"]
+
+    elif sys.modules.has_key(mname):
+        mod = sys.modules[mname]
+
+        if _partialModules.has_key(mname):
+            pmod = _partialModules[mname]
+            mod.__dict__.update(pmod.__dict__)
+            del _partialModules[mname]
+
+    elif _partialModules.has_key(mname):
+        mod = _partialModules[mname]
+
+    else:
+        mod = newModule(mname)
+
+    # Salome modification start
+    shared_imported[mname]=mod
+    # Salome modification end
+
+    if not hasattr(mod, "__doc__") or mod.__doc__ is None:
+        mod.__doc__ = "omniORB IDL module " + mname + "\n\n" + \
+                      "Generated from:\n\n"
+
+    if fname is not None:
+        mod.__doc__ = mod.__doc__ + "  " + fname + "\n"
+
+    return mod
+
+# Function to create a new module, and any parent modules which do not
+# already exist
+def newModule(mname):
+    # Salome modification start
+    # Be sure to use the right module dictionnary
+    import sys
+    # Salome modification end
+
+    mlist   = string.split(mname, ".")
+    current = ""
+    mod     = None
+
+    for name in mlist:
+        current = current + name
+
+        if sys.modules.has_key(current):
+            mod = sys.modules[current]
+
+        elif _partialModules.has_key(current):
+            mod = _partialModules[current]
+
+        else:
+            newmod = imp.new_module(current)
+            if mod: setattr(mod, name, newmod)
+            _partialModules[current] = mod = newmod
+
+        current = current + "."
+
+    return mod
+
+# Function to update a module with the partial module store in the
+# partial module map
+def updateModule(mname):
+    if _partialModules.has_key(mname):
+        pmod = _partialModules[mname]
+        mod  = sys.modules[mname]
+        mod.__dict__.update(pmod.__dict__)
+        del _partialModules[mname]
+
+omniORB.updateModule=updateModule
+omniORB.newModule=newModule
+omniORB.openModule=openModule
+
index e8d5d5bacaae82df26cc3eed8493f570df448af4..d853b2cb63d3df6754d7b808367ffcf3755f847b 100755 (executable)
@@ -24,6 +24,7 @@
 #  Module : SALOME
 #  $Header$
 
+import omnipatch
 from salome_kernel import *
 from salome_study import *
 from salome_iapp import *
index 56c8841767092ae79ba5487e0a8bc6df3a58c21e..3e53394eeab2bd3b6de43a19818f27cf08321886 100755 (executable)
@@ -56,7 +56,8 @@ import glob,os,sys
 
 # shared_imported, patterns, register_name, register_pattern
 # will be shared by all Python sub interpretors
-from import_hook import shared_imported
+from omnipatch import shared_imported
+import_hook.shared_imported=shared_imported
 from import_hook import patterns
 from import_hook import register_name
 from import_hook import register_pattern