update test and examples for OMF6 in OMF section
[nepi.git] / src / nepi / resources / omf / omf6_parser.py
index 9029ce2..4ea5717 100644 (file)
@@ -50,8 +50,14 @@ class OMF6Parser(Logger):
 
         """
         super(OMF6Parser, self).__init__("OMF6API")
+        self.mailbox={}
 
-        
+        self.init_mailbox()
+
+    def init_mailbox(self):
+        self.mailbox['create'] = []
+        self.mailbox['started'] = []
+        self.mailbox['release'] = []
   
     def _check_for_tag(self, root, namespaces, tag):
         """  Check if an element markup is in the ElementTree
@@ -125,54 +131,90 @@ class OMF6Parser(Logger):
 
 
     def _inform_creation_ok(self, root, namespaces):
+        """ Parse and Display CREATION OK message
+
+        """
+        #ET.dump(root)
         uid = self._check_for_tag(root, namespaces, "uid")
+        cid = self._check_for_tag(root, namespaces, "cid")
         member = self._check_for_membership(root, namespaces)
         binary_path = self._check_for_tag(root, namespaces, "binary_path")
         msg = "CREATION OK -- "
         if binary_path :
             msg = msg + "The resource : '"+binary_path
+        else :
+            msg = msg + "The interface"
         if uid :
             msg = msg + "' is listening to the topics : '"+ uid
         if member :
             msg = msg + "' and '"+ member +"'"
-        self.info(msg)
+        if cid:
+            self.info(msg)
+            self.mailbox['create'].append([cid, uid ])
 
     def _inform_creation_failed(self, root, namespaces):
+        """ Parse and Display CREATION FAILED message
+
+        """
         reason = self._check_for_tag(root, namespaces, "reason")
+        cid = self._check_for_tag(root, namespaces, "cid")
         msg = "CREATION FAILED - The reason : "+reason
-        self.error(msg)
+        if cid:
+            self.error(msg)
+            self.mailbox['create'].append([cid, uid ])
 
     def _inform_status(self, root, namespaces):
+        """ Parse and Display STATUS message
+
+        """
         props = self._check_for_props(root, namespaces)
+        uid = self._check_for_tag(root, namespaces, "uid")
         msg = "STATUS -- "
         for elt in props.keys():
             ns, tag = elt.split('}')
             if tag == "it":
                 msg = msg + "membership : " + props[elt]+" -- "
+            elif tag == "event":
+                self.mailbox['started'].append(uid)
+                msg = msg + "event : " + props[elt]+" -- "
             else:
                 msg = msg + tag +" : " + props[elt]+" -- "
         msg = msg + " STATUS "
         self.info(msg)
 
     def _inform_released(self, root, namespaces):
+        """ Parse and Display RELEASED message
+
+        """
+        #ET.dump(root)
         parent_id = self._check_for_tag(root, namespaces, "src")
         child_id = self._check_for_tag(root, namespaces, "res_id")
-        msg = "RELEASED - The resource : '"+res_id+ \
-              "' has been released by : '"+ src
-        self.info(msg)
+        cid = self._check_for_tag(root, namespaces, "cid")
+        if cid :
+            msg = "RELEASED - The resource : '"+child_id+ \
+              "' has been released by : '"+ parent_id
+            self.info(msg)
+            self.mailbox['release'].append(cid)
 
     def _inform_error(self, root, namespaces):
+        """ Parse and Display ERROR message
+
+        """
         reason = self._check_for_tag(root, namespaces, "reason")
         msg = "The reason : "+reason
         self.error(msg)
 
     def _inform_warn(self, root, namespaces):
+        """ Parse and Display WARN message
+
+        """
         reason = self._check_for_tag(root, namespaces, "reason")
         msg = "The reason : "+reason
         self.warn(msg)
 
     def _parse_inform(self, root, namespaces):
-        """ Check the significative element in the answer and display it
+        """ Check the significative element in the answer
+            Then Parse it and display using specific method
 
         :param root: Root of the tree
         :type root: ElementTree Element
@@ -192,7 +234,34 @@ class OMF6Parser(Logger):
                 return
         
 
+    def check_mailbox(self, itype, attr):
+        """ Check the mail box
+
+        :param itype: type of mail
+        :type itype: str
+        :param attr: value wanted
+        :type attr: str
+
+        """
+        if itype == "create":
+            for res in self.mailbox[itype]:
+                binary, uid = res
+                if binary == attr:
+                    self.mailbox[itype].remove(res)
+                    return uid
+        else :
+            for res in self.mailbox[itype]:
+                if attr == res:
+                    self.mailbox[itype].remove(res)
+                    return res
+               
+
     def handle(self, iq):
+        """ Check the mail box
+
+        :param iq: message received
+        :type itype: iq
+        """
         namespaces = "{http://schema.mytestbed.net/omf/6.0/protocol}"
         for i in iq['pubsub_event']['items']:
             root = ET.fromstring(str(i))