examples/AutoTest/CorbaNaming.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 # -*- Python -*-
4 
5 
6 
18 
19 import omniORB.CORBA as CORBA
20 import CosNaming
21 import string
22 
23 
61  """
62  """
63 
64 
65 
66 
80  def __init__(self, orb, name_server=None):
81  self._orb = orb
82  self._nameServer = ""
83  self._rootContext = CosNaming.NamingContext._nil
84  self._blLength = 100
85 
86  if name_server:
87  self._nameServer = "corbaloc::" + name_server + "/NameService"
88  try:
89  obj = orb.string_to_object(self._nameServer)
90  self._rootContext = obj._narrow(CosNaming.NamingContext)
91  if CORBA.is_nil(self._rootContext):
92  print "CorbaNaming: Failed to narrow the root naming context."
93 
94  except CORBA.ORB.InvalidName:
95  print "Service required is invalid [does not exist]."
96 
97  return
98 
99 
100 
112  def __del__(self):
113  return
114 
115 
116 
129  def init(self, name_server):
130  self._nameServer = "corbaloc::" + name_server + "/NameService"
131  obj = self._orb.string_to_object(self._nameServer)
132  self._rootContext = obj._narrow(CosNaming.NamingContext)
133  if CORBA.is_nil(self._rootContext):
134  raise MemoryError
135 
136  return
137 
138 
139 
185  def bind(self, name_list, obj, force=None):
186  if force is None :
187  force = True
188 
189  try:
190  self._rootContext.bind(name_list, obj)
191  except CosNaming.NamingContext.NotFound:
192  if force:
193  self.bindRecursive(self._rootContext, name_list, obj)
194  else:
195  raise
196  except CosNaming.NamingContext.CannotProceed, err:
197  if force:
198  self.bindRecursive(err.cxt, err.rest_of_name, obj)
199  else:
200  raise
201  except CosNaming.NamingContext.AlreadyBound:
202  self._rootContext.rebind(name_list, obj)
203 
204 
205 
229  def bindByString(self, string_name, obj, force=True):
230  self.bind(self.toName(string_name), obj, force)
231 
232 
233 
268  def bindRecursive(self, context, name_list, obj):
269  length = len(name_list)
270  cxt = context
271  for i in range(length):
272  if i == length -1:
273  try:
274  cxt.bind(self.subName(name_list, i, i), obj)
275  except CosNaming.NamingContext.AlreadyBound:
276  cxt.rebind(self.subName(name_list, i, i), obj)
277  return
278  else:
279  if self.objIsNamingContext(cxt):
280  cxt = self.bindOrResolveContext(cxt,self.subName(name_list, i, i))
281  else:
282  raise CosNaming.NamingContext.CannotProceed(cxt, self.subName(name_list, i))
283  return
284 
285 
286 
310  def rebind(self, name_list, obj, force=True):
311  if force is None:
312  force = True
313 
314  try:
315  self._rootContext.rebind(name_list, obj)
316 
317  except CosNaming.NamingContext.NotFound:
318  if force:
319  self.rebindRecursive(self._rootContext, name_list, obj)
320  else:
321  raise
322 
323  except CosNaming.NamingContext.CannotProceed, err:
324  if force:
325  self.rebindRecursive(err.cxt, err,rest_of_name, obj)
326  else:
327  raise
328 
329  return
330 
331 
332 
355  def rebindByString(self, string_name, obj, force=True):
356  self.rebind(self.toName(string_name), obj, force)
357 
358  return
359 
360 
361 
385  def rebindRecursive(self, context, name_list, obj):
386  length = len(name_list)
387  for i in range(length):
388  if i == length - 1:
389  context.rebind(self.subName(name_list, i, i), obj)
390  return
391  else:
392  if self.objIsNamingContext(context):
393  try:
394  context = context.bind_new_context(self.subName(name_list, i, i))
395  except CosNaming.NamingContext.AlreadyBound:
396  obj_ = context.resolve(self.subName(name_list, i, i))
397  context = obj_._narrow(CosNaming.NamingContext)
398  else:
399  raise CosNaming.NamingContext.CannotProceed(context, self.subName(name_list, i))
400  return
401 
402 
403 
427  def bindContext(self, name, name_cxt, force=True):
428  if isinstance(name, basestring):
429  self.bind(self.toName(name), name_cxt, force)
430  else:
431  self.bind(name, name_cxt, force)
432  return
433 
434 
435 
453  def bindContextRecursive(self, context, name_list, name_cxt):
454  self.bindRecursive(context, name_list, name_cxt)
455  return
456 
457 
458 
481  def rebindContext(self, name, name_cxt, force=True):
482  if isinstance(name, basestring):
483  self.rebind(self.toName(name), name_cxt, force)
484  else:
485  self.rebind(name, name_cxt, force)
486  return
487 
488 
489 
506  def rebindContextRecursive(self, context, name_list, name_cxt):
507  self.rebindRecursive(context, name_list, name_cxt)
508  return
509 
510 
511 
538  def resolve(self, name):
539  if isinstance(name, basestring):
540  name_ = self.toName(name)
541  else:
542  name_ = name
543 
544  try:
545  obj = self._rootContext.resolve(name_)
546  return obj
547  except CosNaming.NamingContext.NotFound, ex:
548  return None
549 
550 
551 
578  def unbind(self, name):
579  if isinstance(name, basestring):
580  name_ = self.toName(name)
581  else:
582  name_ = name
583 
584  self._rootContext.unbind(name_)
585  return
586 
587 
588 
603  def newContext(self):
604  return self._rootContext.new_context()
605 
606 
607 
633  def bindNewContext(self, name, force=True):
634  if force is None:
635  force = True
636 
637  if isinstance(name, basestring):
638  name_ = self.toName(name)
639  else:
640  name_ = name
641 
642  try:
643  return self._rootContext.bind_new_context(name_)
644  except CosNaming.NamingContext.NotFound:
645  if force:
646  self.bindRecursive(self._rootContext, name_, self.newContext())
647  else:
648  raise
649  except CosNaming.NamingContext.CannotProceed, err:
650  if force:
651  self.bindRecursive(err.cxt, err.rest_of_name, self.newContext())
652  else:
653  raise
654  return None
655 
656 
657 
688  def destroy(self, context):
689  context.destroy()
690 
691 
692 
711  def destroyRecursive(self, context):
712  cont = True
713  bl = []
714  bi = 0
715  bl, bi = context.list(self._blLength)
716  while cont:
717  for i in range(len(bl)):
718  if bl[i].binding_type == CosNaming.ncontext:
719  obj = context.resolve(bl[i].binding_name)
720  next_context = obj._narrow(CosNaming.NamingContext)
721 
722  self.destroyRecursive(next_context)
723  context.unbind(bl[i].binding_name)
724  next_context.destroy()
725  elif bl[i].binding_type == CosNaming.nobject:
726  context.unbind(bl[i].binding_name)
727  else:
728  assert(0)
729  if CORBA.is_nil(bi):
730  cont = False
731  else:
732  bi.next_n(self._blLength, bl)
733 
734  if not (CORBA.is_nil(bi)):
735  bi.destroy()
736  return
737 
738 
739 
750  def clearAll(self):
751  self.destroyRecursive(self._rootContext)
752  return
753 
754 
755 
769  def list(self, name_cxt, how_many, rbl, rbi):
770  bl, bi = name_cxt.list(how_many)
771 
772  for i in bl:
773  rbl.append(bl)
774 
775  rbi.append(bi)
776 
777 
778  #============================================================
779  # interface of NamingContext
780  #============================================================
781 
782 
798  def toString(self, name_list):
799  if len(name_list) == 0:
800  raise CosNaming.NamingContext.InvalidName
801 
802  slen = self.getNameLength(name_list)
803  string_name = [""]
804  self.nameToString(name_list, string_name, slen)
805 
806  return string_name
807 
808 
809 
825  def toName(self, sname):
826  if not sname:
827  raise CosNaming.NamingContext.InvalidName
828 
829  string_name = sname
830  name_comps = []
831 
832  nc_length = 0
833  nc_length = self.split(string_name, "/", name_comps)
834  if not (nc_length > 0):
835  raise CosNaming.NamingContext.InvalidName
836 
837  name_list = [CosNaming.NameComponent("","") for i in range(nc_length)]
838 
839  for i in range(nc_length):
840  pos = string.rfind(name_comps[i][0:],".")
841  if pos == -1:
842  name_list[i].id = name_comps[i]
843  name_list[i].kind = ""
844  else:
845  name_list[i].id = name_comps[i][0:pos]
846  name_list[i].kind = name_comps[i][(pos+1):]
847 
848  return name_list
849 
850 
851 
869  def toUrl(self, addr, string_name):
870  return self._rootContext.to_url(addr, string_name)
871 
872 
873 
892  def resolveStr(self, string_name):
893  return self.resolve(self.toName(string_name))
894 
895 
896  #============================================================
897  # Find functions
898  #============================================================
899 
900 
920  def bindOrResolve(self, context, name_list, obj):
921  try:
922  context.bind_context(name_list, obj)
923  return obj
924  except CosNaming.NamingContext.AlreadyBound:
925  obj = context.resolve(name_list)
926  return obj
927  return CORBA.Object._nil
928 
929 
930 
951  def bindOrResolveContext(self, context, name_list, new_context=None):
952  if new_context is None:
953  new_cxt = self.newContext()
954  else:
955  new_cxt = new_context
956 
957  obj = self.bindOrResolve(context, name_list, new_cxt)
958  return obj._narrow(CosNaming.NamingContext)
959 
960 
961 
974  def getNameServer(self):
975  return self._nameServer
976 
977 
978 
991  def getRootContext(self):
992  return self._rootContext
993 
994 
995 
1009  def objIsNamingContext(self, obj):
1010  nc = obj._narrow(CosNaming.NamingContext)
1011  if CORBA.is_nil(nc):
1012  return False
1013  else:
1014  return True
1015 
1016 
1017 
1032  def nameIsNamingContext(self, name_list):
1033  return self.objIsNamingContext(self.resolve(name_list))
1034 
1035 
1036 
1054  def subName(self, name_list, begin, end = None):
1055  if end is None or end < 0:
1056  end = len(name_list) - 1
1057 
1058  sub_len = end - (begin -1)
1059  objId = ""
1060  kind = ""
1061 
1062  sub_name = []
1063  for i in range(sub_len):
1064  sub_name.append(name_list[begin + i])
1065 
1066  return sub_name
1067 
1068 
1069 
1088  def nameToString(self, name_list, string_name, slen):
1089  for i in range(len(name_list)):
1090  for id_ in name_list[i].id:
1091  if id_ == "/" or id_ == "." or id_ == "\\":
1092  string_name[0] += "\\"
1093  string_name[0] += id_
1094 
1095  if name_list[i].id == "" or name_list[i].kind != "":
1096  string_name[0] += "."
1097 
1098  for kind_ in name_list[i].kind:
1099  if kind_ == "/" or kind_ == "." or kind_ == "\\":
1100  string_name[0] += "\\"
1101  string_name[0] += kind_
1102 
1103  string_name[0] += "/"
1104 
1105 
1106 
1123  def getNameLength(self, name_list):
1124  slen = 0
1125 
1126  for i in range(len(name_list)):
1127  for id_ in name_list[i].id:
1128  if id_ == "/" or id_ == "." or id_ == "\\":
1129  slen += 1
1130  slen += 1
1131  if name_list[i].id == "" or name_list[i].kind == "":
1132  slen += 1
1133 
1134  for kind_ in name_list[i].kind:
1135  if kind_ == "/" or kind_ == "." or kind_ == "\\":
1136  slen += 1
1137  slen += 1
1138 
1139  slen += 1
1140 
1141  return slen
1142 
1143 
1144 
1160  def split(self, input, delimiter, results):
1161  delim_size = len(delimiter)
1162  found_pos = begin_pos = pre_pos = substr_size = 0
1163 
1164  if input[0:delim_size] == delimiter:
1165  begin_pos = pre_pos = delim_size
1166 
1167  while 1:
1168  found_pos = string.find(input[begin_pos:],delimiter)
1169 
1170  if found_pos == -1:
1171  results.append(input[pre_pos:])
1172  break
1173 
1174  if found_pos > 0 and input[found_pos - 1] == "\\":
1175  begin_pos += found_pos + delim_size
1176  else:
1177  substr_size = found_pos + (begin_pos - pre_pos)
1178  if substr_size > 0:
1179  results.append(input[pre_pos:(pre_pos+substr_size)])
1180  begin_pos += found_pos + delim_size
1181  pre_pos = begin_pos
1182 
1183  return len(results)
def toString(self, name_list)
Get string representation of given NameComponent.
def bindOrResolveContext(self, context, name_list, new_context=None)
Bind of resolve the given name component.
def nameIsNamingContext(self, name_list)
Whether the given name component is NamingContext.
def toName(self, sname)
Get NameComponent from gien string name representation.
def split(self, input, delimiter, results)
Split of string.
def unbind(self, name)
void unbind(const CosNaming::Name& name) throw(NotFound, CannotProceed, InvalidName); ...
def subName(self, name_list, begin, end=None)
Get subset of given name component.
def objIsNamingContext(self, obj)
Whether the object is NamingContext.
def getNameLength(self, name_list)
Get string length of the name component&#39;s string representation.
def resolveStr(self, string_name)
Resolve from name of string representation and get object.
def bindOrResolve(self, context, name_list, obj)
Bind of resolve the given name component.
def toUrl(self, addr, string_name)
Get URL representation from given addr and string_name.
def nameToString(self, name_list, string_name, slen)
Get string representation of name component.
def destroyRecursive(self, context)
Destroy the naming context recursively.


openrtm_aist_python
Author(s): Shinji Kurihara
autogenerated on Thu Jun 6 2019 19:11:34