J'ai le code suivant:
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
mais je reçois 500 erreurs. J'essaie d'envoyer au développeur WSDL le code XML généré et reçu par le biais de SUD, mais je ne vois pas comment le générer. J'ai consulté la documentation de SUD, mais je n'arrive pas à le trouver:/Est-ce que quelqu'un sait comment sortir le fichier xml brut envoyé et reçu?
SUDS fournit des méthodes pratiques pour y parvenir:
client.last_sent()
client.last_received()
Ceux-ci devraient vous fournir ce dont vous avez besoin. Je les utilise pour la journalisation des erreurs . La documentation API pour la classe Client doit contenir les informations supplémentaires dont vous avez besoin.
Vous pouvez utiliser MessagePlugin pour faire cela (cela fonctionnera sur le nouveau fork de Jurko où last_sent et last_received ont été supprimés)
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 prend en charge la journalisation interne, comme vous l'avez fait auparavant.
Je suis en train de régler les niveaux d'information comme vous:
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)
Et j’ai parfois aussi besoin de redéfinir le niveau de journalisation de l’enregistreur racine, en fonction de la structure utilisée dans les appels Suds (Django, Plone). Si le consignateur racine a un seuil de consignation plus élevé, il est possible que les messages de journalisation ne s'affichent jamais (vous ne savez pas exactement comment les hiérarchies de consignateur doivent être classées). Voici un exemple comment remplacer:
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))
Pour obtenir uniquement le message généré, cela fonctionne également:
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)
essayez de changer
logging.basicConfig(level=logging.INFO)
à
logging.basicConfig(filename="/tmp/suds.log", level=logging.DEBUG)
J'ai rencontré ce problème en travaillant avec l'API bingads, il convient de noter que l'ordre est important. Je devais importer la journalisation, puis importer l'importation, puis lancer la journalisation, puis importer les bingads, toute autre commande et rien n'était affiché dans les journaux à partir de sud.
Vérifiez donc votre ordre d'importation et déplacez vos relevés de consignation afin que votre problème puisse être résolu.
Si vous voulez réduire la journalisation de 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)