Hi Johan,

Reviewed and tested the patch.
Ack from me with some minor comments. Please see them inline.

BR,

Hung Nguyen - DEK Technologies


--------------------------------------------------------------------------------
From: Johan Martensson [email protected]
Sent: Wednesday, November 04, 2015 2:18PM
To: Ans Nordeback, Mathivanan Naickan, Hung Nguyen, Srikanth Revanuru
     [email protected], [email protected], 
[email protected], [email protected]
Cc: Opensaf-devel
     [email protected]
Subject: [PATCH 1 of 1] pyosaf: Update sample applications to use immom utils 
instead of direct bindings [#1451]


  python/pyosaf/utils/immom/__init__.py |   4 ++
  python/samples/immadm                 |  54 +++++++++++-----------------------
  python/samples/immlist                |  47 +++++++++++------------------
  3 files changed, 39 insertions(+), 66 deletions(-)


Update the python sample applications to use immom utils instead of the direct 
IMM OM bindings.

Also fix immom.get() because the updates uncovered a fault when it's used to 
request only specific attributes. If the attributes requested don't include 
SaImmAttrClassName the function will fail since it's used to determine the 
class of the object.

diff --git a/python/pyosaf/utils/immom/__init__.py 
b/python/pyosaf/utils/immom/__init__.py
--- a/python/pyosaf/utils/immom/__init__.py
+++ b/python/pyosaf/utils/immom/__init__.py
@@ -83,6 +83,10 @@ def _initialize():
  def get(object_name, attr_name_list=None):
      ''' obtain values of some attributes of the specified object '''
  
+    # Always request the SaImmAttrClassName attribute
+    if attr_name_list and not 'SaImmAttrClassName' in attr_name_list:
+        attr_name_list.append('SaImmAttrClassName')
+
      attrib_names = [SaImmAttrNameT(a) for a in attr_name_list]\
          if attr_name_list else None
  
diff --git a/python/samples/immadm b/python/samples/immadm
--- a/python/samples/immadm
+++ b/python/samples/immadm
@@ -18,10 +18,10 @@
  
  from optparse import OptionParser
  from pyosaf import saImm
-from pyosaf.saImmOm import *
+from pyosaf.utils import immom
*[Hung] Missing SafException*


  from socket import gethostname
  from os import getpid
-from immbase import *
+from pyosaf.saAis import eSaAisErrorT, SaAisErrorT
  import json
  import sys
  
@@ -46,66 +46,46 @@ def parseArgs(cmd=sys.argv[1:]):
                        help='turn off pretty printing.',
                        action='store_true', default=False)
        (options, args) = parser.parse_args(cmd)
+
        if len(args) < 2:
                parser.print_help()
                sys.exit()
+
        return options, args
  
  def immadm(options, args):
+
        if len(args) < 2:
                raise SafException(eSaAisErrorT.SA_AIS_ERR_INIT)
-       opId = SaImmAdminOperationIdT(int(args[0]))
-       dn = SaNameT(args[1])
-       retVal = SaAisErrorT(eSaAisErrorT.SA_AIS_ERR_NOT_EXIST)
+
+        op_id  = int(args[0])
+        dn     = args[1]
+        retVal = SaAisErrorT(eSaAisErrorT.SA_AIS_OK)
  
        try:
-               immHandle = SaImmHandleT()
-               rc = saImmOmInitialize(immHandle, None, IMM_VERSION)
-               if rc != eSaAisErrorT.SA_AIS_OK:
-                       raise SafException(rc)
-
-               ownerName = SaImmAdminOwnerNameT(options.adminOwner)
-               ownerHandle = SaImmAdminOwnerHandleT()
-               rc = saImmOmAdminOwnerInitialize(immHandle,
-                               ownerName, eSaBoolT.SA_TRUE, ownerHandle)
-               if rc != eSaAisErrorT.SA_AIS_OK:
-                       raise SafException(rc)
-
-               rc = saImmOmAdminOwnerSet(ownerHandle,
-                               [dn], saImm.eSaImmScopeT.SA_IMM_ONE)
-               if rc != eSaAisErrorT.SA_AIS_OK:
-                       raise SafException(rc)
-
                params = []
                for p in options.params:
                        (name, type, val) = p.split(':', 2)
                        ptype = eSaImmValueTypeT.lookup[type]
