pyarweb
pyarweb copied to clipboard
Avisar a la lista al crear un evento
Estaría bueno que cada vez que se crea un evento, el sitio mande un mail a la lista de PyAr para informar que ese evento:
- va a suceder
- que está por suceder (recordatorio cercano a la fecha)
como manejan los settings de prod y dev? si ocupo la funcion send_mail de django anda? hay que separar los settings primero?
¿[email protected] puede enviar a la lista [email protected] @gilgamezh
Lo de avisar cuando está por suceder requiere de Celery, por lo que puede ser más complicado (no está Celery andando en producción). En algún sprint, hack-day o algo así se puede agregar eso.
Lo otro es trivial.
Hola gente, acá estoy por primera vez en un Python Sprint Day ( en Córdoba) y me voy a encargar de este issue :)
Bueno gente ya está implementada la función para enviar un email cuando se crea un evento en la db.
Durante el sprint del otro día @cmdelatorre me orientó que para testear que el email es enviado haga un mock de mi función (la que envía el email).
Estuve investigando acá y no termino de entender como hacer le mocking porque como la función no es una instancia de ninguno de los modelos de la app events y además es ejecutada en forma asíncrona cuando recibe la señal de post_save no sé cómo hacer referencia a la instacia que necesita ser mockeada .
Alguna idea? Espero que haberme explicado bien...
Les dejo la función por las dudas:
` @receiver(post_save, sender=Event) def post_event_creation(sender, instance, created, **kwargs): """Send an E-mail to the mailing list after an event is created. """ if created: email_subject = 'Nuevo evento: ' + instance.name context = { 'title': instance.name, 'description': instance.description, 'username': instance.owner.username, 'place': instance.place, 'address': instance.address, 'start_at': instance.start_at.strftime('%d/%M/%y') if instance.start_at else None, 'end_at': instance.end_at.strftime('%d/%M/%y') if instance.end_at else None, } email_body = loader.get_template('events/email/event_notification_email.txt').render(context) email_from = settings.EVENT_CREATED_NOTIFICATION_EMAIL_FROM email_to = settings.EVENT_CREATED_NOTIFICATION_EMAIL_TO
send_mail(email_subject, email_body, email_from, [email_to], fail_silently=False,)
`
Gracias, saludos!
@perretcantonim para testear el envío de mail desde Django mirá esto: https://docs.djangoproject.com/en/1.9/topics/testing/tools/#email-services
Para otra alternativa (con mocks) podés intentar algo en la línea de esto: https://www.vinta.com.br/blog/2017/dont-forget-stamps-testing-email-content-django/
Finalmente, como nota al margen, en vez de copy-paste de la función (como hiciste en tu mensaje) sería mejor que subas tu branch (a tu propio fork del proyecto) y pases un link al archivo en cuestión. Entonces, además de la propia función, uno puede ver qué otras cositas hiciste ;-)
Abrazo