Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
suds — Clone of suds 0.4 + suds-0.4-CVE-2013-2217.patch | Kitploit
Инструменты/GitHubGitHub/osirium/suds
Vulnerability AnalysisScripting & AutomationAPI Security TestingWeb SecurityUtilities & FrameworksAPI Security
GitHubosirium/suds

suds

Clone of suds 0.4 + suds-0.4-CVE-2013-2217.patch

Репозиторий
8 лет назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

ОБЗОР

Веб-сервисный клиент «Suds» — это легковесный SOAP-клиент для Python, распространяемый под лицензией LGPL.

Подробнее:

  • Сайт проекта: https://fedorahosted.org/suds/
  • Документация: https://fedorahosted.org/suds/wiki/Documentation
  • Эпидоки: http://jortel.fedorapeople.org/suds/doc/

ПРИМЕЧАНИЯ К ВЫПУСКАМ:

версия 0.3.6 (04-31-09):

  • Изменено жёстко заданное /tmp/suds на tempfile.gettempdir() и создание suds/ по требованию.
  • Исправлен тип возврата для Any.get_attribute().
  • Обновлено HTTP-кэширование — игнорируются URL файловой системы file://.
  • Улучшено логирование сообщений, когда внедряется только ответ.
  • Исправлены типы XInteger и XFloat для корректного преобразования возвращаемых массивов.
  • Исправлен xs:import схемы с тем же пространством имён.
  • Обновлён парсер — не загружать внешние ссылки; добавлен Import.bind() для указания расположения XMLSchema.xsd.
  • Добавлен «доктор схем» (schema doctor) — для исправления XSD во время выполнения (см. Option.doctor).
  • Исправлены предупреждения об устаревании в Python 2.6.
  • Добавлено поведение для @default, определённого на .
  • Изменено значение @xsi:type — теперь всегда квалифицированное для doc/literal (отмена изменения версии 0.3.5).
  • Добавлена опция Option.xstq для управления квалификацией @xsi:type.
  • Исправлены запросы: #64, #129, #205, #206, #217, #221, #222, #224, #225, #228, #229, #230

версия 0.3.5 (04-16-09):

  • Добавлено HTTP-кэширование. По умолчанию — 1 день. Не применяется к вызовам методов. Подробнее см. документацию.
  • Удалена проверка версии Fedora в spec, так как сборка больше не ведётся для < fc9.
  • Обновлён makefile для формирования tarball с помощью tar.sh.
  • Определение bare/wrapped перенесено в wsdl для document/literal.
  • Транспорт (Transport) реорганизован в пакет (обеспечивает лучшее логирование HTTP-заголовков).
  • Исправлены запросы: #207, #209, #210, #212, #214, #215

версия 0.3.4 (02-24-09):

  • Статическое (автоматическое) Import.bind('http://schemas.xmlsoap.org/soap/encoding/') — пользователям больше не нужно делать это вручную.
  • Базовая WS-Security с {{{UsernameToken}}} и только открытым текстом пароля.
  • Добавлена поддержка «разрозненных» SOAP-заголовков через передачу словаря.
  • Добавлена поддержка произвольных пользовательских SOAP-заголовков.
  • Исправлены сервисные операции с несколькими записями SOAP-заголовков.
  • Улучшены алгоритмы загрузки и разрешения схем.
  • Исправлены вложенные SOAP multirefs.
  • Улучшена (истинная) поддержка elementFormDefault="unqualified" — более точное пространство имён.
  • Типы частей WSDL больше не принимают значение targetNamespace WSDL по умолчанию.
  • Исправлены запросы: #4, #6, #21, #32, #62, #66, #71, #72, #114, #155, #201.

