2014-10-16 6 views
8

Ich habe in letzter Zeit durch die Software-Entwicklung aufgewühlt und hatte etwas Erfolg Biegen Sellerie zu meinem Willen.Schwierigkeit mit Sellerie: Funktion Objekt hat keine Eigenschaft "Verzögerung"

Ich habe es erfolgreich verwendet, um E-Mails zu senden, und habe gerade versucht, fast den gleichen Code (nach dem Neustart aller Prozesse usw.) zu verwenden, um SMS über Twilio zu senden.

Jedoch habe ich folgendes Problem erhalte:

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' 

Mein Code ist wie folgt:

@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 wenn von meinem views.py genannt funktioniert perfekt, aber send_sms.delay versagt jedes Mal mit dem obigen Fehler.

Jede Hilfe bei der Fehlersuche ist willkommen.

- Wie gewünscht:

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

Meine send_sms Sellerie dekoriert Funktion ist als registriert Aufgabe zeigt sich:

und für Config Ich verwende einfach den Gast: rabbitmq

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

können Sie Ihre Sellerie-Konfiguration und Ansichten posten? – ChillarAnand

Antwort

12

Der View-Name send_sms steht in Konflikt mit dem Sellerie-Task-Namen. Der Name send_sms verweist auf die Ansicht, nicht auf die Aufgabe, wenn sie in dem Modul verwendet wird, das die Ansicht enthält.

Verwenden Sie einen anderen Namen, um das Überschreiben zu vermeiden.

+0

Ich kann nicht glauben, dass ich nicht gesehen habe, dass dort ein Problem war. Vielen Dank, geheilt. – rob123