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//''