Fixed handling of iterables inside attribute_formatters.
[django-cas-provider.git] / cas_provider / attribute_formatters.py
index 3f3ab3c..55eb4dd 100644 (file)
@@ -1,4 +1,5 @@
 from lxml import etree
+import collections
 
 CAS_URI = 'http://www.yale.edu/tp/cas'
 NSMAP = {'cas': CAS_URI}
@@ -10,7 +11,7 @@ def jasig(auth_success, attrs):
     style = etree.SubElement(attributes, CAS + 'attraStyle')
     style.text = u'Jasig'
     for name, value in attrs.items():
-        if isinstance(value, list):
+        if isinstance(value, collections.Iterable) and not isinstance(value, basestring):
             for e in value:
                 element = etree.SubElement(attributes, CAS + name)
                 element.text = e
@@ -23,7 +24,7 @@ def ruby_cas(auth_success, attrs):
     style = etree.SubElement(auth_success, CAS + 'attraStyle')
     style.text = u'RubyCAS'
     for name, value in attrs.items():
-        if isinstance(value, list):
+        if isinstance(value, collections.Iterable) and not isinstance(value, basestring):
             for e in value:
                 element = etree.SubElement(auth_success, CAS + name)
                 element.text = e
@@ -31,10 +32,11 @@ def ruby_cas(auth_success, attrs):
             element = etree.SubElement(auth_success, CAS + name)
             element.text = value
 
+
 def name_value(auth_success, attrs):
     etree.SubElement(auth_success, CAS + 'attribute', name=u'attraStyle', value=u'Name-Value')
     for name, value in attrs.items():
-        if isinstance(value, list):
+        if isinstance(value, collections.Iterable) and not isinstance(value, basestring):
             for e in value:
                 etree.SubElement(auth_success, CAS + 'attribute', name=name, value=e)
         else: