pyarweb icon indicating copy to clipboard operation
pyarweb copied to clipboard

Avisar a la lista al crear un evento

Open humitos opened this issue 10 years ago • 6 comments

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)

humitos avatar May 23 '15 01:05 humitos

como manejan los settings de prod y dev? si ocupo la funcion send_mail de django anda? hay que separar los settings primero?

diegoduncan21 avatar Jun 09 '15 01:06 diegoduncan21

¿[email protected] puede enviar a la lista [email protected] @gilgamezh

jcarizza avatar Mar 26 '16 23:03 jcarizza

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.

cmdelatorre avatar Mar 26 '17 21:03 cmdelatorre

Hola gente, acá estoy por primera vez en un Python Sprint Day ( en Córdoba) y me voy a encargar de este issue :)

perretcantonim avatar Aug 04 '18 14:08 perretcantonim

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 avatar Aug 06 '18 23:08 perretcantonim

@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

cmdelatorre avatar Aug 15 '18 12:08 cmdelatorre