X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FContainer%2FSALOME_ContainerPy.py;h=fafcc92a634272a975f8eb7055db362c4ae139f9;hb=3f048e2513c4a1053a84a98ebd708921c831fa23;hp=0ee6b8cd06c524bd455c2c755cbfcc2de9469a6c;hpb=36b4d0d5e82155abafd70bd5e61660744da41a4d;p=modules%2Fkernel.git diff --git a/src/Container/SALOME_ContainerPy.py b/src/Container/SALOME_ContainerPy.py index 0ee6b8cd0..fafcc92a6 100755 --- a/src/Container/SALOME_ContainerPy.py +++ b/src/Container/SALOME_ContainerPy.py @@ -1,37 +1,37 @@ #! /usr/bin/env python +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE # -# SALOME Container : implementation of container and engine for Kernel +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. # -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. # +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + +# SALOME Container : implementation of container and engine for Kernel # File : SALOME_ContainerPy.py # Author : Paul RASCLE, EDF # Module : SALOME # $Header$ - +# import os import sys import string -import omnipatch # PAL10310 + from omniORB import CORBA, PortableServer import SALOMEDS import Engines, Engines__POA @@ -40,10 +40,11 @@ from SALOME_ComponentPy import * from SALOME_utilities import * from Utils_Identity import getShortHostName +from launchConfigureParser import verbose #============================================================================= -#define an implementation of the container interface +#define an implementation of the container interface for the container implemented in Python class SALOME_ContainerPy_i (Engines__POA.Container): _orb = None @@ -59,9 +60,8 @@ class SALOME_ContainerPy_i (Engines__POA.Container): self._poa = poa myMachine=getShortHostName() Container_path = "/Containers/" + myMachine + "/" + containerName - #self._containerName = containerName self._containerName = Container_path - print "container name ",self._containerName + if verbose(): print("container name ",self._containerName) naming_service = SALOME_NamingServicePy_i(self._orb) self._naming_service = naming_service @@ -138,12 +138,12 @@ class SALOME_ContainerPy_i (Engines__POA.Container): def instance(self, nameToRegister, componentName): MESSAGE( "SALOME_ContainerPy_i::instance " + str(nameToRegister) + ' ' + str(componentName) ) self._numInstance = self._numInstance +1 - instanceName = nameToRegister + "_inst_" + `self._numInstance` + instanceName = nameToRegister + "_inst_" + repr(self._numInstance) - component=__import__(componentName) - factory=getattr(component,componentName) - comp_i=factory(self._orb, self._poa, self._this(), self._containerName, - instanceName, nameToRegister) + component=__import__(componentName) + factory=getattr(component,componentName) + comp_i=factory(self._orb, self._poa, self._this(), self._containerName, + instanceName, nameToRegister) MESSAGE( "SALOME_ContainerPy_i::instance : component created") comp_o = comp_i._this() @@ -154,13 +154,13 @@ class SALOME_ContainerPy_i (Engines__POA.Container): def load_impl(self, nameToRegister, componentName): MESSAGE( "SALOME_ContainerPy_i::load_impl " + str(nameToRegister) + ' ' + str(componentName) ) self._numInstance = self._numInstance +1 - instanceName = nameToRegister + "_inst_" + `self._numInstance` + instanceName = nameToRegister + "_inst_" + repr(self._numInstance) interfaceName = nameToRegister the_command = "import " + nameToRegister + "\n" the_command = the_command + "comp_i = " + nameToRegister + "." + nameToRegister the_command = the_command + "(self._orb, self._poa, self._this(), self._containerName, instanceName, interfaceName)\n" MESSAGE( "SALOME_ContainerPy_i::load_impl :" + str (the_command) ) - exec the_command + exec(the_command) comp_o = comp_i._this() return comp_o @@ -168,91 +168,80 @@ class SALOME_ContainerPy_i (Engines__POA.Container): def import_component(self, componentName): MESSAGE( "SALOME_Container_i::import_component" ) - ret=0 + reason = "" try: - print "try import ",componentName - __import__(componentName) - print "import ",componentName," successful" - ret=1 + if verbose(): print("try import %s" % componentName) + # try import component + module=__import__(componentName) + if verbose(): print("import %s is done successfully" % componentName) + # if import successfully, check that component is loadable + if not hasattr(module, componentName): + reason = "module %s is not loadable" % componentName + print(reason) + pass + pass except: import traceback + print("cannot import %s" % componentName) traceback.print_exc() - print "import ",componentName," not possible" - return ret + reason = "cannot import %s" % componentName + return reason #------------------------------------------------------------------------- def load_component_Library(self, componentName): MESSAGE( "SALOME_ContainerPy_i::load_component_Library " + str(componentName) ) ret = 0 - instanceName = componentName + "_inst_" + `self._numInstance` + instanceName = componentName + "_inst_" + repr(self._numInstance) interfaceName = componentName - #the_command = "import " + componentName + "\n" - #the_command = the_command + "comp_i = " + componentName + "." + componentName - #the_command = the_command + "(self._orb, self._poa, self._this(), self._containerName, instanceName, interfaceName)\n" - #MESSAGE( "SALOME_ContainerPy_i::load_component_Library :" + str (the_command) ) - #exec the_command - #comp_o = comp_i._this() - #if comp_o is not None: - # ret = 1 - #else: - # --- try to import Python component - # retImpl = self.import_component(componentName) - # if retImpl == 1: - #import is possible - # ret = 1 - # else: - #import isn't possible - # ret = 0 - #return ret - return self.import_component(componentName) + reason = self.import_component(componentName) + return reason == "", reason #------------------------------------------------------------------------- - def create_component_instance(self, componentName, studyId): - MESSAGE( "SALOME_ContainerPy_i::create_component_instance ==> " + str(componentName) + ' ' + str(studyId) ) - if studyId < 0: - MESSAGE( "Study ID is lower than 0!" ) - return None - else: - self._numInstance = self._numInstance +1 - instanceName = componentName + "_inst_" + `self._numInstance` - comp_iors="" - try: - component=__import__(componentName) - factory=getattr(component,componentName) - comp_i=factory(self._orb, - self._poa, - self._this(), - self._containerName, - instanceName, - componentName) - - MESSAGE( "SALOME_Container_i::create_component_instance : OK") - comp_o = comp_i._this() - self._listInstances_map[instanceName] = comp_i - except: - import traceback - traceback.print_exc() - MESSAGE( "SALOME_Container_i::create_component_instance : NOT OK") - return comp_o + def create_component_instance_env(self, componentName, env): + return self.create_component_instance(componentName), "" + + def create_component_instance(self, componentName): + MESSAGE( "SALOME_ContainerPy_i::create_component_instance ==> " + str(componentName) ) + self._numInstance = self._numInstance +1 + instanceName = componentName + "_inst_" + repr(self._numInstance) + comp_iors="" + try: + component=__import__(componentName) + factory=getattr(component,componentName) + comp_i=factory(self._orb, + self._poa, + self._this(), + self._containerName, + instanceName, + componentName) + + MESSAGE( "SALOME_Container_i::create_component_instance : OK") + comp_o = comp_i._this() + self._listInstances_map[instanceName] = comp_i + except: + import traceback + traceback.print_exc() + MESSAGE( "SALOME_Container_i::create_component_instance : NOT OK") + return comp_o #------------------------------------------------------------------------- - def find_component_instance(self, registeredName, studyId): + def find_component_instance(self, registeredName): anEngine = None - keysList = self._listInstances_map.keys() - i = 0 - while i < len(keysList): - instance = keysList[i] + for instance in self._listInstances_map: if find(instance,registeredName) == 0: anEngine = self._listInstances_map[instance] - if studyId == anEngine.getStudyId(): - return anEngine._this() - i = i + 1 - return anEngine._this() - + return anEngine._this() + return anEngine + + #------------------------------------------------------------------------- + + def create_python_service_instance(self, CompName): + return self.create_component_instance(CompName) + #------------------------------------------------------------------------- def remove_impl(self, component): @@ -303,31 +292,44 @@ class SALOME_ContainerPy_i (Engines__POA.Container): #------------------------------------------------------------------------- def Shutdown(self): + self._naming_service.Destroy_Name(self._containerName); + self._naming_service.Destroy_FullDirectory(self._containerName); self._orb.shutdown(0) pass -#============================================================================= - -#initialise the ORB and find the root POA -orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID) -poa = orb.resolve_initial_references("RootPOA") - -#create an instance of SALOME_ContainerPy_i and a Container reference -#containerName = "FactoryServerPy" -MESSAGE( str(sys.argv) ) -containerName = sys.argv[1] -cpy_i = SALOME_ContainerPy_i(orb, poa, containerName) -cpy_o = cpy_i._this() - -#activate the POA -poaManager = poa._get_the_POAManager() -poaManager.activate() - -#Block for ever -orb.run() - - - - + def _get_logfilename(self): + return self._logfilename + def _set_logfilename(self,logfilename): + self._logfilename=logfilename + def _get_workingdir(self): + return os.getcwd() +#============================================================================= +if __name__ == "__main__": + # change the stdout buffering to line buffering (same as C++ cout buffering) + sys.stdout=os.fdopen(1,"w",1) + #initialise the ORB and find the root POA + if verbose():print("Starting ",sys.argv[1]) + orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID) + poa = orb.resolve_initial_references("RootPOA") + if verbose():print("ORB and POA initialized") + + #create an instance of SALOME_ContainerPy_i and a Container reference + #containerName = "FactoryServerPy" + MESSAGE( str(sys.argv) ) + containerName = sys.argv[1] + cpy_i = SALOME_ContainerPy_i(orb, poa, containerName) + if verbose():print("SALOME_ContainerPy_i instance created ",cpy_i) + cpy_o = cpy_i._this() + if verbose():print("SALOME_ContainerPy_i instance activated ",cpy_o) + sys.stdout.flush() + sys.stderr.flush() + + #activate the POA + poaManager = poa._get_the_POAManager() + poaManager.activate() + + #Block for ever + orb.run() + if verbose():print("SALOME_ContainerPy_i shutdown")