# -*- 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
# 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:
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()