версия 0.3.3 (11-31-08):

  • Больше не устанавливается пакет (tests).
  • Реализовано предложение API-3 ( https://fedorahosted.org/suds/wiki/Api3Proposal )
    • Подключаемый транспорт
    • Именованные аргументы методов
    • Базовая HTTP-аутентификация в транспорте по умолчанию
  • Добавлена нормализация префиксов пространств имён в SOAP-сообщениях.
  • Улучшена очистка SOAP-сообщений от пустых узлов.
  • Исправлены запросы: #51 - #60

версия 0.3.2 (11-7-08):

  • Поддержка SOAP {{{MultiRef}}} ''(первый проход добавлен в r300)''
  • Добавлена поддержка новых тегов схем:
    • xs:include/
    • xs:simpleContent/
    • xs:group/
    • xs:attributeGroup/
  • Добавлена поддержка новых преобразований типов xs <--> python:
    • xs:int
    • xs:long
    • xs:float
    • xs:double
  • Пересмотрен маршаллер и привязка для дальнейшего уточнения пространств имён создаваемых узлов.
  • Исправлена бесконечная рекурсия в пакете ''xsd'' при dereference() во время загрузки схемы.
  • Добавлена поддержка wsdl:import/ файлов схем в корневой элемент WSDL.
  • Исправлено двойное кодирование (&)
  • Добавлен API клиента:
    • setheaders() — то же, что и ключевое слово, но работает для всех вызовов.
    • addprefix() — сопоставление префиксов пространств имён.
    • setlocation() — переопределение расположения в WSDL; то же, что и ключевое слово, но для всех вызовов.
    • setproxy() — то же, что и ключевое слово proxy, но для всех вызовов.
  • Добавлен правильный префикс пространства имён для SOAP-заголовков.
  • Исправлены запросы: #5, #12, #34, #37, #40, #44, #45, #46, #48, #49, #50, #51

версия 0.3.1 (10-1-08):

  • Быстрое продолжение выпуска 0.3, который сделал работу с многопортовыми определениями сервисов сложнее, чем необходимо. После обдумывания (и хорошего ночного сна) стало очевидно, что несколько изменений сделают это гораздо проще: 1) отфильтровать привязки, не относящиеся к SOAP — именно они вызывали реальные проблемы; 2) поскольку большинство серверов нормально работают с любой из SOAP-привязок (SOAP 1.1 и 1.2), неоднозначные ссылки на методы при их вызове без указания порта будут работать практически во всех случаях. Так зачем же заставлять suds выбирать порт? Давайте не будем заставлять пользователя делать это, когда это не нужно. В большинстве случаев пользователи версии 0.2.9 и более ранних не будут вынуждены обновлять свой код при переходе на 0.3.1, как это могло быть в 0.3.

версия 0.3 (9-30-08):

  • Расширена поддержка многопортовых сервисов, введённая в версии 0.2.9. Это дополнение обеспечивает корректную обработку ситуаций, когда несколько сервисов определяют один и тот же метод, и suds будет обрабатывать это должным образом. См. раздел 'СЕРВИСЫ С НЕСКОЛЬКИМИ ПОРТАМИ:'.

  • Добавлена поддержка многодокументного стиля привязки document/literal. См. раздел 'МНОГОДОКУМЕНТНЫЙ Document/Literal:'.

  • Добавлена поддержка тегов (xs:group, xs:attributeGroup).

  • Добавлены методы Client.last_sent() и Client.last_received().

версия 0.2.9 (9-09-08):

  • Поддержка нескольких портов в рамках одного сервиса.
  • Ссылки на атрибуты <xs:attribute ref=""/>.
  • Кодировщик специальных символов XML в пакете sax сделан подключаемым.

версия 0.2.8 (8-28-08):

  • Обновлена привязка document/literal — теперь всегда отправляется корень документа, на который ссылается . После очередного анализа пространства и отзывов пользователей, похоже, что элемент, на который ссылаются, ВСЕГДА является корнем документа.

  • Добавлена поддержка привязки 'binding' schemaLocations к URI пространства имён.
    Это для импортов, которые не указывают schemaLocation, но всё равно ожидают загрузки схемы. Например: Axis ссылается на 'http://schemas.xmlsoap.org/soap/encoding/' без schemaLocation. Таким образом, выполнив:

    from suds.xsd.sxbasic import Import. Import.bind('http://schemas.xmlsoap.org/soap/encoding/')

    Схема привязывается к schemaLocation и загружается.

  • Базовый демаршаллер не требует /schema/. Должен был быть удалён при рефакторинге, но был пропущен.

  • Обновлён клиент: передаёт kwargs в send() и добавлен /location/ kwarg для переопределения расположения сервиса в WSDL.

  • Обновлён маршаллер: НЕ создавать XML для атрибутов объектов, которые представляют элементы и/или атрибуты, являющиеся одновременно необязательными и имеющими значение None. * Обновлён factory (builder) для включения всех атрибутов. * Добавлен метод optional() в SchemaObject.

  • Обновлён wsdl для переопределения пространства имён в операции, если оно указано.

  • Исправлена проблема загрузки схемы — все схемы строятся до обработки импортов.

  • Обновлена упаковка в рамках подготовки к отправке в Fedora.

