Как запретить suds извлекать xml.xsd по сети? - PullRequest
2 голосов
/ 21 сентября 2011

Я использую библиотеку suds в Python, которая пытается извлечь xml.xsd по сети.К сожалению, сервер w3c забит из-за других программ, таких как моя, и обычно не может обслуживать документ.

Как перехватить выборку URL-адреса suds, чтобы всегда получать локальную копию этого файла, даже не загружая егов долгоживущий кеш успешно первый раз?

Ответы [ 2 ]

4 голосов
/ 22 марта 2012

Проблема с извлечением xml.xsd связана с пространством имен "http://www.w3.org/XML/1998/namespace"", которое требуется для большинства WSDL. Это пространство имен по умолчанию отображается на http://www.w3.org/2001/xml.xsd.

Вы можете переопределить привязку местоположения для этого пространства имен, чтобы указывать на локальный файл:

from suds.xsd.sxbasic import Import

file_url = 'file://<path to xml.xsd>'
Import.bind('http://www.w3.org/XML/1998/namespace', file_url)
0 голосов
/ 21 сентября 2011

Библиотека suds имеет класс suds.store.DocumentStore, который содержит связанный XML в словаре uri -> text.Это может быть исправлено следующим образом:

suds.store.DocumentStore.store['www.w3.org/2001/xml.xsd'] = \
    file('xml.xsd', 'r').read()

К сожалению, это не работает, потому что DocumentStore учитывает только запросы для протокола suds://.Спустя одно исправление обезьяны, и вы в деле.

Можно также переопределить экземпляр Cache(), переданный в ваши suds Client(), но кеш имеет дело с числовыми идентификаторами, основанными на hash() Pythonи не получает URL-адреса своего содержимого.

...