Интерфейс
suds преобразует эти перечисления в атрибуты объекта, а Python 2. * не позволяет использовать символы Юникода для имен идентификаторов.В Python 3.2 это работает:
>>> class A(object):
pass
>>> a = A()
>>> setattr(a, 'tést', 1)
>>> a.tést
1
В Python 2.6 это вызывает UnicodeEncodeError:
>>> setattr(a, u'tést', 1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 1: ordinal not in range(128)
Исправление этого для Python 2. * кажется большой работой:
- проверьте, если
e.name != unidecode(e.name)
, если это так, конвертируйте идентификаторы в ascii, используя unidecode, и отслеживайте исходное имя. - конвертируйте обратно в версию Unicode при генерации мыльных сообщений
Я никогда не пробовал suds с Python 3. *, но он поддерживает буквы юникода в именах идентификаторов.
Моя родная идиома - португальский, в нем много акцентированных символов, таких как французы в этом WSDL.Даже если Python 3. * допускает это, я думаю, что нет веских причин для использования чего-либо, кроме английских идентификаторов - это глупая идея, и автор интерфейса напрашивается на неприятности.Вся идея SOAP заключается в совместимости, зачем использовать функцию, которая не очень хорошо поддерживается всеми языками программирования?