версия 0.2.7 (8-11-08):

  • Добавлено обнаружение/поддержка document/literal — обёрнутого и необёрнутого (wrapped и unwrapped).
  • Обновлён document/literal {wrapped} — корневой элемент документа (под ) устанавливается как элемент-обёртка (с правильным пространством имён).
  • Добавлена поддержка , и с maxOccurs, в результате чего демаршаллер устанавливает значения для элементов, содержащихся в неограниченной коллекции, в виде списка.
  • Обновлён client.factory (builder) — опускать дочерние элементы , так как «пользователь» действительно должен решать, какие дочерние элементы включать.
  • Исправлен алгоритм сглаживания для предотвращения повторного сглаживания типов из импортированных схем.
  • Корректировки алгоритмов сглаживания/слияния.

версия 0.2.6 (8-5-08):

  • Исправлены ENUMы, сломавшиеся во время переработки пакета xsd.
  • Исправлен тип, описанный в запросе #24.
  • Исправлены дублирующиеся имена параметров в сигнатурах методов, о чём сообщалось в запросе #30.
  • Suds лицензирован как LGPL.
  • Удалена настройка логирования в suds.init(), как предложено в патче из запроса #31. Пользователям теперь необходимо настраивать логгер самостоятельно.
  • Добавлена альтернатива Client.Factory.create(): синтаксис для полной квалификации типа в виде: {пространствоимён}имя. Например: client.factory.create('{http://blabla.com/ns}Person').

версия 0.2.5 (8-01-08):

  • Переработан пакет (XSD). Этот новый (сливающий) подход проще, надёжнее и проще в сопровождении. Также он должен обеспечить лучшую производительность, поскольку объединённая схема выполняет поиск через словарь.

    Эта переработка должна исправить текущие проблемы TypeNotFound и xs:extension/, надеюсь :-).

  • Исправлена ошибка печати dateTime.

  • Добавлено предотвращение бесконечной рекурсии в builder.Builder для типов xsd, которые содержат сами себя.

версия 0.2.4 (7-28-08):

  • Добавлена поддержка импорта WSDL: wsdl:import/
  • Добавлена поддержка преобразований типов xsd<->python (спасибо Nathan Van Gheem) для:
    • xs:date
    • xs:time
    • xs:dateTime
  • Исправлено:
    • Ошибка: Schema с указанным schemaLocation.
    • Ошибка: Пространства имён, указанные в описании сервиса, становятся действительными только после вывода client/proxy.

версия 0.2.3 (7-23-08):

  • Оптимизации.

версия 0.2.2 (7-8-08):

  • Обновлены исключения — теперь они более «стандартные» для Python за счёт использования Exception.init() для установки Exception.message, как предложено в запросе #14; обновлены привязки для генерации WebFault с передачей (p).

  • Добавлена возможность в привязках обрабатывать несколько корневых узлов в возвращаемых значениях; возвращаются как составной объект, в отличие от случая, когда возвращаются списки.

  • Исправлено soapAction — теперь заключается в кавычки.

  • Добавлена поддержка xs:all/.

  • Исправлен метод unbounded() в SchemaObject.

  • Выполнен рефакторинг схемы в новый пакет (xsd). Файлы стали слишком большими. В Query добавлен метод execute(), и suds переведён на использование execute() запроса вместо прямого использования Schema.find().
    Также перенесены кустарные методы start() из schema, а также инкремент запроса.

  • Добавлено ключевое слово inject, используемое для внедрения исходящих SOAP-сообщений и/или входящих ответных сообщений. Выполнен рефакторинг SoapClient:

    1. send() переименован в invoke()
    2. отправка сообщения отделена от invoke() и помещена в send(); Добавлен TestClient, который позволяет передавать в kwargs вызова параметры inject={'msg=', 'reply='} для внедрения сообщения и ответа.
  • Добавлен класс Namespace в sax для лучшего управления поведением пространств имён; suds переведён на импорт и использование Namespace.

  • Изменено пространство имён по умолчанию, используемое для разрешения ссылочных типов (имеющих атрибуты @base, @type) так, чтобы при отсутствии префикса использовалось пространство имён XML (узла) вместо targetNamespace.

  • Применено исправление, предложенное [email protected] в запросе #13.

  • Обновлено определение сервиса — теперь при выводе методы отображаются как ' my_method(xs:int arg0, Person arg1) ' вместо ' my_method(arg0{xs:int}, arg1{Person}) ', что больше похоже на традиционные сигнатуры методов.

  • Добавлено преобразование типов xsd/python в демаршаллер (только XBoolean); проведён рефакторинг демаршаллера с использованием класса Content, что делает API чище, добавляет симметрию между маршаллером(ами) и демаршаллером(ами), обеспечивает хороший механизм для преобразований типов на основе свойств схемы.

  • Выполнен рефакторинг маршаллера с Appenders; добавлен флаг nobuiltin в resolve() для поддержки исправления returned_type() и returnes_collection() в привязках.

  • Добавлена поддержка HTTP-кодов (202, 204).

  • Добавлен XBoolean и отображения; добавлен findattr() в TreeResolver в рамках подготовки к преобразованиям типов.

