python python-2.7 flask celery flask-security

python - Dificultad con el apio: objeto de función no tiene ''retraso'' de propiedad



python-2.7 flask (1)

El nombre de vista send_sms entra en conflicto con el nombre de la tarea de apio. El nombre send_sms referencia a la vista, no a la tarea, cuando se usa en el módulo que contiene la vista.

Use un nombre diferente para evitar la sobrescritura.

He estado revolviendo el desarrollo de software recientemente y he tenido cierto éxito doblando el apio a mi voluntad.

Lo he utilizado con éxito para enviar correos electrónicos, y acabo de tratar de usar casi exactamente el mismo código (después de reiniciar todos los procesos, etc.) para enviar sms a través de Twilio.

Sin embargo, sigo recibiendo el siguiente 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''

Mi código es el siguiente:

@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 cuando se llama desde mi views.py funciona perfectamente, sin embargo send_sms.delay falla cada vez que se produce el error anterior.

Cualquier ayuda para solucionar este problema es apreciada.

- Según lo solicitado:

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

Mi función send_sms apio decorado se muestra como una tarea registrada:

(env)RP:secTrial Rob$ celery inspect registered -> [email protected]: OK * app.send_email * app.send_security_email * app.send_sms

y para config solo estoy usando el invitado: rabbitmq

CELERY_BROKER_URL = ''amqp://guest@localhost//'' CELERY_RESULT_BACKEND = ''amqp://guest@localhost//''