CAS = '{%s}' % CAS_URI
+try:
+ basestring
+except NameError:
+ basestring = (str, bytes)
+
+
def jasig(auth_success, attrs):
attributes = etree.SubElement(auth_success, CAS + 'attributes')
style = etree.SubElement(attributes, CAS + 'attraStyle')
- style.text = u'Jasig'
- for name, value in attrs.items():
- if isinstance(value, collections.Iterable):
+ style.text = 'Jasig'
+ for name, value in sorted(attrs.items()):
+ if isinstance(value, collections.abc.Iterable) and not isinstance(value, basestring):
for e in value:
element = etree.SubElement(attributes, CAS + name)
element.text = e
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):
+ style.text = 'RubyCAS'
+ for name, value in sorted(attrs.items()):
+ if isinstance(value, collections.abc.Iterable) and not isinstance(value, basestring):
for e in value:
element = etree.SubElement(auth_success, CAS + name)
element.text = e
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):
+ etree.SubElement(auth_success, CAS + 'attribute', name='attraStyle', value='Name-Value')
+ for name, value in sorted(attrs.items()):
+ if isinstance(value, collections.abc.Iterable) and not isinstance(value, basestring):
for e in value:
etree.SubElement(auth_success, CAS + 'attribute', name=name, value=e)
else: