X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Fnepi%2Fresources%2Fomf%2Fomf6_parser.py;h=4ea57179ed1cf6f61b4f5be09219ea5e44357cf6;hb=f025a30a215310a9803067a25e244137b71f56f2;hp=9029ce26bfb11e05a24d6538af3a20845228cfef;hpb=c05f5499a6212c1ad45199bbf1f2044aa2404022;p=nepi.git diff --git a/src/nepi/resources/omf/omf6_parser.py b/src/nepi/resources/omf/omf6_parser.py index 9029ce26..4ea57179 100644 --- a/src/nepi/resources/omf/omf6_parser.py +++ b/src/nepi/resources/omf/omf6_parser.py @@ -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))