Salome HOME
Copyright update: 2016
[modules/kernel.git] / bin / appliskel / salome_tester / salome_instance.py
1 # Copyright (C) 2015-2016  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=None):
57     if args is None:
58       args = []
59     sys.argv = ['runSalome'] + args
60
61     if "INGUI" in args:
62       # :WARNING: NOT TESTED YET
63       sys.argv += ["--gui"]
64       sys.argv += ["--show-desktop=1"]
65       sys.argv += ["--splash=0"]
66       #sys.argv += ["--standalone=study"]
67       #sys.argv += ["--embedded=SalomeAppEngine,cppContainer,registry,moduleCatalog"]
68     else:
69       sys.argv += ["--terminal"]
70       #sys.argv += ["--shutdown-servers=1"]
71       #sys.argv += ["--modules=MED,PARAVIS,GUI"]
72       pass
73
74     import setenv
75     setenv.main(True)
76     import runSalome
77     runSalome.runSalome()
78
79     import salome
80     salome.salome_init()
81     session_server = salome.naming_service.Resolve('/Kernel/Session')
82     if session_server:
83       session_server.emitMessage("connect_to_study")
84       session_server.emitMessage("activate_viewer/ParaView")
85       pass
86   #
87
88   def stop(self):
89     from multiprocessing import Process
90     from killSalomeWithPort import killMyPort
91     import tempfile
92     with tempfile.NamedTemporaryFile():
93       p = Process(target = killMyPort, args=(self.port,))
94       p.start()
95       p.join()
96     pass
97   #
98
99 #
100
101 if __name__ == "__main__":
102   print "##### Start instance..."
103   salome_instance = SalomeInstance.start()
104   port = salome_instance.get_port()
105   print "#####    ...instance started on port %s"%port
106
107   print "##### Terminate instance running on port %s"%port
108   salome_instance.stop()
109 #