- check data type before implicit type conversion
- add more encode/decode byte-string
- update iterable dict items for python 2 and 3
---
 python/pyosaf/utils/clm/__init__.py          |  4 ++--
 python/pyosaf/utils/immoi/agent.py           |  5 +++--
 python/pyosaf/utils/immoi/implementer.py     | 14 +++++++-------
 python/pyosaf/utils/immom/agent.py           |  6 ++++--
 python/pyosaf/utils/immom/iterator.py        |  5 +++--
 python/pyosaf/utils/immom/object.py          |  6 +++---
 python/pyosaf/utils/ntf/subscriber.py        |  2 +-
 python/samples/imm-listener                  |  2 +-
 python/samples/imm-listener-inheritance-impl |  2 +-
 python/samples/immbase.py                    |  4 ++--
 python/samples/immlist                       |  2 +-
 python/samples/scale_opensaf                 |  2 +-
 12 files changed, 29 insertions(+), 25 deletions(-)

diff --git a/python/pyosaf/utils/clm/__init__.py 
b/python/pyosaf/utils/clm/__init__.py
index 5461d4a3c..26e65f58f 100644
--- a/python/pyosaf/utils/clm/__init__.py
+++ b/python/pyosaf/utils/clm/__init__.py
@@ -67,9 +67,9 @@ class ClusterNode(object):
                 cluster membership
         """
         self.node_id = node_id
-        self.node_address_value = node_address.value
+        self.node_address_value = node_address.value.decode('utf-8')
         self.node_address_family = node_address.family
-        self.node_name = node_name.value
+        self.node_name = node_name.value.decode('utf-8')
         self.execution_environment = execution_environment
         self.member = member
         self.boot_timestamp = boot_timestamp
diff --git a/python/pyosaf/utils/immoi/agent.py 
b/python/pyosaf/utils/immoi/agent.py
index e0697b1ef..3e5d1913e 100644
--- a/python/pyosaf/utils/immoi/agent.py
+++ b/python/pyosaf/utils/immoi/agent.py
@@ -386,9 +386,10 @@ class OiAgent(object):
             list: List of object names
         """
         # Marshall the search parameter
-        c_class_name = c_char_p(class_name)
+        c_class_name = c_char_p(class_name.encode('utf-8'))
         c_search_param = SaImmSearchParametersT_2()
-        c_search_param.searchOneAttr.attrName = "SaImmAttrClassName"
+        c_search_param.searchOneAttr.attrName = "SaImmAttrClassName".encode(
+            'utf-8')
         c_search_param.searchOneAttr.attrValueType = \
             eSaImmValueTypeT.SA_IMM_ATTR_SASTRINGT
         c_search_param.searchOneAttr.attrValue = \
diff --git a/python/pyosaf/utils/immoi/implementer.py 
b/python/pyosaf/utils/immoi/implementer.py
index f7f7a83ad..61a7fe6ce 100755
--- a/python/pyosaf/utils/immoi/implementer.py
+++ b/python/pyosaf/utils/immoi/implementer.py
@@ -25,7 +25,7 @@ from pyosaf.saAis import eSaAisErrorT, unmarshalNullArray, \
     unmarshalSaStringTArray
 from pyosaf import saImm, saImmOi
 from pyosaf.saImm import eSaImmValueTypeT, eSaImmAttrModificationTypeT, \
-    eSaImmClassCategoryT, SaImmClassNameT, unmarshalSaImmValue
+    eSaImmClassCategoryT, SaImmClassNameT, unmarshalSaImmValue, SaStringT, PY3
 from pyosaf.saImmOi import SaImmOiImplementerNameT
 from pyosaf.utils import SafException, decorate, bad_handle_retry, log_err
 from pyosaf.utils.immoi import OiAgent
@@ -285,7 +285,7 @@ class Implementer(OiAgent):
         if not c_array:
             return []
         ctype = c_array[0].__class__
-        if ctype is str:
+        if ctype is str or (PY3 and ctype is SaStringT):
             return unmarshalSaStringTArray(c_array)
         val_list = []
         i = 0
@@ -489,7 +489,7 @@ class Implementer(OiAgent):
         implementer_objection = None
 
         for attr in unmarshalNullArray(c_attr_modification):
