Salome HOME
add SalomeInstance object
[modules/kernel.git] / bin / appliskel / salome_tester / salome_instance.py
1 # Copyright (C) 2015  CEA/DEN, EDF R&D, OPEN CASCADE
2 #
3 # This library is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU Lesser General Public
5 # License as published by the Free Software Foundation; either
6 # version 2.1 of the License, or (at your option) any later version.
7 #
8 # This library is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 # Lesser General Public License for more details.
12 #
13 # You should have received a copy of the GNU Lesser General Public
14 # License along with this library; if not, write to the Free Software
15 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 #
17 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 #
19
20 import sys
21 import os
22
23 # Example of args:
24 #      args=["--gui", "--show-desktop=1", "--splash=0"]
25 #      args=["--terminal","--modules=MED,PARAVIS,GUI"]
26 class SalomeInstance(object):
27
28   def __init__(self):
29     self.port = None
30   #
31
32   def get_port(self):
33     return self.port
34   #
35
36   @staticmethod
37   def start(shutdown_servers=False):
38     import tempfile
39     log = tempfile.NamedTemporaryFile(suffix='_nsport.log', delete=False)
40     log.close()
41
42     instance_args = [
43       "--ns-port-log=%s"%log.name,
44       "--shutdown-servers=%d"%shutdown_servers
45       ]
46     salome_instance = SalomeInstance()
47     salome_instance.__run(args=instance_args)
48
49     with open(log.name) as f:
50       salome_instance.port = int(f.readline())
51
52     os.remove(log.name)
53     return salome_instance
54   #
55
56   def __run(self, args=[]):
57     sys.argv = ['runSalome'] + args
58
59     if "INGUI" in args:
60       # :WARNING: NOT TESTED YET
61       sys.argv += ["--gui"]
62       sys.argv += ["--show-desktop=1"]
63       sys.argv += ["--splash=0"]
64       #sys.argv += ["--standalone=study"]
65       #sys.argv += ["--embedded=SalomeAppEngine,cppContainer,registry,moduleCatalog"]
66     else:
67       sys.argv += ["--terminal"]
68       #sys.argv += ["--shutdown-servers=1"]
69       #sys.argv += ["--modules=MED,PARAVIS,GUI"]
70       pass
71
72     import setenv
73     setenv.main(True)
74     import runSalome
75     runSalome.runSalome()
76
77     import salome
78     salome.salome_init()
79     session_server = salome.naming_service.Resolve('/Kernel/Session')
80     if session_server:
81       session_server.emitMessage("connect_to_study")
82       session_server.emitMessage("activate_viewer/ParaView")
83       pass
84   #
85
86   def stop(self):
87     import killSalomeWithPort
88     killSalomeWithPort.killMyPort(self.port)
89   #
90
91 #
92
93 if __name__ == "__main__":
94   print "##### Start instance..."
95   salome_instance = SalomeInstance.start()
96   port = salome_instance.get_port()
97   print "#####    ...instance started on port %s"%port
98
99   print "##### Terminate instance running on port %s"%port
100   salome_instance.stop()
101 #