версия 0.2.1 (5-8-08):

  • Обновлена последовательность загрузки свойств схемы в schema.py: схема загружается в 3 этапа: 1) построить сырое дерево. 2) разрешить зависимости, такие как @ref и @base. 3) при необходимости продвигать внуков для сглаживания (денормализации) дерева.

    WSDL также был изменён: схема загружается только один раз и сохраняется. Коллекция схем была изменена для загрузки схем в 2 этапа: 1) создать все сырые объекты схем. 2) загрузить схемы.

    Это гарантирует, что локальные импортированные схемы могут быть найдены, даже если на них ссылаются не по порядку. Интерфейс Element в sax.py изменён: attribute() заменено на get() и set(). Также getitem и setitem могут использоваться для доступа к значениям атрибутов. Обновлены эпидоки для sax.py. И ... наконец, теперь поддерживается правильно.

  • Исправлено логирование: НЕ устанавливается уровень INFO в suds.init.logger(); обработчик устанавливается только на корневой логгер; логгер (log) перенесён из классов в модули, и для имени логгера используется name. ПРИМЕЧАНИЕ: Это означает, что для включения логирования SOAP-сообщений: > > logger('suds.serviceproxy').setLevel(logging.DEBUG) > -- вместо -- > > logger('serviceproxy').setLevel(logging.DEBUG) >

  • Добавлена поддержка узлов в схеме (xsd), что в первую очередь влияет на объекты, возвращаемые Builder.

  • Обновлён serviceproxy.py:set_proxies() — теперь логирует DEBUG вместо INFO.

  • Улучшена строка str схемы — показывает как сырой XML, так и модель (в основном для отладки).

версия-0.2 (04-28-08):

  • Содержит первую версию стиля rpc/encoded SOAP.

  • Класс Property заменён на suds.sudsobject.Object. Класс Property был разработан давно с несколько иной целью. Объект suds — это более простой (более прямой) подход, требующий меньше кода и лучше работающий в отладчике.

  • Привязка (Binding) (и кодировка) выбирается для каждого метода, что более согласовано с WSDL. В версиях <= 0.1.7 привязка выбиралась при создании ServiceProxy и использовалась для всех методов сервиса. Привязка хранилась как self.binding. Поскольку WSDL предусматривает отдельный стиль привязки и кодировку для каждой операции, Suds необходимо было изменить, чтобы работать таким же образом.* Флаги (nil_supported) и (faults) передаются в прокси службы через **kwargs. В дополнение к этим флагам был добавлен флаг (http_proxy), который передаётся объекту urllib2.Request. Поддерживаются следующие аргументы:

    • faults = Поднимать ошибки, возбуждённые сервером (по умолчанию: True), иначе возвращать кортеж из вызова метода службы в виде (http code, object).
    • nil_supported = Привязки будут устанавливать xsi:nil="true" на узлы, у которых value=None, когда этот флаг True (по умолчанию: True). В противном случае отправляется пустой узел .
    • proxy = HTTP-прокси, указываемый в запросах (по умолчанию: {}). Прокси определяется как {protocol:proxy,}
  • Поддержка HTTP-прокси (см. выше).

  • ServiceProxy рефакторинг для делегирования SoapClient. Поскольку прокси службы предоставляет веб-службы через getattr(), любой атрибут (включая методы), предоставляемый классом ServiceProxy, скрывает операции WS, определённые в WSDL. Итак, перенеся всё в SoapClient, операции WSDL больше не скрываются без необходимости использовать хитрые имена для атрибутов и методов в прокси службы. Вместо этого прокси службы имеет атрибуты client и factory (которые действительно должны иметь низкий риск коллизии имён). На данный момент методы get_instance() и get_enum() не были перенесены для сохранения обратной совместимости. Хотя предпочтительным изменением API было бы заменить:

    service = ServiceProxy('myurl') person = service.get_instance('person')

    ... на что-то вроде ...

    service = ServiceProxy('myurl') person = service.factory.get_instance('person')

    После нескольких релизов, дающих пользователям время для перехода на новый API, методы get_instance() и get_enum() могут быть удалены с уведомлением большими буквами.

  • Исправлена проблема, когда WSDL не определяет раздел , и Suds не может разрешить префиксы для пространства имён http://www.w3.org/2001/XMLSchema для обнаружения встроенных типов, таких как (xs:string).

