2013-09-24 3 views
0

Я совершенно потерян в том, что должно быть легкой задачей.SUDS client.service. issue

Я пытаюсь использовать Python с SUDS, чтобы захватить URL-адрес WSDL, создать клиентские объекты, изменить некоторую информацию, а затем опубликовать резервную копию WSDL (или где-либо когда-либо мне рассказывать о ее публикации).

я получаю следующее сообщение об ошибке:

Traceback (most recent call last): 
    File "./test.py", line 47, in <module> 
    email_sent = client.service.sendEmail(From, SenderContext, Email) 
NameError: name 'client' is not defined 

Если я удалить «Попробуйте:» раздел в коде и вставьте код приходят печати для печати объектов, все работает просто отлично. Он захватывает информацию и делает изменения, которые я хочу.

Что я не понимаю, так это то, что объект-клиент создан, и я пытаюсь отправить информацию обратно, но не могу. У кого-нибудь есть опыт работы с XML и Python?

import sys 

import logging 
import traceback as tb 
import suds.metrics as metrics 
import unittest 
from suds import null, WebFault 
from suds.client import Client 

def sendTestMail(): 
    url = 'wsdl url at my company' 
    client = Client(url) 

    SenderContext = client.factory.create('senderContext') 
    SenderContext.registeredSenderId = 'Endurance' 
    SenderContext.mailType = 'TRANSACTIONAL_OTHER' 
    SenderContext.subSenderId = 12345 

    From = client.factory.create('emailAddressBean') 
    From.address = '[email protected]' 
    From.valid = 'TRUE' 

    Email = client.factory.create('email') 
    Email.recipients = '[email protected]' 
    Email.ccRecipients = '' 
    Email.bccRecipients = '' 
    Email.agencyId = '' 
    Email.content = 'This is a test of sending' 
    Email.contentType = 'text/plain' 
    Email.description = '' 
    #Email.from = From 
    Email.fromName = 'An Employee' 
    Email.subject = 'This is a test' 
    Email.mrrId = '' 
    Email.templateId = '' 

try: 
    email_sent = client.service.sendEmail(From, SenderContext, Email) 
except WebFault, e: 
    print e 

if __name__ == '__main__': 
    errors = 0 
    sendTestMail() 
    print '\nFinished: errors=%d' % errors 

ответ

1

Вы определяете «клиент» в классе sendTestMail(), но затем использовать более низкий уровень отступ в вашей попытке/за исключением заявления. Поэтому на данный момент клиент не находится в пределах области действия. Любой отступ, который ваш блок try/except находится в пределах области sendTestMail(), или объявить «клиент» глобально.