web-dev-qa-db-fra.com

Comment puis-je sortir ce que les SUD génèrent/reçoivent?

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? 

46
alfredo

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.

70
olly_uk

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

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))
13
Mikko Ohtamaa

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)
6
Fernando César

essayez de changer

logging.basicConfig(level=logging.INFO)

à 

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

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.

0
Oly

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)
0
Alex Punnen