diff --git a/src/core/sat_main.py b/src/core/sat_main.py index 78f7ef52..7ff846b7 100644 --- a/src/core/sat_main.py +++ b/src/core/sat_main.py @@ -611,6 +611,9 @@ class SAT(service.Service): def hasFeature(self, *args, **kwargs): return self.memory.disco.hasFeature(*args, **kwargs) + def checkFeature(self, *args, **kwargs): + return self.memory.disco.checkFeature(*args, **kwargs) + def getDiscoInfos(self, *args, **kwargs): return self.memory.disco.getInfos(*args, **kwargs) diff --git a/src/memory/disco.py b/src/memory/disco.py index c7e46af1..99baecdc 100755 --- a/src/memory/disco.py +++ b/src/memory/disco.py @@ -18,6 +18,7 @@ # along with this program. If not, see . from sat.core.i18n import _ +from sat.core import exceptions from logging import debug, info, warning, error from twisted.words.protocols.jabber import jid from twisted.internet import defer @@ -67,6 +68,22 @@ class Discovery(object): @return: a Deferred which fire a boolean (True if feature is available) """ disco_info = yield self.getInfos(jid_, profile_key) + defer.returnValue(feature in disco_info.features) + + @defer.inlineCallbacks + def checkFeature(self, feature, jid_=None, profile_key=C.PROF_KEY_NONE): + """Like hasFeature, but raise an exception is feature is not Found + + @param feature: feature namespace + @param jid_: jid of the target, or None for profile's server + @param profile_key: %(doc_profile_key)s + @return: None if feature is found + + @raise: exceptions.FeatureNotFound + """ + disco_info = yield self.getInfos(jid_, profile_key) + if not feature in disco_info.features: + raise exceptions.FeatureNotFound defer.returnValue(feature in disco_info) @defer.inlineCallbacks