Как вывести то, что SUD генерирует / получает? - PullRequest
46 голосов
/ 13 декабря 2010

У меня есть следующий код:

from suds.client import Client
import logging

logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.client').setLevel(logging.DEBUG)
logging.getLogger('suds.transport').setLevel(logging.DEBUG)
logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG)
logging.getLogger('suds.wsdl').setLevel(logging.DEBUG)

SB_PRIVATE_ACCESS = {"PATH":"https://thisurl.com:443/services/",}

client = Client(SB_PRIVATE_ACCESS['PATH'])
print client

, но я получаю 500 ошибок.Я пытаюсь отправить то, что XML генерируется и принимается через SUD, разработчику wsdl, но я не могу понять, как его вывести?Я искал в документации SUD, но не могу найти его: / Кто-нибудь знает, как вывести необработанный XML, который отправляется и принимается?

Ответы [ 7 ]

70 голосов
/ 20 мая 2011

SUDS предоставляет несколько удобных способов сделать это:

 client.last_sent()
 client.last_received()

Это должно предоставить вам то, что вам нужно. Я использую их для регистрации ошибок. API doc для класса Client должен содержать любую необходимую дополнительную информацию.

19 голосов
/ 05 июня 2014

Вы можете использовать MessagePlugin для этого (это будет работать на более новых форках Jurko, где были удалены last_sent и last_received)

from suds.plugin import MessagePlugin

class LogPlugin(MessagePlugin):
  def sending(self, context):
    print(str(context.envelope))
  def received(self, context):
    print(str(context.reply))

client = Client("http://localhost/wsdl.wsdl", plugins=[LogPlugin()])
13 голосов
/ 17 мая 2011

Suds поддерживает внутреннюю регистрацию, как вы делали.

Я устанавливаю информационные уровни, как вы:

logging.getLogger('suds.client').setLevel(logging.DEBUG)
logging.getLogger('suds.transport').setLevel(logging.DEBUG) # MUST BE THIS?
logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG)
logging.getLogger('suds.wsdl').setLevel(logging.DEBUG)
logging.getLogger('suds.resolver').setLevel(logging.DEBUG)
logging.getLogger('suds.xsd.query').setLevel(logging.DEBUG)
logging.getLogger('suds.xsd.basic').setLevel(logging.DEBUG)
logging.getLogger('suds.binding.marshaller').setLevel(logging.DEBUG)

И иногда мне также нужно переопределить уровень ведения журнала корневого регистратора, в зависимости от среды, используемой в вызовах Suds (Django, Plone). Если корневой регистратор имеет более высокий порог регистрации, сообщения журнала могут никогда не появиться (не уверен, как должны идти иерархии регистратора). Ниже приведен пример переопределения:

def enableDebugLog(self):
    """ Enable context.plone_log() output from Python scripts """
    import sys, logging
    logger = logging.getLogger()        
    logger.root.setLevel(logging.DEBUG)
    logger.root.addHandler(logging.StreamHandler(sys.stdout))
6 голосов
/ 12 января 2014

Чтобы получить только сгенерированное сообщение, это также работает:

from suds.client import Client
import sys

SB_PRIVATE_ACCESS = {"PATH":"https://thisurl.com:443/services/",}

client = Client(SB_PRIVATE_ACCESS['PATH'])

client.set_options(nosend=True)

resp = ...<invoke client here>...

sys.stdout.buffer.write(resp.envelope)
2 голосов
/ 08 июня 2011

попробуйте изменить

logging.basicConfig(level=logging.INFO)

на

logging.basicConfig(filename="/tmp/suds.log", level=logging.DEBUG)
0 голосов
/ 21 мая 2018

Я столкнулся с этой проблемой, работая с API bingads, стоит отметить, что порядок важен. Мне пришлось импортировать журналы, затем импортировать suds, начать регистрацию, затем импортировать bingads, любой другой порядок, и ничего не выводилось в журналах от suds.

Так что проверьте ваш порядок импорта и переместите свои отчеты, и это может решить вашу проблему.

0 голосов
/ 08 января 2016

Если вы хотите уменьшить регистрацию с помощью jurko-suds

 logging.basicConfig(level=logging.INFO)

    logging.getLogger('suds.client').setLevel(logging.INFO)
    logging.getLogger('suds.transport').setLevel(logging.INFO) 
    logging.getLogger('suds.xsd.schema').setLevel(logging.INFO)
    logging.getLogger('suds.wsdl').setLevel(logging.INFO)
    logging.getLogger('suds.resolver').setLevel(logging.INFO)
    logging.getLogger('suds.xsd.query').setLevel(logging.INFO)
    logging.getLogger('suds.xsd.sxbasic').setLevel(logging.INFO)
    logging.getLogger('suds.xsd.sxbase').setLevel(logging.INFO)
    logging.getLogger('suds.metrics').setLevel(logging.INFO)
    logging.getLogger('suds.binding.marshaller').setLevel(logging.INFO)
...