#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2013 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
import setenv
from launchConfigureParser import verbose
from server import process_id, Server
-
-if sys.platform == "win32":
- SEP = ";"
-else:
- SEP = ":"
+import json
+import subprocess
# -----------------------------------------------------------------------------
try:
killMyPort(my_port)
except:
- print "problem in LocalPortKill(), killMyPort("<<port<<")"
+ print "problem in LocalPortKill(), killMyPort(%s)"%port
pass
pass
cata_path.append(cata_file)
modules_cata[module]=cata_file
- for path in os.getenv("SALOME_CATALOGS_PATH","").split(SEP):
+ for path in os.getenv("SALOME_CATALOGS_PATH","").split(os.pathsep):
if os.path.exists(path):
for cata_file in glob.glob(os.path.join(path,"*Catalog.xml")):
module_name= os.path.basename(cata_file)[:-11]
return cata_path
-
+_siman_name = None
+def simanStudyName(args):
+ global _siman_name
+ if _siman_name is None:
+ # siman session paramenters and checkout processing
+ _siman_name = ""
+ if 'siman' in args:
+ siman_data = []
+ for param in [ 'study', 'scenario', 'user']:
+ siman_param = "siman_%s"%param
+ if siman_param in args:
+ siman_data.append(args[siman_param])
+ else:
+ print "SIMAN %s must be defined using parameter --siman-%s=XXX" % (siman_param, siman_param)
+ pass
+ pass
+ if len(siman_data) == 3:
+ _siman_name = "_".join(siman_data)
+ pass
+ pass
+ pass
+ return _siman_name
class CatalogServer(Server):
def __init__(self,args):
# ---
-class ContainerPYServer(Server):
- def __init__(self,args):
- self.args=args
- self.initArgs()
- if sys.platform == "win32":
- self.CMD=[os.environ["PYTHONBIN"], '\"'+os.environ["KERNEL_ROOT_DIR"] + '/bin/salome/SALOME_ContainerPy.py'+'\"','FactoryServerPy']
- else:
- self.CMD=['SALOME_ContainerPy.py','FactoryServerPy']
-
-# ---
-
class LoggerServer(Server):
def __init__(self,args):
self.args=args
if 'cppContainer' in self.args['standalone'] or 'cppContainer' in self.args['embedded']:
self.SCMD2+=['CPP']
if 'pyContainer' in self.args['standalone'] or 'pyContainer' in self.args['embedded']:
- self.SCMD2+=['PY']
+ raise Exception('Python containers no longer supported')
if self.args['gui']:
session_gui = True
if self.args.has_key('session_gui'):
if self.args['study_hdf'] is not None:
self.SCMD2+=['--study-hdf=%s'%self.args['study_hdf']]
pass
+ if simanStudyName(self.args):
+ self.SCMD2+=['--siman-study=%s'%simanStudyName(self.args)]
+ pass
pass
if self.args.has_key('pyscript') and len(self.args['pyscript']) > 0:
- self.SCMD2+=['--pyscript=%s'%(",".join(self.args['pyscript']))]
+ msg = json.dumps(self.args['pyscript'])
+ self.SCMD2+=['--pyscript=%s'%(msg)]
pass
pass
pass
if args['wake_up_session']:
if "OMNIORB_CONFIG" not in os.environ:
from salome_utils import generateFileName
- home = os.getenv("HOME")
- appli = os.getenv("APPLI")
+ omniorbUserPath = os.getenv("OMNIORB_USER_PATH")
kwargs={}
- if appli is not None:
- home = os.path.join(os.path.realpath(home), appli,"USERS")
- kwargs["with_username"] = True
- pass
- last_running_config = generateFileName(home, prefix="omniORB",
+ if omniorbUserPath is not None:
+ kwargs["with_username"]=True
+
+ last_running_config = generateFileName(omniorbUserPath, prefix="omniORB",
suffix="last",
extension="cfg",
hidden=True,
# Save Naming service port name into
# the file args["ns_port_log_file"]
if args.has_key('ns_port_log_file'):
- home = os.environ['HOME']
- appli= os.environ.get("APPLI")
- if appli is not None:
- home = os.path.join(os.path.realpath(home), appli, "USERS")
- file_name = os.path.join(home, args["ns_port_log_file"])
+ omniorbUserPath = os.getenv("OMNIORB_USER_PATH")
+ file_name = os.path.join(omniorbUserPath, args["ns_port_log_file"])
f = open(file_name, "w")
f.write(os.environ['NSPORT'])
f.close()
myServer=NotifyServer(args,modules_root_dir)
myServer.run()
+ # set siman python path before the session server launching to import scripts inside python console
+ if simanStudyName(args):
+ # MPV: use os.environ here because session server is launched in separated process and sys.path is missed in this case
+ os.environ["PYTHONPATH"] = "/tmp/SimanSalome/" + args['siman_study'] + "/" + \
+ args['siman_scenario'] + "/" + args['siman_user'] + os.pathsep + os.environ["PYTHONPATH"];
+
# Launch Session Server (to show splash ASAP)
#
#
if 'pyContainer' in args['standalone']:
- myServer=ContainerPYServer(args)
- myServer.run()
- if sys.platform == "win32":
- clt.waitNS("/Containers/" + theComputer + "/FactoryServerPy")
- else:
- clt.waitNSPID("/Containers/" + theComputer + "/FactoryServerPy",myServer.PID)
+ raise Exception('Python containers no longer supported')
#
# Wait until Session Server is registered in naming service
except ImportError:
pass
+ # siman session paramenters and checkout processing
+ if simanStudyName(args):
+ print '**********************************************'
+ print "Siman study name= '" + simanStudyName(args) + "'"
+ import SALOMEDS
+ obj = clt.Resolve('myStudyManager')
+ myStudyManager = obj._narrow(SALOMEDS.StudyManager)
+ aNewStudy = myStudyManager.NewStudy(simanStudyName(args))
+ aSimS = myStudyManager.GetSimanStudy()
+ aSimS._set_StudyId(args['siman_study'])
+ aSimS._set_ScenarioId(args['siman_scenario'])
+ aSimS._set_UserId(args['siman_user'])
+ aSimS.CheckOut(aNewStudy)
+ # if session server is enabled, activate the created study
+ if args["gui"]:
+ print "Activate the SIMAN study in the SALOME GUI"
+ obj = clt.Resolve('/Kernel/Session')
+ mySession = obj._narrow(SALOME.Session)
+ mySession.emitMessage("simanCheckoutDone " + simanStudyName(args))
+ print '**********************************************'
+
return clt
# -----------------------------------------------------------------------------
pass
pass
- # run python scripts, passed via --execute option
+ # run python scripts, passed as command line arguments
toimport = []
if args.has_key('pyscript'):
if args.has_key('gui') and args.has_key('session_gui'):
if not args['gui'] or not args['session_gui']:
toimport = args['pyscript']
- for srcname in toimport :
- if srcname == 'killall':
- clt.showNS()
- killAllPorts()
- sys.exit(0)
- else:
- if os.path.isabs(srcname):
- if os.path.exists(srcname):
- execScript(srcname)
- elif os.path.exists(srcname+".py"):
- execScript(srcname+".py")
- else:
- print "Can't execute file %s" % srcname
- pass
- else:
- found = False
- for path in [os.getcwd()] + sys.path:
- if os.path.exists(os.path.join(path,srcname)):
- execScript(os.path.join(path,srcname))
- found = True
- break
- elif os.path.exists(os.path.join(path,srcname+".py")):
- execScript(os.path.join(path,srcname+".py"))
- found = True
- break
- pass
- if not found:
- print "Can't execute file %s" % srcname
- pass
- pass
- pass
- pass
- pass
+ from salomeLauncherUtils import formatScriptsAndArgs
+ command = formatScriptsAndArgs(toimport)
+ if command:
+ proc = subprocess.Popen(command, shell=True)
+ res = proc.wait()
+ if res: sys.exit(1) # if there's an error when executing script, we should explicitly exit
+
return clt
def execScript(script_path):
def main():
"""Salome launch as a main application"""
+
+ # define folder to store omniorb config (initially in virtual application folder)
+ try:
+ from salomeLauncherUtils import setOmniOrbUserPath
+ setOmniOrbUserPath()
+ except Exception, e:
+ print e
+ sys.exit(1)
+
from salome_utils import getHostName
print "runSalome running on %s" % getHostName()
args, modules_list, modules_root_dir = setenv.get_config()
killMyPort(port)
pass
return
+#
-# -----------------------------------------------------------------------------
-
-if __name__ == "__main__":
+def runSalome():
import user
clt,args = main()
# --
pass
# --
pass
+#
+
+# -----------------------------------------------------------------------------
+
+if __name__ == "__main__":
+ runSalome()
+#