From 6842f2e75ce2ac032656d82120e5011b4676ab74 Mon Sep 17 00:00:00 2001 From: Valmik Jangla Date: Thu, 17 Mar 2016 18:08:01 +0530 Subject: [PATCH 1/2] WIP code migration from Celery to RQ --- erpnext/crm/doctype/newsletter/newsletter.py | 8 +++----- erpnext/tasks.py | 12 +----------- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/erpnext/crm/doctype/newsletter/newsletter.py b/erpnext/crm/doctype/newsletter/newsletter.py index 52d3178351..2dc975e464 100644 --- a/erpnext/crm/doctype/newsletter/newsletter.py +++ b/erpnext/crm/doctype/newsletter/newsletter.py @@ -9,7 +9,8 @@ from frappe import throw, _ from frappe.model.document import Document from frappe.email.bulk import check_bulk_limit from frappe.utils.verified_command import get_signed_params, verify_request -import erpnext.tasks +from frappe.utils.background_jobs import enqueue +from erpnext.tasks import send_newsletter from erpnext.crm.doctype.newsletter_list.newsletter_list import add_subscribers class Newsletter(Document): @@ -32,11 +33,8 @@ class Newsletter(Document): self.recipients = self.get_recipients() if getattr(frappe.local, "is_ajax", False): - # to avoid request timed out! self.validate_send() - - # hack! event="bulk_long" to queue in longjob queue - erpnext.tasks.send_newsletter.delay(frappe.local.site, self.name, event="bulk_long") + enqueue(send_newsletter, newsletter=self.name) else: self.send_bulk() diff --git a/erpnext/tasks.py b/erpnext/tasks.py index cef0ac9d15..f38c969f2e 100644 --- a/erpnext/tasks.py +++ b/erpnext/tasks.py @@ -3,23 +3,16 @@ from __future__ import unicode_literals import frappe -from frappe.celery_app import celery_task, task_logger from frappe.utils.scheduler import log -@celery_task() -def send_newsletter(site, newsletter, event): - # hack! pass event="bulk_long" to queue in longjob queue +def send_newsletter(newsletter): try: - frappe.connect(site=site) doc = frappe.get_doc("Newsletter", newsletter) doc.send_bulk() except: frappe.db.rollback() - task_logger.error(site) - task_logger.error(frappe.get_traceback()) - # wasn't able to send emails :( doc.db_set("email_sent", 0) frappe.db.commit() @@ -30,6 +23,3 @@ def send_newsletter(site, newsletter, event): else: frappe.db.commit() - - finally: - frappe.destroy() From 4af736b989259eb1334ba68068805dae048b70f3 Mon Sep 17 00:00:00 2001 From: Valmik Jangla Date: Fri, 18 Mar 2016 03:38:22 -0700 Subject: [PATCH 2/2] Moved tasks content to newsletter.py --- erpnext/crm/doctype/newsletter/newsletter.py | 30 +++++++++++++++++--- erpnext/tasks.py | 25 ---------------- 2 files changed, 26 insertions(+), 29 deletions(-) mode change 100644 => 100755 erpnext/crm/doctype/newsletter/newsletter.py delete mode 100644 erpnext/tasks.py diff --git a/erpnext/crm/doctype/newsletter/newsletter.py b/erpnext/crm/doctype/newsletter/newsletter.py old mode 100644 new mode 100755 index 2dc975e464..be1235b0af --- a/erpnext/crm/doctype/newsletter/newsletter.py +++ b/erpnext/crm/doctype/newsletter/newsletter.py @@ -10,7 +10,8 @@ from frappe.model.document import Document from frappe.email.bulk import check_bulk_limit from frappe.utils.verified_command import get_signed_params, verify_request from frappe.utils.background_jobs import enqueue -from erpnext.tasks import send_newsletter +from frappe.utils.scheduler import log +from frappe.email.bulk import send from erpnext.crm.doctype.newsletter_list.newsletter_list import add_subscribers class Newsletter(Document): @@ -34,7 +35,10 @@ class Newsletter(Document): if getattr(frappe.local, "is_ajax", False): self.validate_send() - enqueue(send_newsletter, newsletter=self.name) + + # using default queue with a longer timeout as this isn't a scheduled task + enqueue(send_newsletter, queue='default', timeout=1500, event='send_newsletter', newsletter=self.name) + else: self.send_bulk() @@ -51,8 +55,6 @@ class Newsletter(Document): sender = self.send_from or frappe.utils.get_formatted_email(self.owner) - from frappe.email.bulk import send - if not frappe.flags.in_test: frappe.db.auto_commit_on_many_writes = True @@ -164,4 +166,24 @@ def confirm_subscription(email): frappe.respond_as_web_page(_("Confirmed"), _("{0} has been successfully added to our Newsletter list.").format(email)) +def send_newsletter(newsletter): + try: + doc = frappe.get_doc("Newsletter", newsletter) + doc.send_bulk() + + except: + frappe.db.rollback() + + # wasn't able to send emails :( + doc.db_set("email_sent", 0) + frappe.db.commit() + + log("send_newsletter") + + raise + + else: + frappe.db.commit() + + diff --git a/erpnext/tasks.py b/erpnext/tasks.py deleted file mode 100644 index f38c969f2e..0000000000 --- a/erpnext/tasks.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# MIT License. See license.txt - -from __future__ import unicode_literals -import frappe -from frappe.utils.scheduler import log - -def send_newsletter(newsletter): - try: - doc = frappe.get_doc("Newsletter", newsletter) - doc.send_bulk() - - except: - frappe.db.rollback() - - # wasn't able to send emails :( - doc.db_set("email_sent", 0) - frappe.db.commit() - - log("send_newsletter") - - raise - - else: - frappe.db.commit()