python xml soap suds

python - ¿Cómo puedo generar lo que está generando/recibiendo SUD?



xml soap (7)

Me he topado con este problema trabajando con la API de bingads, vale la pena señalar que el orden es importante. Tuve que importar el registro y luego importar las suds iniciar el registro y luego importar bingads, cualquier otro orden y nada salió en los registros de espuma.

Por lo tanto, verifique su orden de importación y mueva sus declaraciones de registro para que pueda solucionar su problema.

Tengo el siguiente código:

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

pero estoy recibiendo 500 errores. Estoy intentando enviar lo que XML se está generando y recibiendo a través de los SUD, al desarrollador de wsdl, pero no sé cómo dar salida a él. He estado buscando en la documentación de los SUD, pero parece que no puedo encontrarlo: / ¿Alguien sabe cómo generar el xml sin procesar que se envía y se recibe?


Para obtener solo el mensaje generado esto también funciona:

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)


Puede usar el MessagePlugin para hacer esto (esto funcionará en el tenedor Jurko más nuevo donde last_sent y last_received han sido eliminados)

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


SUDS proporciona algunos métodos de conveniencia para hacer justamente eso:

client.last_sent() client.last_received()

Estos deberían proporcionarle lo que necesita. Los uso para el registro de errores. El documento de API para la clase Cliente debe tener toda la información adicional que necesita.


Si quieres reducir el registro por 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)


Suds admite el registro interno, como lo ha estado haciendo.

Estoy configurando niveles de información como tú:

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)

Y a veces también necesito anular el nivel de registro del registrador de raíz, dependiendo del marco que se utiliza en llamadas Suds (Django, Plone). Si el registrador de raíz tiene un umbral de registro más alto, es posible que nunca aparezcan los mensajes de registro (no estoy seguro de cómo deberían ir las jerarquías del registrador). A continuación se muestra un ejemplo de cómo anular:

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


intente cambiar

logging.basicConfig(level=logging.INFO)

a

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