version-0.1.7 (04-08-08):

  • Добавлен Binding.nil_supported для управления обработкой значений свойств (out) = None и пустых тегов (in).

    • service.binding.nil_supported = True — означает, что значения свойств = None маршалируются (out) как , а демаршалируется как '' и демаршалируется как None.
    • service.binding.nil_supported = False — означает, что значения свойств = None маршалируются (out) как , а и демаршалируется как None. Фактически xsi:nil игнорируется.
    • ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ: (TRUE)
  • Обновлён обработчик SAX для обработки множественных обратных вызовов character(), когда анализатор SAX «разбивает» текст. Если node.text равен None, node.text устанавливается в символы. В противном случае символы добавляются. Спасибо - [email protected]

  • Заменён специальный атрибут (text) на text для возможности использования естественных элементов с именем «text»

  • Добавлена поддержка Unicode:

    • Добавлен unicode во все классы с str
    • Все вызовы str() заменены на unicode().
    • str() возвращает результат unicode, закодированный в UTF-8.
  • Вывод XML кодируется в UTF-8, что соответствует HTTP-заголовку и поддерживает Unicode.

  • SchemaCollection изменён для предоставления методов builtin() и custom(). Для поддержки этого в Element в sax.py был добавлен findPrefixes(). Это лучший подход, поскольку WSDL и схемы могут содержать много префиксов для http://www.w3.org/2001/XMLSchema. Протестировано с привязками doc/lit и rpc/lit

  • Рефакторинг пакетов привязок с document & rpc на literal & encoded

  • Содержит завершение полной поддержки пространств имён:

    • Префиксы пространств имён больше не удаляются из значений атрибутов, которые ссылаются на типы, определённые в WSDL.
    • Схемы, импортированные с помощью , должны правильно обрабатывать отображение и переотображение пространств имён и префиксов по мере необходимости.
    • Все типы разрешаются с помощью полностью квалифицированных (с пространствами имён) поисков.
    • Schema.get_type() поддерживает пути с префиксами пространств имён и без них. Если префикс не указан, тип сопоставляется с использованием целевого пространства имён схемы.
  • Property сохраняет имена атрибутов (ключи) в порядке добавления. Это также означает, что get_item() и get_names() возвращают упорядоченные значения. (Хотя я подозреваю, что упорядочивание действительно должно выполняться в маршалировщике с использованием порядка, указанного в WSDL/схеме)

Крупный рефакторинг schema.py. Основная цель — подготовка к поиску типов, полностью квалифицированных по пространству имён. После завершения префиксы на значениях атрибутов больше не будут удаляться (очищаться). Сводка изменений: 1) Классы наложения SchemaProperty создаются в init вместо создания по требованию. 2) Импорт схем выполняется новым классом Import вместо Schema. 3) Schema загружает свойства верхнего уровня с помощью фабрики. 4) Все списки /children/ SchemaProperty сортируются по cmp в производных классах SchemaProperty. Это гарантирует, что типы с одинаковыми именами разрешаются в следующем порядке: (Import, Complex, Simple, Element). 5) Все списки /children/ SchemaProperty создаются в init вместо создания по требованию. 6) Создан SchemaGroup и обновлён класс WSDL. Это лучше, чем агрегирование узлов в WSDL, что разрывает связь с родительским элементом WSDL, имеющим отображение префиксов пространств имён. 7) Элемент обрабатывается правильно: выполняется как переотображение пространства имён, так и переотображение префикса targetNamespace импортированной схемы и связанного с ним отображения префикса. Например: SCHEMA-A имеет префикс (tns), отображённый как xmlns:tns=http://nsA, и targetNamespace=http://nsA. SCHEMA-B импортирует схему A и имеет префикс (abc), отображённый как xmlns:abc=http://nsABC. SCHEMA-B импортирует A как <import namespace=http://nsB xxx schemaLocation=http://nsA/schema-a.xsd>. Итак, поскольку SCHEMA-B будет ссылаться на элементы SCHEMA-A с префиксом (abc), например abc:something, targetNamespace SCHEMA-A должен быть обновлён как http://nsABC, и все элементы с type=tns:something должны быть обновлены до type=abc:something, чтобы они могли быть разрешены.

  • Исправлена проблема демаршализации, когда узлы добавлялись в свойство как (text, value). Это было введено при рефакторинге привязок.

  • Исправлены различные проблемы печати Property.

