2 # -*- coding: iso-8859-1 -*-
3 # Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
5 # Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
6 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
8 # This library is free software; you can redistribute it and/or
9 # modify it under the terms of the GNU Lesser General Public
10 # License as published by the Free Software Foundation; either
11 # version 2.1 of the License.
13 # This library is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 # Lesser General Public License for more details.
18 # You should have received a copy of the GNU Lesser General Public
19 # License along with this library; if not, write to the Free Software
20 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
24 # SALOME NamingService : wrapping NamingService services
25 # File : SALOME_NamingServicePy.py
26 # Author : Estelle Deville, CEA
30 ## @package SALOME_NamingServicePy
31 # \brief Module to manage SALOME naming service from python
37 from omniORB import CORBA
42 from SALOME_utilities import *
43 #=============================================================================
45 class SALOME_NamingServicePy_i(object):
47 A class to manage SALOME naming service from python code
54 #-------------------------------------------------------------------------
56 def __init__(self, orb=None):
58 Standard Constructor, with ORB reference.
60 Initializes the naming service root context
62 #MESSAGE ( "SALOME_NamingServicePy_i::__init__" )
64 orb=CORBA.ORB_init([''], CORBA.ORB_ID)
66 # initialize root context and current context
69 while steps > 0 and ok == 0:
71 obj =self._orb.resolve_initial_references("NameService")
72 self._root_context =obj._narrow(CosNaming.NamingContext)
73 self._current_context = self._root_context
76 if self._root_context is None :
77 #MESSAGE ( "Name Service Reference is invalid" )
79 MESSAGE(" Name service not found")
82 except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE):
83 MESSAGE(" Name service not found")
86 if steps == 0 and self._root_context is None:
87 MESSAGE ( "Name Service Reference is invalid" )
90 #-------------------------------------------------------------------------
92 def Register(self,ObjRef, Path):
93 """ ns.Register(object,pathname )
95 register a CORBA object under a pathname
98 MESSAGE ( "SALOME_NamingServicePy_i::Register" )
100 path_list = list(Path)
101 if path_list[0]=='/':
102 self._current_context = self._root_context
103 #delete first '/' before split
106 result_resolve_path = string.split(Path,'/')
107 if len(result_resolve_path)>1:
108 # A directory is treated (not only an object name)
109 # We had to test if the directory where ObjRef should be recorded
111 # If not, the new context has to be created
113 for i in range(len(result_resolve_path)-1):
114 _context_name.append(CosNaming.NameComponent(result_resolve_path[i],"dir"))
117 obj = self._current_context.resolve(_context_name)
118 self._current_context = obj._narrow(CosNaming.NamingContext)
119 except CosNaming.NamingContext.NotFound, ex:
121 except CosNaming.NamingContext.InvalidName, ex:
122 MESSAGE ( "Register : CosNaming.NamingContext.InvalidName" )
123 except CosNaming.NamingContext.CannotProceed, ex:
124 MESSAGE ( "Register : CosNaming.NamingContext.CannotProceed" )
125 except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE):
126 MESSAGE ( "Register : CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE" )
129 # at least one context of the complete path is not created, we had
130 # to create it or them
132 for i in range(len(result_resolve_path)-1):
133 _context_name = [CosNaming.NameComponent(result_resolve_path[i],"dir")]
136 obj = self._current_context.resolve(_context_name)
137 self._current_context = obj._narrow(CosNaming.NamingContext)
138 except CosNaming.NamingContext.NotFound, ex:
139 #This context is not created. It will be done
140 self._current_context = self._current_context.bind_new_context(_context_name)
142 #The current directory is now the directory where the object should
145 _context_name = [CosNaming.NameComponent(result_resolve_path[len(result_resolve_path)-1],"object")]
147 self._current_context.bind(_context_name,ObjRef)
148 except CosNaming.NamingContext.NotFound, ex:
149 MESSAGE ( "Register : CosNaming.NamingContext.NotFound" )
150 except CosNaming.NamingContext.InvalidName, ex:
151 MESSAGE ( "Register : CosNaming.NamingContext.InvalidName" )
152 except CosNaming.NamingContext.CannotProceed, ex:
153 MESSAGE ( "Register : CosNaming.NamingContext.CannotProceed" )
154 except CosNaming.NamingContext.AlreadyBound, ex:
155 MESSAGE ( "Register : CosNaming.NamingContext.AlreadyBound, object will be rebind" )
156 self._current_context.rebind(_context_name,ObjRef)
157 except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE):
158 MESSAGE ( "Register : CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE" )
160 #-------------------------------------------------------------------------
162 def Resolve(self, Path):
163 """ ns.Resolve(pathname) -> object
165 find a CORBA object (ior) by its pathname
167 #MESSAGE ( "SALOME_NamingServicePy_i::Resolve" )
168 path_list = list(Path)
169 if path_list[0]=='/':
170 self._current_context = self._root_context
171 #delete first '/' before split
174 result_resolve_path = string.split(Path,'/')
176 for i in range(len(result_resolve_path)-1):
177 _context_name.append(CosNaming.NameComponent(result_resolve_path[i],"dir"))
178 _context_name.append(CosNaming.NameComponent(result_resolve_path[len(result_resolve_path)-1],"object"))
180 self._obj = self._current_context.resolve(_context_name)
181 except CosNaming.NamingContext.NotFound, ex:
182 MESSAGE ( "Resolve : CosNaming.NamingContext.NotFound" )
184 except CosNaming.NamingContext.InvalidName, ex:
185 MESSAGE ( "Resolve : CosNaming.NamingContext.InvalidName" )
187 except CosNaming.NamingContext.CannotProceed, ex:
188 MESSAGE ( "Resolve : CosNaming.NamingContext.CannotProceed" )
190 except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE):
191 MESSAGE ( "Resolve : CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE" )
196 #-------------------------------------------------------------------------
198 def Create_Directory(self,ObjRef, Path):
199 """ ns.Create_Directory(ObjRef, Path)
201 create a sub directory
203 MESSAGE ( "SALOME_NamingServicePy_i::Create_Directory" )
205 path_list = list(Path)
206 if path_list[0]=='/':
207 self._current_context = self._root_context
208 #delete first '/' before split
211 result_resolve_path = string.split(Path,'/')
213 for i in range(len(result_resolve_path)):
214 _context_name[CosNaming.NameComponent(result_resolve_path[i],"dir")]
216 obj = self._current_context.resolve(_context_name)
217 self._current_context = obj._narrow(CosNaming.NamingContext)
218 except CosNaming.NamingContext.NotFound, ex:
219 self._current_context = self._current_context.bind_new_context(_context_name)
220 except CosNaming.NamingContext.InvalidName, ex:
221 MESSAGE ( "Create_Directory : CosNaming.NamingContext.InvalidName" )
222 except CosNaming.NamingContext.CannotProceed, ex:
223 MESSAGE ( "Create_Directory : CosNaming.NamingContext.CannotProceed" )
224 except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE):
225 MESSAGE ( "Create_Directory : CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE" )
227 def Destroy_Name(self,Path):
228 """ ns.Destroy_Name(Path)
230 remove a name in naming service
232 resolve_path=string.split(Path,'/')
233 if resolve_path[0] == '': del resolve_path[0]
234 dir_path=resolve_path[:-1]
237 context_name.append(CosNaming.NameComponent(e,"dir"))
238 context_name.append(CosNaming.NameComponent(resolve_path[-1],"object"))
241 self._root_context.unbind(context_name)
242 except CosNaming.NamingContext.NotFound, ex:
244 except CORBA.Exception,ex:
247 def Destroy_FullDirectory(self,Path):
248 """ ns.Destroy_FullDirectory(Path)
250 remove recursively a directory
253 for e in string.split(Path,'/'):
255 context_name.append(CosNaming.NameComponent(e,"dir"))
258 context=self._root_context.resolve(context_name)
259 except CosNaming.NamingContext.NotFound, ex:
261 except CORBA.Exception,ex:
264 bl,bi=context.list(0)
268 for s in b.binding_name :
269 if s.kind == "object":
271 elif s.kind == "dir":
276 self._root_context.unbind(context_name)