Add option for disabling identity and feature deduplication.

XEP-0115 requires detecting duplicates, so we can't always silently
ignore them.
This commit is contained in:
Lance Stout 2011-12-30 20:53:18 -05:00
parent a7df76a275
commit 8eb225bdec

View file

@ -146,7 +146,7 @@ class DiscoInfo(ElementBase):
return True return True
return False return False
def get_identities(self, lang=None): def get_identities(self, lang=None, dedupe=True):
""" """
Return a set of all identities in tuple form as so: Return a set of all identities in tuple form as so:
(category, type, lang, name) (category, type, lang, name)
@ -155,17 +155,25 @@ class DiscoInfo(ElementBase):
that language. that language.
Arguments: Arguments:
lang -- Optional, standard xml:lang value. lang -- Optional, standard xml:lang value.
dedupe -- If True, de-duplicate identities, otherwise
return a list of all identities.
""" """
identities = set() if dedupe:
identities = set()
else:
identities = []
for id_xml in self.findall('{%s}identity' % self.namespace): for id_xml in self.findall('{%s}identity' % self.namespace):
xml_lang = id_xml.attrib.get('{%s}lang' % self.xml_ns, None) xml_lang = id_xml.attrib.get('{%s}lang' % self.xml_ns, None)
if lang is None or xml_lang == lang: if lang is None or xml_lang == lang:
identities.add(( id = (id_xml.attrib['category'],
id_xml.attrib['category'], id_xml.attrib['type'],
id_xml.attrib['type'], id_xml.attrib.get('{%s}lang' % self.xml_ns, None),
id_xml.attrib.get('{%s}lang' % self.xml_ns, None), id_xml.attrib.get('name', None))
id_xml.attrib.get('name', None))) if dedupe:
identities.add(id)
else:
identities.append(id)
return identities return identities
def set_identities(self, identities, lang=None): def set_identities(self, identities, lang=None):
@ -237,11 +245,17 @@ class DiscoInfo(ElementBase):
return True return True
return False return False
def get_features(self): def get_features(self, dedupe=True):
"""Return the set of all supported features.""" """Return the set of all supported features."""
features = set() if dedupe:
features = set()
else:
features = []
for feature_xml in self.findall('{%s}feature' % self.namespace): for feature_xml in self.findall('{%s}feature' % self.namespace):
features.add(feature_xml.attrib['var']) if dedupe:
features.add(feature_xml.attrib['var'])
else:
features.append(feature_xml.attrib['var'])
return features return features
def set_features(self, features): def set_features(self, features):