Salome HOME
updated copyright message
[modules/kernel.git] / src / Container / SALOME_Container.py
index 259b0a70c862d3d6bf3224a56f00334dcf87c7c6..8abee5f504b3f604bf5d961d7e7bca9a760641c1 100644 (file)
@@ -1,5 +1,5 @@
 #  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2019  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2023  CEA, EDF, OPEN CASCADE
 #
 # Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -34,7 +34,7 @@
 import os
 import sys
 import traceback
-import imp
+import importlib
 from omniORB import CORBA, PortableServer
 import SALOMEDS
 import Engines, Engines__POA
@@ -60,11 +60,17 @@ class SALOME_Container_i:
 
     def __init__(self ,containerName, containerIORStr):
         MESSAGE( "SALOME_Container_i::__init__" )
-        self._orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID)
+        try:
+          argv = sys.argv
+        except AttributeError :
+          # for embedded python interpreter
+          # shouldn't be needed after python 3.8
+          # see https://bugs.python.org/issue32573
+          argv = ['']
+        self._orb = CORBA.ORB_init(argv, CORBA.ORB_ID)
         self._poa = self._orb.resolve_initial_references("RootPOA")
         self._containerName = containerName
         if verbose(): print("SALOME_Container.SALOME_Container_i : _containerName ",self._containerName)
-        #self._naming_service = SALOME_NamingServicePy_i(self._orb)
         self._container = self._orb.string_to_object(containerIORStr)
 
     #-------------------------------------------------------------------------
@@ -74,30 +80,31 @@ class SALOME_Container_i:
         ret=""
         try:
             if verbose(): print("try import ",componentName)
-            __import__(componentName)
+            importlib.import_module(componentName)
             if verbose(): print("import ",componentName," successful")
-        except ImportError as e:
+        except ImportError:
             #can't import python module componentName
             #try to find it in python path
             try:
-              fp, pathname, description = imp.find_module(componentName)
-              if fp:fp.close()
+              _specs = importlib.util.find_spec(componentName)
+              _module = importlib.util.module_from_spec(_specs)
+              _specs.loader.exec_module(_module)
               #module file found in path
               ret="Component "+componentName+": Python implementation found but it can't be loaded\n"
               ret=ret+traceback.format_exc(10)
             except ImportError as ee:
               ret="ImplementationNotFound"
-            except:
+            except Exception:
               if verbose():print("error when calling find_module")
               ret="ImplementationNotFound"
-        except:
+        except Exception:
             ret="Component "+componentName+": Python implementation found but it can't be loaded\n"
             ret=ret+traceback.format_exc(10)
             if verbose():
               traceback.print_exc()
               print("import ",componentName," not possible")
         return ret
-        
+
     #-------------------------------------------------------------------------
 
     def create_component_instance(self, componentName, instanceName):
@@ -105,7 +112,7 @@ class SALOME_Container_i:
         comp_iors=""
         ret=""
         try:
-            component=__import__(componentName)
+            component=importlib.import_module(componentName)
             factory=getattr(component,componentName)
             comp_i=factory(self._orb,
                            self._poa,
@@ -117,12 +124,12 @@ class SALOME_Container_i:
             MESSAGE( "SALOME_Container_i::create_component_instance : OK")
             comp_o = comp_i._this()
             comp_iors = self._orb.object_to_string(comp_o)
-        except:
+        except Exception:
             ret=traceback.format_exc(10)
             traceback.print_exc()
             MESSAGE( "SALOME_Container_i::create_component_instance : NOT OK")
         return comp_iors, ret
-        
+
 
     def create_pynode(self,nodeName,code):
         try:
@@ -131,7 +138,7 @@ class SALOME_Container_i:
           comp_o = self._poa.id_to_reference(id_o)
           comp_iors = self._orb.object_to_string(comp_o)
           return 0,comp_iors
-        except:
+        except Exception:
           exc_typ,exc_val,exc_fr=sys.exc_info()
           l=traceback.format_exception(exc_typ,exc_val,exc_fr)
           return 1,"".join(l)
@@ -143,7 +150,7 @@ class SALOME_Container_i:
           comp_o = self._poa.id_to_reference(id_o)
           comp_iors = self._orb.object_to_string(comp_o)
           return 0,comp_iors
-        except:
+        except Exception:
           exc_typ,exc_val,exc_fr=sys.exc_info()
           l=traceback.format_exception(exc_typ,exc_val,exc_fr)
           return 1,"".join(l)