]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
PAL10310: Problem with incomplete import of python CORBA modules.
authorjfa <jfa@opencascade.com>
Tue, 13 Dec 2005 13:07:08 +0000 (13:07 +0000)
committerjfa <jfa@opencascade.com>
Tue, 13 Dec 2005 13:07:08 +0000 (13:07 +0000)
salome_adm/unix/config_files/check_omniorb.m4
salome_adm/unix/pythonbe.py [new file with mode: 0644]
src/Container/SALOME_ContainerPy.py
src/KERNEL_PY/Makefile.in
src/KERNEL_PY/kernel_shared_modules.py
src/KERNEL_PY/omnipatch.py [new file with mode: 0644]
src/KERNEL_PY/salome.py
src/KERNEL_PY/salome_shared_modules.py

index 1f63365bf30438d3bf8ed8057466d08d16f84114..7a6b6fd6dd8416103438511d68c22247d6dd81a5 100644 (file)
@@ -181,8 +181,11 @@ fi
 if test "x$omniORB_ok" = "xyes" 
 then
 
-  OMNIORB_IDLCXXFLAGS="-nf -I$OMNIORB_ROOT/idl"
-  OMNIORB_IDLPYFLAGS="-bpython -I$OMNIORB_ROOT/idl"
+  OMNIORB_IDLCXXFLAGS="-nf -I${OMNIORB_ROOT}/idl"
+  OMNIORB_IDLPYFLAGS_1='-bpythonbe -p ${top_srcdir}/salome_adm/unix'
+  OMNIORB_IDLPYFLAGS_2=" -I${OMNIORB_ROOT}/idl"
+  OMNIORB_IDLPYFLAGS=${OMNIORB_IDLPYFLAGS_1}${OMNIORB_IDLPYFLAGS_2}
+
   AC_SUBST(OMNIORB_IDLCXXFLAGS)
   AC_SUBST(OMNIORB_IDLPYFLAGS)
 
diff --git a/salome_adm/unix/pythonbe.py b/salome_adm/unix/pythonbe.py
new file mode 100644 (file)
index 0000000..85be617
--- /dev/null
@@ -0,0 +1,21 @@
+
+pymodule_template = """\
+# DO NOT EDIT THIS FILE!
+#
+# Python module @module@ generated by omniidl
+
+import omnipatch
+omnipatch.updateModule("@module@")
+
+# ** 1. Stub files contributing to this module
+
+# ** 2. Sub-modules
+
+# ** 3. End"""
+
+import omniidl_be.python
+omniidl_be.python.pymodule_template=pymodule_template
+
+def run(tree, args):
+    omniidl_be.python.run(tree, args)
+
index 23ac0195ace0477af9dbb4b8d7e5b19e7096f68e..0ee6b8cd06c524bd455c2c755cbfcc2de9469a6c 100755 (executable)
 import os
 import sys
 import string
+import omnipatch                     # PAL10310
 from omniORB import CORBA, PortableServer
-# import SALOMEDS before other SALOME modules
-# (if not, incomplete import done by SALOME module: no load of SALOMEDS_attributes)
 import SALOMEDS 
 import Engines, Engines__POA
-reload(Engines)
-reload(Engines__POA)
 from SALOME_NamingServicePy import *
 from SALOME_ComponentPy import *
 
index 0f9b8963e58d874ad54180311eff7829d12ad44e..f5f079c20e08d1083d106a81dc00ad36cc395ce7 100755 (executable)
@@ -31,7 +31,7 @@ VPATH=.:@srcdir@:@top_srcdir@/idl
 
 @COMMENCE@
 
-EXPORT_PYSCRIPTS = Help.py PyInterp.py salome.py salome_shared_modules.py batchmode_salome.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 salome_shared_modules.py batchmode_salome.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 5be2f15f469c0c9337fdf85d090523638279a2f9..3dea9f9956c006f239c67a76604fc3e2d1b98512 100755 (executable)
@@ -22,73 +22,9 @@ 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
+register_name("omnipatch")
+import omnipatch
 
-    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
-
-# BE CAREFUL
-# Engines, SALOME, SALOMEDS must be imported in that order because :
-# Engines imports SALOME_Component_idl
-# SALOME imports SALOME_Session_idl and SALOME_Exception_idl which imports SALOME_Component_idl
-# and SALOMEDS imports SALOMEDS_idl and SALOMEDS_Attributes_idl which imports SALOME_Exception_idl
-# If SALOME is imported before Engines, that module would not be completely imported
 import Engines
 import SALOME
 import SALOMEDS
diff --git a/src/KERNEL_PY/omnipatch.py b/src/KERNEL_PY/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 f746809856f1b4b2f01183a92f16750e209ddc20..1029e279e2828668cc46af01281473e28784a669 100755 (executable)
@@ -56,7 +56,8 @@ import glob,os,sys
 import import_hook
 # 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