X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Fnepi%2Fresources%2Fomf%2Fomf_client.py;h=8497f3bf3270e3a498508ebb0e83e0a64b2a8f06;hb=e55924b6886bd7382a28e1ae235c4810f852e163;hp=396e2d7b2592a75482075b5d20cdabf1689646aa;hpb=1d5fb4861661ec79f109de88552fcd523bbba423;p=nepi.git diff --git a/src/nepi/resources/omf/omf_client.py b/src/nepi/resources/omf/omf_client.py index 396e2d7b..8497f3bf 100644 --- a/src/nepi/resources/omf/omf_client.py +++ b/src/nepi/resources/omf/omf_client.py @@ -3,9 +3,8 @@ # Copyright (C) 2013 INRIA # # This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation; # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -19,20 +18,23 @@ # Julien Tribino from nepi.util.logger import Logger - - +from nepi.resources.omf.omf6_parser import OMF6Parser try: import sleekxmpp from sleekxmpp.exceptions import IqError, IqTimeout class BaseOMFClient(sleekxmpp.ClientXMPP): pass except ImportError: - print "SleekXMPP is not installed. Without this library, \n" + \ - " You will be not able to use OMF Resources \n"+ \ - " If you want to install SleekXmpp : \n"+ \ - " git clone -b develop git://github.com/fritzy/SleekXMPP.git \n"+ \ - " cd SleekXMPP \n"+ \ - "sudo python setup.py install\n" + msg = ("SleekXMPP is not installed. Without this library " + "you will be not able to use OMF Resources " + "if you want to install SleekXmpp: \n" + " git clone -b develop git://github.com/fritzy/SleekXMPP.git \n" + " cd SleekXMPP \n" + " sudo python setup.py install\n") + + logger = Logger("BaseOMFClient") + logger.debug(msg) + class BaseOMFClient(object): pass @@ -40,7 +42,7 @@ import traceback import xml.etree.ElementTree as ET # inherit from BaseXmpp and XMLstream classes -class OMFClient(sleekxmpp.ClientXMPP, Logger): +class OMFClient(BaseOMFClient, Logger): """ .. class:: Class Args : @@ -71,6 +73,7 @@ class OMFClient(sleekxmpp.ClientXMPP, Logger): self._ready = False self._registered = False self._server = None + self._parser = None self.register_plugin('xep_0077') # In-band registration self.register_plugin('xep_0030') @@ -80,7 +83,16 @@ class OMFClient(sleekxmpp.ClientXMPP, Logger): self.add_event_handler("session_start", self.start) self.add_event_handler("register", self.register) self.add_event_handler("pubsub_publish", self.handle_omf_message) + + #Init the parser + self._init_parser() + def _init_parser(self): + """ Init the parser depending on the OMF Version + + """ + self._parser = OMF6Parser() + @property def ready(self): """ Check if the client is ready @@ -190,8 +202,9 @@ class OMFClient(sleekxmpp.ClientXMPP, Logger): try: self['xep_0060'].create_node(self._server, node, config = config) except: - error = traceback.format_exc() - msg = ' Could not create topic: %s\ntraceback:\n%s' % (node, error) + #error = traceback.format_exc() + #msg = ' Could not create topic: %s\ntraceback:\n%s' % (node, error) + msg = 'Could not create the topic : '+node+' . Maybe the topic already exists' self.error(msg) def delete(self, node): @@ -209,8 +222,9 @@ class OMFClient(sleekxmpp.ClientXMPP, Logger): msg = ' Deleted node: %s' % node self.info(msg) except: - error = traceback.format_exc() - msg = ' Could not delete topic: %s\ntraceback:\n%s' % (node, error) + #error = traceback.format_exc() + #msg = ' Could not delete topic: %s\ntraceback:\n%s' % (node, error) + msg = 'Could not delete the topic : '+node+' . Maybe It is not the owner of the topic' self.error(msg) def publish(self, data, node): @@ -321,44 +335,17 @@ class OMFClient(sleekxmpp.ClientXMPP, Logger): % (self.boundjid.bare, node, error) self.error(msg) - def _check_for_tag(self, root, namespaces, tag): - """ Check if an element markup is in the ElementTree + def check_mailbox(self, itype, attr): + """ Check the mail box - :param root: Root of the tree - :type root: ElementTree Element - :param namespaces: Namespaces of the element - :type namespaces: str - :param tag: Tag that will search in the tree - :type tag: str + :param itype: type of mail + :type itype: str + :param attr: value wanted + :type attr: str """ - for element in root.iter(namespaces+tag): - if element.text: - return element - else : - return None + return self._parser.check_mailbox(itype, attr) - def _check_output(self, root, namespaces): - """ Check the significative element in the answer and display it - - :param root: Root of the tree - :type root: ElementTree Element - :param namespaces: Namespaces of the tree - :type namespaces: str - - """ - fields = ["TARGET", "REASON", "PATH", "APPID", "VALUE"] - response = "" - for elt in fields: - msg = self._check_for_tag(root, namespaces, elt) - if msg is not None: - response = response + " " + msg.text + " :" - deb = self._check_for_tag(root, namespaces, "MESSAGE") - if deb is not None: - msg = response + " " + deb.text - self.debug(msg) - else : - self.info(response) def handle_omf_message(self, iq): """ Handle published/received message @@ -367,9 +354,5 @@ class OMFClient(sleekxmpp.ClientXMPP, Logger): :type iq: Iq Stanza """ - namespaces = "{http://jabber.org/protocol/pubsub}" - for i in iq['pubsub_event']['items']: - root = ET.fromstring(str(i)) - self._check_output(root, namespaces) - + self._parser.handle(iq)