python/pyosaf/utils/immoi/implementer.py |  38 ++++++++++++++++++++-----------
 1 files changed, 24 insertions(+), 14 deletions(-)


Fix the 'deleted' list passed in validate and apply callbacks to contain proper 
instances of ImmObject instead of just DNs. Also fix the containment validation.

diff --git a/python/pyosaf/utils/immoi/implementer.py 
b/python/pyosaf/utils/immoi/implementer.py
--- a/python/pyosaf/utils/immoi/implementer.py
+++ b/python/pyosaf/utils/immoi/implementer.py
@@ -19,6 +19,7 @@
 '''
 
 import select
+import itertools
 
 from pyosaf import saImm, saImmOm, saImmOi, saAis
 
@@ -31,8 +32,6 @@ from pyosaf.utils import immom, immoi, S
 
 from pyosaf.utils.immom.object import ImmObject
 
-from pyosaf.utils.immom.ccb import marshal_c_array
-
 implementer_instance = None
 
 # Cache CCBs
@@ -89,13 +88,15 @@ def _collect_full_transaction(ccb_id):
 
             created.append(instance)
 
-            deleted = filter(lambda i: i != dn, deleted)
+            deleted = filter(lambda i: i.dn != dn, deleted)
 
         # Handle deletes
         elif operation_type == 'DELETE':
             dn = operation['dn']
 
-            deleted.append(dn)
+            obj = immom.get(dn)
+
+            deleted.append(obj)
 
             created = filter(lambda i: i.dn != dn, created)
             updated = filter(lambda i: i.dn != dn, updated)
@@ -145,8 +146,17 @@ def _collect_full_transaction(ccb_id):
                     affected_instance.__setattr__(attribute, values)
 
     # Return the summary
-    instances_after = all_objects_now + created
-    instances_after = filter(lambda i: not i.dn in deleted, instances_after)
+    instances_after = []
+
+    for mo in itertools.chain(all_objects_now, created):
+        is_deleted = False
+
+        for deleted_mo in deleted:
+            if deleted_mo.dn == mo.dn:
+                is_deleted = True
+
+        if not deleted:
+            instances_after.append(mo)
 
     out = {'instances_after' : instances_after,
            'created'         : created,
@@ -208,15 +218,15 @@ def apply_ccb(oi_handle, ccb_id):
             all_instances.append(obj)
 
     updated = completed_ccbs[ccb_id]['updated']
-    added   = completed_ccbs[ccb_id]['added']
-    removed = completed_ccbs[ccb_id]['removed']
+    created = completed_ccbs[ccb_id]['added']
+    deleted = completed_ccbs[ccb_id]['removed']
 
     # Remove the CCB from the caches
     del ccbs[ccb_id]
     del completed_ccbs[ccb_id]
 
     # Tell the implementer to apply the changes
-    return implementer_instance.on_apply(all_instances, updated, added, 
removed)
+    return implementer_instance.on_apply(all_instances, updated, created, 
deleted)
 
 def attr_update(oi_handle, c_name, c_attr_names):
     ''' Callback for attribute update calls from IMM '''
@@ -388,8 +398,8 @@ def completed_ccb(oi_handle, ccb_id):
                               'updated' : updated}
 
     # Perform validation on the full transaction
-    return implementer_instance._validate(ccb_id, instances, updated, 
-                                          created, deleted)
+    return implementer_instance._validate(ccb_id, instances, updated, created, 
+                                          deleted)
 
 
 # OI callbacks
@@ -482,7 +492,7 @@ class Constraints:
         if not parent_class in self.containments:
             self.containments[parent_class] = []
 
-        self.containments[parent_class] = [child_class]
+        self.containments[parent_class].append(child_class)
 
         # Store the cardinality
         pair = (parent_class, child_class)
@@ -514,8 +524,8 @@ class Constraints:
                 child_classes = self.containments[parent_class]
 
                 if not mo.SaImmAttrClassName in child_classes:
-                    error_string = "ERROR: Cannot create %s as a child under 
%s" % \
-                                   (mo.dn, parent_class)
+                    error_string = "ERROR: Cannot create %s as a child under 
%s. Possible children are %s" % \
+                                   (mo.dn, parent_class, child_classes)
                     raise SafException(eSaAisErrorT.SA_AIS_ERR_INVALID_PARAM,
                                        error_string)
 

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

Reply via email to