From 3d25d62e0d2d46d0ac00668c05495308fe474331 Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Tue, 7 Oct 2014 14:37:03 +0400 Subject: send_email_alerts: added try/except to each user --- askbot/management/commands/send_email_alerts.py | 164 ++++++++++++------------ 1 file changed, 81 insertions(+), 83 deletions(-) diff --git a/askbot/management/commands/send_email_alerts.py b/askbot/management/commands/send_email_alerts.py index b7b594ef..39f976c4 100644 --- a/askbot/management/commands/send_email_alerts.py +++ b/askbot/management/commands/send_email_alerts.py @@ -82,13 +82,14 @@ def format_action_count(string, number, output): class Command(NoArgsCommand): def handle_noargs(self, **options): if askbot_settings.ENABLE_EMAIL_ALERTS: - try: + activate_language(django_settings.LANGUAGE_CODE) + template = get_template('email/delayed_email_alert.html') + for user in User.objects.all(): try: - self.send_email_alerts() + self.send_email_alerts(user, template) except Exception, e: print e - finally: - connection.close() + connection.close() def get_updated_questions_for_user(self, user): """ @@ -409,87 +410,84 @@ class Command(NoArgsCommand): #todo: sort question list by update time return q_list - def send_email_alerts(self): + def send_email_alerts(self, user, template): #does not change the database, only sends the email #todo: move this to template - activate_language(django_settings.LANGUAGE_CODE) - template = get_template('email/delayed_email_alert.html') - for user in User.objects.all(): - user.add_missing_askbot_subscriptions() - #todo: q_list is a dictionary, not a list - q_list = self.get_updated_questions_for_user(user) - if len(q_list.keys()) == 0: - continue - num_q = 0 - for question, meta_data in q_list.items(): + user.add_missing_askbot_subscriptions() + #todo: q_list is a dictionary, not a list + q_list = self.get_updated_questions_for_user(user) + if len(q_list.keys()) == 0: + return + num_q = 0 + for question, meta_data in q_list.items(): + if meta_data['skip']: + del q_list[question] + else: + num_q += 1 + if num_q > 0: + threads = Thread.objects.filter(id__in=[qq.thread_id for qq in q_list.keys()]) + tag_summary = Thread.objects.get_tag_summary_from_threads(threads) + + question_count = len(q_list.keys()) + + if tag_summary: + subject_line = ungettext( + '%(question_count)d update about %(topics)s', + '%(question_count)d updates about %(topics)s', + question_count + ) % { + 'question_count': question_count, + 'topics': tag_summary + } + else: + subject_line = ungettext( + '%(question_count)d update', + '%(question_count)d updates', + question_count + ) % { + 'question_count': question_count, + } + + items_added = 0 + items_unreported = 0 + questions_data = list() + for q, meta_data in q_list.items(): + act_list = [] if meta_data['skip']: - del q_list[question] - else: - num_q += 1 - if num_q > 0: - threads = Thread.objects.filter(id__in=[qq.thread_id for qq in q_list.keys()]) - tag_summary = Thread.objects.get_tag_summary_from_threads(threads) - - question_count = len(q_list.keys()) - - if tag_summary: - subject_line = ungettext( - '%(question_count)d update about %(topics)s', - '%(question_count)d updates about %(topics)s', - question_count - ) % { - 'question_count': question_count, - 'topics': tag_summary - } + continue + if items_added >= askbot_settings.MAX_ALERTS_PER_EMAIL: + items_unreported = num_q - items_added #may be inaccurate actually, but it's ok + break else: - subject_line = ungettext( - '%(question_count)d update', - '%(question_count)d updates', - question_count - ) % { - 'question_count': question_count, - } - - items_added = 0 - items_unreported = 0 - questions_data = list() - for q, meta_data in q_list.items(): - act_list = [] - if meta_data['skip']: - continue - if items_added >= askbot_settings.MAX_ALERTS_PER_EMAIL: - items_unreported = num_q - items_added #may be inaccurate actually, but it's ok - break - else: - items_added += 1 - if meta_data['new_q']: - act_list.append(_('new question')) - format_action_count('%(num)d rev', meta_data['q_rev'], act_list) - format_action_count('%(num)d ans', meta_data['new_ans'], act_list) - format_action_count('%(num)d ans rev', meta_data['ans_rev'], act_list) - questions_data.append({ - 'url': site_url(q.get_absolute_url()), - 'info': ', '.join(act_list), - 'title': q.thread.title - }) - - activate_language(user.get_primary_language()) - text = template.render({ - 'recipient_user': user, - 'questions': questions_data, - 'name': user.username, - 'admin_email': askbot_settings.ADMIN_EMAIL, - 'site_name': askbot_settings.APP_SHORT_NAME, - 'is_multilingual': getattr(django_settings, 'ASKBOT_MULTILINGUAL', False) - }) - - if DEBUG_THIS_COMMAND == True: - recipient_email = askbot_settings.ADMIN_EMAIL - else: - recipient_email = user.email + items_added += 1 + if meta_data['new_q']: + act_list.append(_('new question')) + format_action_count('%(num)d rev', meta_data['q_rev'], act_list) + format_action_count('%(num)d ans', meta_data['new_ans'], act_list) + format_action_count('%(num)d ans rev', meta_data['ans_rev'], act_list) + questions_data.append({ + 'url': site_url(q.get_absolute_url()), + 'info': ', '.join(act_list), + 'title': q.thread.title + }) + + activate_language(user.get_primary_language()) + text = template.render({ + 'recipient_user': user, + 'questions': questions_data, + 'name': user.username, + 'admin_email': askbot_settings.ADMIN_EMAIL, + 'site_name': askbot_settings.APP_SHORT_NAME, + 'is_multilingual': getattr(django_settings, 'ASKBOT_MULTILINGUAL', False) + }) + + if DEBUG_THIS_COMMAND == True: + recipient_email = askbot_settings.ADMIN_EMAIL + else: + recipient_email = user.email - mail.send_mail( - subject_line = subject_line, - body_text = text, - recipient_list = [recipient_email] - ) + mail.send_mail( + subject_line = subject_line, + body_text = text, + recipient_list = [recipient_email] + ) -- cgit v1.2.3-1-g7c22