Подтвердить что ты не робот

Как я могу выводить, какие SUDs генерируют/получают?

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

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-адрес, который отправляется и принимается?

4b9b3361

Ответ 1

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

 client.last_sent()
 client.last_received()

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

Ответ 2

Вы можете использовать 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()])

Ответ 3

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))

Ответ 4

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

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)

Ответ 5

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

logging.basicConfig(level=logging.INFO)

to

logging.basicConfig(filename="/tmp/suds.log", level=logging.DEBUG)

Ответ 6

Если вы хотите уменьшить регистрацию с помощью 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)