Примечания:

root@kitploit:~
Благодарность Jesper Noehr из Coniuro за большую часть привязки rpc/literal и за активное сотрудничество в #suds.

version-0.1.6 (03-06-08):

  • Обеспечивает правильную обработку WSDL, содержащих разделы схемы с импортом схем xsd: <import namespace="" schemaLocation=""?>. Указанные схемы импортируются, если указан schemaLocation.
  • Возбуждает исключения для кодов состояния HTTP, которые ещё не обработаны.

version-0.1.5( 02-21-08 ):

  • Обеспечивает лучшее логирование в модулях: получение логгера по иерархическим именам.
  • Рефакторинг по мере необходимости для настоящей поддержки других привязок.
  • Добавлен модуль sax, заменяющий ElementTree. Он быстрее, проще и правильно обрабатывает пространства имён (префиксы).

version-0.1.4 (12-21-07):

  • Обеспечивает возможность параметров методов службы быть None.
  • Добавлена правильная обработка параметров методов, являющихся списками объектов свойств.

version-0.1.3 (12-19-07):

  • Исправлена проблема, когда узлы, помеченные как коллекция (maxOccurs > 1), не создавали объекты свойств с value=[] при отображении с < 2 значениями DocumentReader. Вызвано отсутствием преобразования bindings.Document.ReplyHint.stripns() (которое использует DocumentReader.stripns()) в DocumentReader.stripn(), который теперь возвращает кортеж (ns,tag) начиная с версии 0.1.2.

version-0.1.2 (12-18-07):

Этот релиз содержит обновление для добавления свойств: * поддержка метаданных * переопределения: getitem, setitem, contans * изменения property(reader|writer) для использования property.metadata для обработки пространств имён XML-документов. * исправлены зависимости в setup.py.

version-0.1.1 (12-17-07):

Этот релиз знаменует первый релиз, размещённый на fedora hosted.

