Вызов методов SOAP с точками в имени с использованием Python / Suds - PullRequest
1 голос
/ 07 января 2011

Попытка сделать SOAP-вызов с использованием Python Suds. Он нормально импортирует WSDL, и клиент, сгенерированный им, выглядит правильно, но я не могу получить доступ к методам.

Документация Suds описывает вызовы методов следующим образом:

client.service.Company.GetQueue ()

Но все, что я получаю с каждой вариацией этого:

suds.MethodNotFound: метод не найденный: 'OmnitureWebService.OmnitureWebServicePort.Company'

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

> obj._ServiceSelector__client =  Suds (
> https://fedorahosted.org/suds/ ) 
> version: 0.4 GA  build: R699-20100913
> 
> Service ( OmnitureWebService )
> tns="http://www.omniture.com/"   
> Prefixes (2)
>       ns0 = "http://schemas.xmlsoap.org/soap/encoding/"
>       ns1 = "http://www.omniture.com/"    Ports (1):
>       (OmnitureWebServicePort)
>          Methods (173):
>             CodeManager.DeleteCodeArchive(xs:int
> archive_id, )
>             CodeManager.GenerateCode(xs:string
> char_set, xs:string code_type, xs:int
> cookie_domain_periods, xs:string
> currency_code, xs:string rsid, xs:int
> secure, )
>             CodeManager.GetCodeArchives(int_array
> archive_id_list, xs:string
> binary_encoding, xs:int
> populate_code_items, )
>             CodeManager.SaveCodeArchive(xs:string
> archive_description, xs:int
> archive_id, xs:string archive_name,
> code_items code, )
>             Company.CancelQueueItem(xs:int qid, )
>             Company.DownloadProduct(productType
> productType, )
>             Company.GetEndpoint(xs:string company,
> )
>             Company.GetQueue()
>             Company.GetReportSuites(string_array
> rs_types, xs:string sp, )
>             Company.GetTokenCount()
>             Company.GetTokenUsage()
>             Company.GetTrackingServer(xs:string
> rsid, )
>             Company.ResetTokenCount(xs:string
> auth_key, )

Ответы [ 2 ]

4 голосов
/ 17 декабря 2011

KFED это правильно, это точки, которые делают это.но я не хочу изменять мой WSDL.

Однако я нашел этот обходной путь:
Используйте getattr, чтобы связать имя метода со строкой, получить дескриптор метода, затем вызвать его:1004 *

Company_GetTokenCount = getattr(client.service, 'Company.GetTokenCount')
Company_GetTokenCount()

https://fedorahosted.org/suds/ticket/253
Я: Suds версия 0.4 GA, сборка: R699-20100913

0 голосов
/ 07 января 2011

Aha. Похоже, что "." в пространстве имен, которое является правильным в XML, но имеет проблемы с Suds. Я пытался удалить, но Suds также кеширует WSDL. Вот как можно сбежать:

https://fedorahosted.org/suds/wiki/TipsAndTricks

А ниже на странице показано, как отключить кеширование.

...