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 as 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 as 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, str):
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, str):
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, str):
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 as ex:
548  return None
549 
550 
551 
578  def unbind(self, name):
579  if isinstance(name, str):
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, str):
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 as 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)
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.bindNewContext
def bindNewContext(self, name, force=True)
Definition: examples/AutoTest/CorbaNaming.py:633
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.rebindByString
def rebindByString(self, string_name, obj, force=True)
Definition: examples/AutoTest/CorbaNaming.py:355
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.rebindContext
def rebindContext(self, name, name_cxt, force=True)
Definition: examples/AutoTest/CorbaNaming.py:481
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.split
def split(self, input, delimiter, results)
Split of string.
Definition: examples/AutoTest/CorbaNaming.py:1160
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.nameIsNamingContext
def nameIsNamingContext(self, name_list)
Whether the given name component is NamingContext.
Definition: examples/AutoTest/CorbaNaming.py:1032
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.init
def init(self, name_server)
Definition: examples/AutoTest/CorbaNaming.py:129
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.getNameServer
def getNameServer(self)
Get the name of naming server.
Definition: examples/AutoTest/CorbaNaming.py:974
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.__del__
def __del__(self)
destructor
Definition: examples/AutoTest/CorbaNaming.py:112
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.bindOrResolveContext
def bindOrResolveContext(self, context, name_list, new_context=None)
Bind of resolve the given name component.
Definition: examples/AutoTest/CorbaNaming.py:951
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming
CORBA Naming Service helper class.
Definition: examples/AutoTest/CorbaNaming.py:60
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.rebindContextRecursive
def rebindContextRecursive(self, context, name_list, name_cxt)
Definition: examples/AutoTest/CorbaNaming.py:506
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming._nameServer
_nameServer
Definition: examples/AutoTest/CorbaNaming.py:82
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.resolveStr
def resolveStr(self, string_name)
Resolve from name of string representation and get object.
Definition: examples/AutoTest/CorbaNaming.py:892
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.bind
def bind(self, name_list, obj, force=None)
Definition: examples/AutoTest/CorbaNaming.py:185
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.bindContext
def bindContext(self, name, name_cxt, force=True)
Definition: examples/AutoTest/CorbaNaming.py:427
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming._rootContext
_rootContext
Definition: examples/AutoTest/CorbaNaming.py:83
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.rebindRecursive
def rebindRecursive(self, context, name_list, obj)
Definition: examples/AutoTest/CorbaNaming.py:385
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.getNameLength
def getNameLength(self, name_list)
Get string length of the name component's string representation.
Definition: examples/AutoTest/CorbaNaming.py:1123
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.toName
def toName(self, sname)
Get NameComponent from gien string name representation.
Definition: examples/AutoTest/CorbaNaming.py:825
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.bindContextRecursive
def bindContextRecursive(self, context, name_list, name_cxt)
Definition: examples/AutoTest/CorbaNaming.py:453
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming._orb
_orb
Definition: examples/AutoTest/CorbaNaming.py:81
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.getRootContext
def getRootContext(self)
Get the root context.
Definition: examples/AutoTest/CorbaNaming.py:991
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.objIsNamingContext
def objIsNamingContext(self, obj)
Whether the object is NamingContext.
Definition: examples/AutoTest/CorbaNaming.py:1009
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.toUrl
def toUrl(self, addr, string_name)
Get URL representation from given addr and string_name.
Definition: examples/AutoTest/CorbaNaming.py:869
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.bindByString
def bindByString(self, string_name, obj, force=True)
Definition: examples/AutoTest/CorbaNaming.py:229
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.toString
def toString(self, name_list)
Get string representation of given NameComponent.
Definition: examples/AutoTest/CorbaNaming.py:798
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.__init__
def __init__(self, orb, name_server=None)
Consructor.
Definition: examples/AutoTest/CorbaNaming.py:80
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.rebind
def rebind(self, name_list, obj, force=True)
Definition: examples/AutoTest/CorbaNaming.py:310
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.clearAll
def clearAll(self)
Destroy all binding.
Definition: examples/AutoTest/CorbaNaming.py:750
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.bindOrResolve
def bindOrResolve(self, context, name_list, obj)
Bind of resolve the given name component.
Definition: examples/AutoTest/CorbaNaming.py:920
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.destroy
def destroy(self, context)
Definition: examples/AutoTest/CorbaNaming.py:688
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.bindRecursive
def bindRecursive(self, context, name_list, obj)
Definition: examples/AutoTest/CorbaNaming.py:268
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.unbind
def unbind(self, name)
void unbind(const CosNaming::Name& name) throw(NotFound, CannotProceed, InvalidName);
Definition: examples/AutoTest/CorbaNaming.py:578
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.subName
def subName(self, name_list, begin, end=None)
Get subset of given name component.
Definition: examples/AutoTest/CorbaNaming.py:1054
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.newContext
def newContext(self)
Definition: examples/AutoTest/CorbaNaming.py:603
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.list
def list(self, name_cxt, how_many, rbl, rbi)
Definition: examples/AutoTest/CorbaNaming.py:769
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.destroyRecursive
def destroyRecursive(self, context)
Destroy the naming context recursively.
Definition: examples/AutoTest/CorbaNaming.py:711
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.nameToString
def nameToString(self, name_list, string_name, slen)
Get string representation of name component.
Definition: examples/AutoTest/CorbaNaming.py:1088
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming._blLength
_blLength
Definition: examples/AutoTest/CorbaNaming.py:84
OpenRTM_aist.examples.AutoTest.CorbaNaming.CorbaNaming.resolve
def resolve(self, name)
Definition: examples/AutoTest/CorbaNaming.py:538


openrtm_aist_python
Author(s): Shinji Kurihara
autogenerated on Mon Apr 21 2025 02:45:06