1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
4 # Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
5 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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, or (at your option) any later version.
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.
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
21 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
25 # \brief Module that provides a client for %SALOME
30 from nameserver import NamingServer
31 from omniORB import CORBA
32 from launchConfigureParser import verbose
34 # Import the stubs for the Naming service
37 # -----------------------------------------------------------------------------
40 """Client for SALOME"""
42 def __init__(self,args=None):
44 self.orb=CORBA.ORB_init(sys.argv, CORBA.ORB_ID)
46 # Initialise the Naming Service
47 self.initNS(args or {})
49 # --------------------------------------------------------------------------
51 def initNS(self,args):
52 # Obtain a reference to the root naming context
53 obj = self.orb.resolve_initial_references("NameService")
55 self.rootContext = obj._narrow(CosNaming.NamingContext)
57 except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE):
58 self.rootContext = None
59 if verbose(): print "Launch Naming Service++",
61 # On lance le Naming Server (doit etre dans le PATH)
63 if args['wake_up_session']:
67 NamingServer(args).run()
69 print "Searching Naming Service ",
75 obj = self.orb.resolve_initial_references("NameService")
76 self.rootContext = obj._narrow(CosNaming.NamingContext)
78 except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE):
79 self.rootContext = None
84 if self.rootContext is None:
85 print "Failed to narrow the root naming context"
87 print " found in %s seconds " % ((ncount-1)*delta)
89 # --------------------------------------------------------------------------
91 def showNScontext(self,context,dec=''):
93 print "[NS] No context"
98 _,bi = context.list(0)
102 for s in b.binding_name :
103 print "%s%s.%s" %(dec,s.id,s.kind)
105 obj = context.resolve([s])
106 scontext = obj._narrow(CosNaming.NamingContext)
107 self.showNScontext(scontext,dec=dec+' ')
110 # --------------------------------------------------------------------------
113 """ Show the content of SALOME naming service """
114 self.showNScontext(self.rootContext)
116 # --------------------------------------------------------------------------
118 def Resolve(self, Path):
119 resolve_path = string.split(Path,'/')
120 if resolve_path[0] == '': del resolve_path[0]
121 dir_path = resolve_path[:-1]
124 context_name.append(CosNaming.NameComponent(e,"dir"))
125 context_name.append(CosNaming.NameComponent(resolve_path[-1],"object"))
128 obj = self.rootContext.resolve(context_name)
129 except CosNaming.NamingContext.NotFound, ex:
131 except CosNaming.NamingContext.InvalidName, ex:
133 except CosNaming.NamingContext.CannotProceed, ex:
135 except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE):
139 # --------------------------------------------------------------------------
141 def waitNS(self,name,typobj=None,maxcount=240):
144 print "Searching %s in Naming Service " % name,
147 if count > maxcount : raise RuntimeError, "Impossible de trouver %s" % name
148 obj = self.Resolve(name)
150 print " found in %s seconds " % ((count-1)*delta)
153 sys.stdout.write('+')
157 if typobj is None:return obj
159 nobj = obj._narrow(typobj)
161 print "%s exists but is not a %s" % (name,typobj)
164 if sys.platform != "win32":
165 def waitNSPID(self, theName, thePID, theTypObj = None):
169 print "Searching %s in Naming Service " % theName,
174 raise RuntimeError, "Process %d for %s not found" % (thePID,theName)
176 anObj = self.Resolve(theName)
178 print " found in %s seconds " % ((aCount-1)*aDelta)
181 sys.stdout.write('+')
187 if theTypObj is None:
190 anObject = anObj._narrow(theTypObj)
192 print "%s exists but is not a %s" % (theName,theTypObj)
196 # --------------------------------------------------------------------------
198 def ResolveLogger(self, name):
200 context_name.append(CosNaming.NameComponent(name,""))
203 obj = self.rootContext.resolve(context_name)
204 except CosNaming.NamingContext.NotFound, ex:
206 except CosNaming.NamingContext.InvalidName, ex:
208 except CosNaming.NamingContext.CannotProceed, ex:
210 except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE):
214 # --------------------------------------------------------------------------
216 def waitLogger(self,name,typobj=None,maxcount=40):
219 print "Searching %s in Naming Service " % name,
222 if count > maxcount : raise RuntimeError, "Impossible de trouver %s" % name
223 obj = self.ResolveLogger(name)
225 print " found in %s seconds " % ((count-1)*delta)
228 sys.stdout.write('+')
232 if typobj is None:return obj
234 nobj = obj._narrow(typobj)
236 print "%s exists but is not a %s" % (name,typobj)