Скачать инструмент
  • Обновлена загрузка схемы и свойств схемы (глубокая рекурсия остановлена); Изменены импортированные схемы: они больше не копируют импортированные схемы, вместо этого импорт проксирует запросы на поиск; Добавлен класс ServiceDefinition, обеспечивающий лучшую инспекцию сервиса; также предоставляет отображение пространств имён и показывает типы; упрощён API свойств схемы; добавлена поддержка xs:any и xs:anyType; исправлены некоторые проблемы поиска в схеме; незначительно реорганизованы классы привязок; добавлено много отладочного логирования (возможно, придётся закомментировать часть для производительности — некоторые аргументы дорогие).

  • Добавлен suds object.Property; свойство — это специальный объект, содержащий атрибут (value), возвращаемый Builder (factory) для типов схем без дочерних элементов, таких как: и ; Builder, Marshaller и Resolver обновлены для обработки Properties; Resolver, Schema также обновлены для обработки поиска атрибутов (этого не хватало).

  • Добавлена основа для пользовательских SOAP-заголовков.

  • Исправлен elementFormDefault согласно запросу #7.

  • Удалены неиспользуемые kwargs из привязок; кэшированы привязки в wsdl; выполнен перевод legacy ServiceProxy для делегирования {новому} API клиента; удалено ключевое слово nil_supported в пользу естественной обработки через атрибут 'nillable' на внутри схем.

  • Добавлена поддержка флагов атрибутов (nillable и form).

  • Добавлен класс Proxy (API второго поколения).

  • Добавлены функции доступа/преобразования, чтобы пользователю не приходилось обращаться к атрибутам x. Также добавлены todict() и get_items() для удобного преобразования в словарь и итерации.

  • Поиск элементов верхнего уровня по @ref выполняется до более глубокого поиска.

  • Добавлен derived() в SchemaObject. Это необходимо для того, чтобы все производные типы (классы wsdl) квалифицировались посредством xsi:type без необходимости указывать xsi:type для всех пользовательских типов, как это делалось в ранних версиях suds. Обновлён литеральный маршаллер: он теперь добавляет xsi:type только тогда, когда тип действительно нужно указать.

  • Изменено продвижение ns в sax для предотвращения продвижения ns к родителю, когда у родителя уже есть этот префикс.

  • Изменён returned_type() в привязках — теперь возвращается (неразрешённый) Element.

  • Для поддержки новых функций и исправления сообщённых ошибок я выполняю рефакторинг и, надеюсь, эволюцию компонентов Suds, которые обеспечивают преобразования ввода/вывода:

    • Builder (преобразует: XSD-объекты => python-объекты)
    • Marshaller (преобразует: python-объекты => XML/SOAP)
    • Unmarshaller (преобразует: soap/xml => python-объекты)

    Эта эволюция обеспечит лучшую симметрию между этими компонентами следующим образом:

    Builder и Unmarshaller будут создавать python-объекты (подкласс sudsobject.Object) со следующими атрибутами:

    • metadata.type = XSD-тип (SchemaObject)
    • имя подкласса ( class.name ) = имя типа схемы.

    и

    Marshaller(ы), потребляя python-объекты, созданные Builder или Unmarshaller, будут использовать эту стандартную информацию для создания соответствующего вывода (XML/SOAP).

    Код версии 0.2.1 в основном ведёт себя так, но ... не совсем. Кроме того, реализации имеют некоторую избыточность.

    При выполнении этой работы имело смысл вынести общую функциональность поиска типа схемы, используемую классами Builder, Marshaller и Unmarshaller, в иерархию классов «Resolver». Это снижает сложность и избыточность классов Builder, Marshaller и Unmarshaller и позволяет улучшить модульность. После завершения этого рефакторинга разница между литеральным и кодированным Marshaller стала очень маленькой. Учитывая, что объём кода в пакетах bindings.literal и bindings.encoded был небольшим (и становился ещё меньше), и в интересах компактности кодовой базы Suds, я перенёс все классы маршаллинга в модуль bindings.marshaller. Все подпакеты bindings.XX будут удалены.

    Чистый эффект:

    Все основные компоненты Suds:

    • client (бывший service proxy)
    • wsdl
      • schema (пакет xsd)
      • resolvers
    • output (маршаллинг)
    • builder
    • input (демаршаллинг)

    Теперь обладают лучшей:

    • модульностью
    • симметрией в отношении метаданных Object.
    • повторным использованием кода (< 1% дублирования кода — надеюсь)
    • слабой связанностью

    ... и лучше обеспечивают следующие функции/исправления ошибок:

    • (исправление) Правильный уровень квалификации XML-элементов на основе атрибута . Это гарантирует, что когда elementFormDefault="qualified", Suds будет включать правильное пространство имён для корневых элементов как для литеральных, так и для кодированных привязок. Чтобы это работало должным образом, литеральный маршаллер (как и кодированный) должен был быть осведомлён о типе схемы. Если бы я добавил тот же поиск типа схемы, что и в кодированном маршаллере, вместо описанного выше рефакторинга, два класса были бы почти полной копией друг друга :-(
  • Builder и unmarshaller использовали Schema.find() для разрешения типов схем. Они строили путь вида "person.name.first" для разрешения типов в соответствующем контексте. Поскольку Schema.find() не имел состояния, он разрешал промежуточные элементы пути при каждом вызове. Новые классы resolver имеют состояние и разрешают дочерние типы гораздо эффективнее.

  • Предотвращение коллизий имён в sudsobject.Object, например, с методом items(). Я перенёс все методы (включая методы класса) в фабричный класс Factory, который включается в класс Object как атрибут класса ( factory ). Теперь, когда все атрибуты имеют встроенные имена Python, у нас больше не должно быть коллизий имён. Это, конечно, предполагает, что ни одно имя сущности wsdl/schema не будет иметь имя в соответствии с соглашением о встроенных именах Python, но где-то нужно провести черту :-)