Salome HOME
DataServerManager is now available in SSL mode
[modules/kernel.git] / src / KERNEL_PY / __init__.py
index 4ee3b78c5f5aabdbad87fc82d6576cf8dac2199b..5c0900e62689a9a8faecc18f3c7453475faacbfa 100644 (file)
@@ -1,5 +1,5 @@
 #  -*- coding: iso-8859-1 -*-
 #  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
 #
 # Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -161,11 +161,73 @@ if not flags:
 #    sys.setdlopenflags(flags)
 #    pass
 
 #    sys.setdlopenflags(flags)
 #    pass
 
-orb, lcc, naming_service, cm, sg, esm, dsm = None,None,None,None,None,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=True
 myStudy, myStudyName = None,None
 
 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):
 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,naming_service,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
+    from NamingService import NamingService
+    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()
+    naming_service = NamingService()
+
+def salome_init_with_session(path=None, embedded=False):
     """
     Performs only once SALOME general purpose initialisation for scripts.
     Provides:
     """
     Performs only once SALOME general purpose initialisation for scripts.
     Provides:
@@ -175,20 +237,22 @@ def salome_init(path=None, embedded=False):
     cm              reference to the container manager
     esm             reference to external server manager
     dsm             reference to shared dataserver manager
     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
     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, esm, dsm
+    global orb, lcc, naming_service, cm, esm, dsm, modulcat
     global sg
     global myStudy, myStudyName
     global sg
     global myStudy, myStudyName
-
+    import KernelBasis
+    KernelBasis.setSSLMode(False)
     try:
         if salome_initial:
             salome_initial=False
             sg = salome_iapp_init(embedded)
     try:
         if salome_initial:
             salome_initial=False
             sg = salome_iapp_init(embedded)
-            orb, lcc, naming_service, cm, esm, dsm = salome_kernel_init()
+            orb, lcc, naming_service, cm, esm, dsm, modulcat = salome_kernel_init()
             myStudy, myStudyName = salome_study_init(path)
             pass
         pass
             myStudy, myStudyName = salome_study_init(path)
             pass
         pass
@@ -218,6 +282,8 @@ def salome_close():
     salome_iapp_close()
     salome_study_close()
     myStudy, myStudyName = None, None
     salome_iapp_close()
     salome_study_close()
     myStudy, myStudyName = None, None
+    import KernelDS
+    KernelDS.KillGlobalSessionInstance()
     pass
 
 def salome_NS():
     pass
 
 def salome_NS():