2014-10-16 14 views
8

Sono stato sfornare attraverso lo sviluppo di software di recente e hanno avuto un certo successo piegando il sedano alla mia volontà.Difficoltà con sedano: oggetto funzione non ha alcuna proprietà 'ritardo'

L'ho usato con successo per inviare e-mail, e ho appena provato ad usare quasi esattamente lo stesso codice (dopo aver riavviato tutti i processi ecc.) Per inviare sms tramite Twilio.

Tuttavia continuo a ricevere il seguente problema:

File "/Users/Rob/Dropbox/Python/secTrial/views.py", line 115, in send_sms 
send_sms.delay(recipients, form.text.data) 
AttributeError: 'function' object has no attribute 'delay' 

Il mio codice è il seguente:

@celery.task 
def send_email(subject, sender, recipients, text_body): 
    msg = Message(subject, sender=sender) 
    for email in recipients: 
     msg.add_recipient(email) 
    msg.body = text_body 
    mail.send(msg) 

@celery.task 
def send_sms(recipients, text_body): 
    for number in recipients: 
     print number 
     num = '+61' + str(number) 
     print num 
     msg = text_body + 'this message to' + num 
     client.messages.create(to=num, from_="+14804054823", body=msg) 

send_email.delay quando viene chiamato dal mio views.py funziona perfettamente, ma non riesce send_sms.delay ogni volta con l'errore sopra.

Qualsiasi aiuto per la risoluzione dei problemi è apprezzato.

- Come richiesto: funzione decorata

@app.route('/send_mail', methods=['GET', 'POST']) 
@roles_accepted('Admin') 
def send_mail(): 
    form = SendMailForm(request.form) 
    if request.method == 'POST': 
     if form.validate_on_submit(): 
      emails = db.session.query(User.email).all() 
      list_emails = list(zip(*emails)[0]) 
      send_email.delay('Subject', '[email protected]', list_emails, form.text.data) 
    return render_template('send_generic.html', form=form) 

@app.route('/send_sms', methods=['GET', 'POST']) 
@roles_accepted('Admin') 
def send_sms(): 
    form = SendMailForm(request.form) 
    if request.method == 'POST': 
     if form.validate_on_submit(): 
      recipients = db.session.query(User.mobile).all() 
      list_recipients = filter(None, list(zip(*recipients)[0])) 
      send_sms.delay(list_recipients, form.text.data) 
    return render_template('send_generic.html', form=form, send_sms=send_sms) 

mio Send_SMS sedano sta rivelando come un compito registrato:

e per config Sto semplicemente usando l'ospite: RabbitMQ

CELERY_BROKER_URL = 'amqp://[email protected]//' 
CELERY_RESULT_BACKEND = 'amqp://[email protected]//' 
+0

puoi pubblicare la tua configurazione e le tue visualizzazioni di sedano? – ChillarAnand

risposta

12

il nome della vista send_sms conflitti con il nome dell'attività sedano. Il nome send_sms fa riferimento alla vista, non all'attività, se utilizzata nel modulo che contiene la vista.

Utilizzare un nome diverso per evitare la sovrascrittura.

+0

Non posso credere di non aver visto che c'era un problema lì. Grazie mille, guarito. – rob123

Problemi correlati