-            attr_name = attr.modAttr.attrName
+            attr_name = str(attr.modAttr.attrName)
             attr_type = attr.modAttr.attrValueType
             mod_type = attr.modType
             attr_values = self.unmarshal_len_array(
@@ -541,7 +541,7 @@ class Implementer(OiAgent):
         attributes = {}
 
         for attr in unmarshalNullArray(c_attr_values):
-            attr_name = attr.attrName
+            attr_name = str(attr.attrName)
             attr_type = attr.attrValueType
             nr_values = attr.attrValuesNumber
 
@@ -556,8 +556,8 @@ class Implementer(OiAgent):
         _, description = self.imm_om.get_class_description(class_name)
 
         for attribute in description:
-            if attribute.attrName not in attributes:
-                attributes[attribute.attrName] = None
+            if str(attribute.attrName) not in attributes:
+                attributes[str(attribute.attrName)] = None
 
         # Create a new CCB in the cache if needed
         if ccb_id not in list(self.ccbs.keys()):
@@ -566,7 +566,7 @@ class Implementer(OiAgent):
         # Cache the create operation
         self.ccbs[ccb_id].append({'type': 'CREATE',
                                   'parent': parent,
-                                  'className': class_name,
+                                  'className': str(class_name),
                                   'attributes': attributes})
 
         # Tell the implementer about the operation
diff --git a/python/pyosaf/utils/immom/agent.py 
b/python/pyosaf/utils/immom/agent.py
index 0413f1bd1..b5a710628 100644
--- a/python/pyosaf/utils/immom/agent.py
+++ b/python/pyosaf/utils/immom/agent.py
@@ -22,7 +22,7 @@ from ctypes import pointer
 
 from pyosaf import saImmOm, saImm
 from pyosaf.saAis import saAis, SaVersionT, SaNameT, SaAisErrorT, \
-    eSaAisErrorT, eSaBoolT, unmarshalNullArray
+    eSaAisErrorT, eSaBoolT, unmarshalNullArray, SaStringT
 from pyosaf.saImm import eSaImmScopeT, SaImmClassNameT, SaImmAttrNameT
 from pyosaf.utils import decorate, initialize_decorate, log_err
 
@@ -221,8 +221,10 @@ class ImmOmAgent(OmAgentManager):
         class_attrs = []
         attr_defs = pointer(pointer(saImm.SaImmAttrDefinitionT_2()))
         category = saImm.SaImmClassCategoryT()
+        c_class_name = class_name if isinstance(
+            class_name, SaStringT) else SaImmClassNameT(class_name)
         rc = saImmOmClassDescriptionGet_2(self.handle,
-                                          SaImmClassNameT(class_name),
+                                          c_class_name,
                                           category,
                                           attr_defs)
         if rc != eSaAisErrorT.SA_AIS_OK:
diff --git a/python/pyosaf/utils/immom/iterator.py 
b/python/pyosaf/utils/immom/iterator.py
index 91c5751c0..704b4bcf0 100644
--- a/python/pyosaf/utils/immom/iterator.py
+++ b/python/pyosaf/utils/immom/iterator.py
@@ -138,9 +138,10 @@ class SearchIterator(agent.OmAgentManager, Iterator):
 class InstanceIterator(SearchIterator):
     """ Iterator over instances of a class """
     def __init__(self, class_name, root_name=None):
-        name = c_char_p(class_name)
+        name = c_char_p(class_name.encode('utf-8'))
         search_param = SaImmSearchParametersT_2()
-        search_param.searchOneAttr.attrName = "SaImmAttrClassName"
+        search_param.searchOneAttr.attrName = "SaImmAttrClassName".encode(
+            'utf-8')
         search_param.searchOneAttr.attrValueType = \
             eSaImmValueTypeT.SA_IMM_ATTR_SASTRINGT
         search_param.searchOneAttr.attrValue = cast(pointer(name), c_void_p)
diff --git a/python/pyosaf/utils/immom/object.py 
b/python/pyosaf/utils/immom/object.py
index 6e80abfae..cd117be9c 100644
--- a/python/pyosaf/utils/immom/object.py
+++ b/python/pyosaf/utils/immom/object.py
@@ -55,7 +55,7 @@ class ImmObject(object):
             rc, class_desc = _imm_om.get_class_description(class_name)
             if rc != eSaAisErrorT.SA_AIS_OK:
                 raise SafException(rc)
-            self.class_desc[class_name] = class_desc
+            self.class_desc[str(class_name)] = class_desc
         elif attributes is not None:
             assert class_name is None
             self.__dict__["attrs"] = attributes
@@ -81,7 +81,7 @@ class ImmObject(object):
         Returns:
             SaImmAttrNameT: Attribute value type
         """
-        for attr_def in self.class_desc[self.class_name]:
+        for attr_def in self.class_desc[str(self.class_name)]:
             if str(attr_def.attrName) == attr_name:
                 return attr_def.attrValueType
 
@@ -95,7 +95,7 @@ class ImmObject(object):
             SaImmAttrFlagsT: Attribute flag
         """
         for attr_def in self.class_desc[self.class_name]:
-            if attr_def.attrName == attr_name:
+            if str(attr_def.attrName) == attr_name:
                 return attr_def.attrFlags & saImm.SA_IMM_ATTR_MULTI_VALUE
 
     def __getattr__(self, name):
diff --git a/python/pyosaf/utils/ntf/subscriber.py 
b/python/pyosaf/utils/ntf/subscriber.py
index 05596dc08..36238e003 100644
--- a/python/pyosaf/utils/ntf/subscriber.py
+++ b/python/pyosaf/utils/ntf/subscriber.py
@@ -508,7 +508,7 @@ class NtfConsumer(ntf.NtfAgent):
             ctypes.create_string_buffer(ntf_header.lengthAdditionalText)
         ctypes.memmove(additional_text_str, ntf_header.additionalText,
                        ntf_header.lengthAdditionalText)
-        ntf_info.additional_text = additional_text_str.value
+        ntf_info.additional_text = additional_text_str.value.decode('utf-8')
 
         for i in range(ntf_header.numAdditionalInfo):
             c_add_info = ntf_header.additionalInfo[i]
diff --git a/python/samples/imm-listener b/python/samples/imm-listener
index db8bbea34..138e8da70 100755
--- a/python/samples/imm-listener
+++ b/python/samples/imm-listener
@@ -39,7 +39,7 @@ def print_object(obj):
     print("\t%s" % obj.dn)
 
     # Print attributes
-    for name, type_value_pair in obj.attrs.iteritems():
+    for name, type_value_pair in obj.attrs.items():
         value = type_value_pair[1]
 
         if len(value) == 1:
diff --git a/python/samples/imm-listener-inheritance-impl 
b/python/samples/imm-listener-inheritance-impl
index 5a0df8df6..bf32cc1c0 100755
--- a/python/samples/imm-listener-inheritance-impl
+++ b/python/samples/imm-listener-inheritance-impl
@@ -63,7 +63,7 @@ class ImmListener(Applier):
         print("\t%s" % obj.dn)
 
         # Print attributes
-        for name, type_value_pair in obj.attrs.iteritems():
+        for name, type_value_pair in obj.attrs.items():
             value = type_value_pair[1]
 
             if len(value) == 1:
diff --git a/python/samples/immbase.py b/python/samples/immbase.py
index 2f6afba0c..21500f4cf 100644
--- a/python/samples/immbase.py
+++ b/python/samples/immbase.py
@@ -77,7 +77,7 @@ class SafObject(object):
 
     @staticmethod
     def resolveStates(attribs):
-        for (attr, vals) in attribs.iteritems():
+        for (attr, vals) in attribs.items():
             enum = SafObject.resolver.get(attr)
             if enum:
                 vals[1] = [enum.whatis(val) for val in vals[1]]
@@ -92,7 +92,7 @@ class SafObject(object):
         attrList = unmarshalNullArray(attribs)
         for attr in attrList:
             attrRange = range(attr.attrValuesNumber)
-            self.attribs[attr.attrName] = [
+            self.attribs[str(attr.attrName)] = [
                 saImm.eSaImmValueTypeT.whatis(attr.attrValueType),
                 [saImm.unmarshalSaImmValue(
                     attr.attrValues[val],
diff --git a/python/samples/immlist b/python/samples/immlist
index 1034421c9..5fac6eaea 100755
--- a/python/samples/immlist
+++ b/python/samples/immlist
@@ -36,7 +36,7 @@ def immlist(args):
         _, obj = accessor.get(dn, attr_name_list=args.attributes)
         if obj:
             attributes = {}
-            for name, value_pair in obj.attrs.iteritems():
+            for name, value_pair in obj.attrs.items():
                 type_str = saImm.eSaImmValueTypeT.whatis(value_pair[0])
                 value = value_pair[1]
                 attributes[name] = [type_str, value]
diff --git a/python/samples/scale_opensaf b/python/samples/scale_opensaf
index 3de863210..5a191802d 100755
--- a/python/samples/scale_opensaf
+++ b/python/samples/scale_opensaf
@@ -47,7 +47,7 @@ def print_object(immobj, new_dn=None):
         print(new_dn)
     else:
         print(immobj.dn)
-    for key, value in immobj.attrs.iteritems():
+    for key, value in immobj.attrs.items():
         val = ''
         if value[1]:
             val = value[1]
-- 
2.25.1



_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to