X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FKERNEL_PY%2F__init__.py;h=7b99a03e48498fa6999ea83e2b4205de950c0d64;hb=726f961b8a9446eeb85744183ffc80b67d221677;hp=08c13f38ddba527704a17a79c9469b979951dbc3;hpb=4b14a3f48efda72f90b88c78c6ae02153631dfd6;p=modules%2Fkernel.git diff --git a/src/KERNEL_PY/__init__.py b/src/KERNEL_PY/__init__.py old mode 100755 new mode 100644 index 08c13f38d..7b99a03e4 --- a/src/KERNEL_PY/__init__.py +++ b/src/KERNEL_PY/__init__.py @@ -1,5 +1,5 @@ # -*- coding: iso-8859-1 -*- -# Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE +# Copyright (C) 2007-2021 CEA/DEN, EDF R&D, OPEN CASCADE # # Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -161,33 +161,97 @@ if not flags: # sys.setdlopenflags(flags) # pass -orb, lcc, naming_service, cm,sg=None,None,None,None,None -myStudy, myStudyName=None,None +orb, lcc, naming_service, cm, sg, esm, dsm, modulcat = None,None,None,None,None,None,None,None +myStudy, myStudyName = None,None -salome_initial=1 -def salome_init(embedded=0): +salome_initial=True + +__EMB_SERVANT_ENV_VAR_NAME = "SALOME_EMB_SERVANT" + +def standalone(): + import os + os.environ[__EMB_SERVANT_ENV_VAR_NAME] = "1" + +def salome_init(path=None, embedded=False): + import os + if __EMB_SERVANT_ENV_VAR_NAME in os.environ: + salome_init_without_session() + else: + import KernelBasis + if KernelBasis.getSSLMode(): + salome_init_without_session() + else: + salome_init_with_session(path, embedded) + +class StandAloneLifecyle: + def __init__(self, containerManager, resourcesManager): + self._cm = containerManager + self._rm = resourcesManager + + def FindOrLoadComponent(self,contName,moduleName): + global orb + import importlib + builder_name = moduleName + "_SalomeSessionless" + moduleObj = importlib.import_module(builder_name) + result, orb = moduleObj.buildInstance(orb) + return result + #raise RuntimeError("Undealed situation cont = {} module = {}".format(contName,moduleName)) + + def getContainerManager(self): + return self._cm + + def getResourcesManager(self): + return self._rm + +def salome_init_without_session(): + global lcc,myStudy,orb,modulcat,sg,cm + import KernelBasis + KernelBasis.setSSLMode(True) + import KernelDS + myStudy = KernelDS.myStudy() + import CORBA + orb=CORBA.ORB_init(['']) + import KernelModuleCatalog + import SALOME_ModuleCatalog + from salome_kernel import list_of_catalogs_regarding_environement + modulcat = KernelModuleCatalog.myModuleCatalog( list_of_catalogs_regarding_environement() ) + import KernelLauncher + cm = KernelLauncher.myContainerManager() + lcc = StandAloneLifecyle(cm, KernelLauncher.myResourcesManager()) + # activate poaManager to accept co-localized CORBA calls. + poa = orb.resolve_initial_references("RootPOA") + poaManager = poa._get_the_POAManager() + poaManager.activate() + sg = SalomeOutsideGUI() + salome_study_init_without_session() + +def salome_init_with_session(path=None, embedded=False): """ - Performs only once SALOME general purpose initialization for scripts. + Performs only once SALOME general purpose initialisation for scripts. Provides: orb reference to CORBA lcc a LifeCycleCorba instance naming_service a naming service instance cm reference to the container manager + esm reference to external server manager + dsm reference to shared dataserver manager + modulcat reference to modulecatalog instance sg access to SALOME GUI (when linked with IAPP GUI) myStudy active study itself (CORBA reference) myStudyName active study name """ global salome_initial - global orb, lcc, naming_service, cm + global orb, lcc, naming_service, cm, esm, dsm, modulcat global sg global myStudy, myStudyName - + import KernelBasis + KernelBasis.setSSLMode(False) try: if salome_initial: - salome_initial=0 + salome_initial=False sg = salome_iapp_init(embedded) - orb, lcc, naming_service, cm = salome_kernel_init() - myStudy, myStudyName = salome_study_init() + orb, lcc, naming_service, cm, esm, dsm, modulcat = salome_kernel_init() + myStudy, myStudyName = salome_study_init(path) pass pass except RuntimeError as inst: @@ -212,10 +276,57 @@ def salome_close(): myStudy.Clear() except: pass - salome_initial=1 + salome_initial=True salome_iapp_close() + salome_study_close() + myStudy, myStudyName = None, None + import KernelDS + KernelDS.KillGlobalSessionInstance() + pass + +def salome_NS(): + import CORBA + import CosNaming + orb = CORBA.ORB_init() + ns0 = orb.resolve_initial_references("NameService") + return ns0._narrow(CosNaming.NamingContext) + +def salome_walk_on_containers(ns,root): + import CosNaming + it = ns.list(0)[1] + if not it: + return + cont = True + while cont: + cont,obj = it.next_one() + if cont: + if obj.binding_name[0].kind == "object": + import Engines + corbaObj = ns.resolve(obj.binding_name) + if isinstance(corbaObj,Engines._objref_Container): + yield corbaObj,(root,obj.binding_name[0].id) + else: + father = ns.resolve([obj.binding_name[0]]) + for elt,elt2 in salome_walk_on_containers(father,root+[obj.binding_name[0].id]): + yield elt,elt2 + pass + pass pass +def salome_shutdown_containers(): + salome_init() + ns=salome_NS() + li = [elt for elt in salome_walk_on_containers(ns,[""])] + print("Number of containers in NS : {}".format(len(li))) + for cont,(root,cont_name) in li: + try: + cont.Shutdown() + except: + pass + ref_in_ns = "/".join(root+[cont_name]) + naming_service.Destroy_Name(ref_in_ns) + print("Number of containers in NS after clean : {}".format( len( list(salome_walk_on_containers(ns,[""])) ))) + #to expose all objects to pydoc __all__=dir()