Salome HOME
Fix problem in salome_test.py caused by recent replacement of pointe.med file
[modules/kernel.git] / src / KERNEL_PY / salome.py
1 #  -*- coding: iso-8859-1 -*-
2 #  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
3 #
4 #  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
5 #  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 #
7 #  This library is free software; you can redistribute it and/or
8 #  modify it under the terms of the GNU Lesser General Public
9 #  License as published by the Free Software Foundation; either
10 #  version 2.1 of the License.
11 #
12 #  This library is distributed in the hope that it will be useful,
13 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
14 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 #  Lesser General Public License for more details.
16 #
17 #  You should have received a copy of the GNU Lesser General Public
18 #  License along with this library; if not, write to the Free Software
19 #  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
20 #
21 #  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 #
23 #  File   : salome.py
24 #  Author : Paul RASCLE, EDF
25 #  Module : SALOME
26 #  $Header$
27 #
28 """ 
29 Module salome gives access to Salome ressources.
30
31 variables:
32
33   - salome.orb             : CORBA
34   - salome.naming_service  : instance of naming Service class
35       - methods:
36           - Resolve(name)  : find a CORBA object (ior) by its pathname
37           - Register(name) : register a CORBA object under a pathname
38
39   - salome.lcc             : instance of lifeCycleCORBA class
40       - methods:
41           - FindOrLoadComponent(server,name) :
42                            obtain an Engine (CORBA object)
43                            or launch the Engine if not found,
44                            with a Server name and an Engine name
45
46   - salome.sg              : salome object to communicate with the graphical user interface (if any)
47       - methods:
48          - updateObjBrowser(bool):
49          - getActiveStudyId():
50          - getActiveStudyName():
51
52          - SelectedCount():      returns number of selected objects
53          - getSelected(i):       returns entry of selected object number i
54          - getAllSelected():     returns list of entry of selected objects
55          - AddIObject(Entry):    select an existing Interactive object
56          - RemoveIObject(Entry): remove object from selection
57          - ClearIObjects():      clear selection
58
59          - Display(*Entry):
60          - DisplayOnly(Entry):
61          - Erase(Entry):
62          - DisplayAll():
63          - EraseAll():
64
65          - IDToObject(Entry):    returns CORBA reference from entry
66
67   - salome.myStudyName     : active Study Name
68   - salome.myStudyId       : active Study Id
69   - salome.myStudy         : the active Study itself (CORBA ior)
70       - methods : defined in SALOMEDS.idl
71
72 """
73 ## @package salome
74 # Module salome gives access to Salome ressources.
75 #
76 #  \param salome.orb             : CORBA orb object
77 #  \param salome.naming_service  : instance of naming Service class (SALOME_NamingServicePy::SALOME_NamingServicePy_i)
78 #  \param salome.lcc             : instance of lifeCycleCORBA class (SALOME_LifeCycleCORBA)
79 #  \param salome.sg              : Salome object to communicate with the graphical user interface, if running (see interface in salome_iapp::SalomeOutsideGUI)
80 #  \param salome.myStudyName     : active Study Name
81 #  \param salome.myStudyId       : active Study Id
82 #  \param salome.myStudy         : the active Study (interface SALOMEDS::Study)
83
84
85 from salome_kernel import *
86 from salome_study import *
87 from salome_iapp import *
88
89
90 #
91 # The next block is workaround for the problem of shared symbols loading for the extension modules (e.g. SWIG-generated)
92 # that causes RTTI unavailable in some cases. To solve this problem, sys.setdlopenflags() function is used.
93 # Depending on the Python version and platform, the dlopen flags can be defined in the dl, DLFUN or ctypes module.
94
95 import sys
96 flags = None
97 if not flags:
98     try:
99         # dl module can be unavailable
100         import dl
101         flags = dl.RTLD_NOW | dl.RTLD_GLOBAL
102     except:
103         pass
104     pass
105 if not flags:
106     try:
107         # DLFCN module can be unavailable
108         import DLFCN
109         flags = DLFCN.RTLD_NOW | DLFCN.RTLD_GLOBAL
110     except:
111         pass
112     pass
113 if not flags:
114     try:
115         # ctypes module can be unavailable
116         import ctypes
117         flags = ctypes.RTLD_GLOBAL
118     except:
119         pass
120     pass
121     
122 if flags:
123     sys.setdlopenflags(flags)
124     pass
125
126 orb, lcc, naming_service, cm,sg=None,None,None,None,None
127 myStudyManager, myStudyId, myStudy, myStudyName=None,None,None,None
128
129 salome_initial=1
130 def salome_init(theStudyId=0,embedded=0):
131     """
132     Performs only once SALOME general purpose intialisation for scripts.
133     optional argument : theStudyId
134       When in embedded interpreter inside IAPP, theStudyId is not used
135       When used without GUI (external interpreter)
136         0      : create a new study (default).
137         n (>0) : try connection to study with Id = n, or create a new one
138                  if study not found.
139                  If study creation, its Id may be different from theStudyId !
140     Provides:
141     orb             reference to CORBA
142     lcc             a LifeCycleCorba instance
143     naming_service  a naming service instance
144     cm              reference to the container manager
145     sg              access to SALOME GUI (when linked with IAPP GUI)
146     myStudyManager  the study manager
147     myStudyId       active study identifier
148     myStudy         active study itself (CORBA reference)
149     myStudyName     active study name
150     """
151     global salome_initial
152     global orb, lcc, naming_service, cm
153     global sg
154     global myStudyManager, myStudyId, myStudy, myStudyName
155
156     try:
157         if salome_initial:
158             salome_initial=0
159             sg = salome_iapp_init(embedded)
160             orb, lcc, naming_service, cm = salome_kernel_init()
161             myStudyManager, myStudyId, myStudy, myStudyName =salome_study_init(theStudyId)
162             pass
163         pass
164     except RuntimeError, inst:
165         # wait a little to avoid trace mix
166         import time
167         time.sleep(0.2)
168         x = inst
169         print "salome.salome_init():", x
170         print """
171         ============================================
172         May be there is no running SALOME session
173         salome.salome_init() is intented to be used
174         within an already running session
175         ============================================
176         """
177         raise
178
179 #to expose all objects to pydoc
180 __all__=dir()