summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeny Fadeev <evgeny.fadeev@gmail.com>2014-10-07 14:37:03 +0400
committerEvgeny Fadeev <evgeny.fadeev@gmail.com>2014-10-07 14:37:03 +0400
commit3d25d62e0d2d46d0ac00668c05495308fe474331 (patch)
tree0cde7c29da2fb49a1367855f0ecfb6dfd1874b65
parentd1cae4076a8d83c0b7cdfe53a22688ddc4c5ad46 (diff)
downloadaskbot-3d25d62e0d2d46d0ac00668c05495308fe474331.tar.gz
askbot-3d25d62e0d2d46d0ac00668c05495308fe474331.tar.bz2
askbot-3d25d62e0d2d46d0ac00668c05495308fe474331.zip
send_email_alerts: added try/except to each user
-rw-r--r--askbot/management/commands/send_email_alerts.py164
1 files 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]
+ )