*[Hung] Missing saImm module. Should be saImm.eSaImmValueTypeT*

                        params.append(
                                SaImmAdminOperationParamsT_2(name, ptype, val))
**[Hung] Missing saImm module. Should be 
*saImm.SaImmAdminOperationParamsT_2*

-               contId = SaImmContinuationIdT()
-               rc = saImmOmAdminOperationInvoke_2(ownerHandle,
-                               dn, contId, opId, params, retVal,
-                               saAis.SA_TIME_ONE_SECOND*5)
-               if rc != eSaAisErrorT.SA_AIS_OK:
-                       raise SafException(rc)
+
+                immom.admin_op_invoke(dn, op_id, params=params)
+
        except SafException, e:
                if e.value != eSaAisErrorT.SA_AIS_ERR_NOT_EXIST:
                        raise e
-       finally:
-               saImmOmAdminOwnerRelease(ownerHandle,
-                               [dn], saImm.eSaImmScopeT.SA_IMM_ONE)
-               saImmOmAdminOwnerFinalize(ownerHandle)
-               saImmOmFinalize(immHandle)
  
-       return {'opId': opId.value,
-               'dname': args[1],
-               'owner': options.adminOwner,
+       return {'opId':   op_id,
+               'dname':  args[1],
+               'owner':  options.adminOwner,
                'params': options.params,
-               'rc': eSaAisErrorT.whatis(retVal.value)}
+               'rc':     eSaAisErrorT.whatis(retVal.value)}
  
  if __name__ == '__main__':
        (options, args) = parseArgs()
        result = immadm(options, args)
        logger = SafLogger(result['owner'])
        logger.log('ADMIN_CMD: OP_ID %(opId)s %(dname)s: %(rc)s' % result)
+
        print json.dumps(result, indent=None if options.ugly else 4)
diff --git a/python/samples/immlist b/python/samples/immlist
--- a/python/samples/immlist
+++ b/python/samples/immlist
@@ -16,8 +16,9 @@
  #
  ############################################################################
  
+from pyosaf import saImm
+from pyosaf.utils import immom
  from optparse import OptionParser
-from immbase import *
  import json
  import sys
  
@@ -42,36 +43,24 @@ class ListOptions(object):
                self.ugly = False
  
  def immlist(options, args):
-       try:
-               immHandle = SaImmHandleT()
-               rc = saImmOmInitialize(immHandle, None, IMM_VERSION)
-               if rc != eSaAisErrorT.SA_AIS_OK:
-                       raise SafException(rc)
+        objects = {}
  
-               accessorHandle = SaImmAccessorHandleT()
-               rc = saImmOmAccessorInitialize(immHandle, accessorHandle)
-               if rc != eSaAisErrorT.SA_AIS_OK:
-                       raise SafException(rc)
+        for dn in args:
+                obj = immom.get(dn, attr_name_list=options.attr)
  
-               objects = {}
-               attribNames = [SaImmAttrNameT(a) for a in options.attr]\
-                               if options.attr else None
-               attribs = pointer(pointer(SaImmAttrValuesT_2()))
-               for dn in args:
-                       rc = saImmOmAccessorGet_2(accessorHandle,
-                                       SaNameT(dn), attribNames, attribs)
-                       if rc == eSaAisErrorT.SA_AIS_ERR_NOT_EXIST:
-                               continue;
-                       if rc != eSaAisErrorT.SA_AIS_OK:
-                               raise SafException(rc)
-                       objects[dn] = SafObject(dn, attribs, options.numeric)
-       finally:
-               saImmOmAccessorFinalize(accessorHandle)
-               saImmOmFinalize(immHandle)
-       return objects
+                if obj:
+                        attributes = {}
+                        for name, value_pair in obj.attrs.iteritems():
+                                type_str = 
saImm.eSaImmValueTypeT.whatis(value_pair[0])
+                                value    = value_pair[1]
+
+                                attributes[name] = [type_str, value]
+
+                        objects[dn] = attributes
+
+        return objects
  
  if __name__ == '__main__':
        (options, args) = parseArgs()
-       print json.dumps(immlist(options, args),
-                       default=SafObject.serialize,
-                       indent=None if options.ugly else 4)
+        print json.dumps(immlist(options, args),
+                         indent=None if options.ugly else 4)


------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to