From 964711a3e009de4dccea1bc1fb413f9f86aa4225 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Mon, 2 Jun 2014 12:09:06 +0530 Subject: [PATCH] Enable Scheduler via Setup > System Settings --- frappe/cli.py | 50 ++++++- .../system_settings/system_settings.json | 140 +++++++++--------- .../system_settings/system_settings.py | 6 +- frappe/patches.txt | 1 + .../enable_scheduler_in_system_settings.py | 12 ++ frappe/utils/install.py | 3 +- frappe/utils/scheduler.py | 12 +- 7 files changed, 149 insertions(+), 75 deletions(-) create mode 100644 frappe/patches/v4_0/enable_scheduler_in_system_settings.py diff --git a/frappe/cli.py b/frappe/cli.py index 9140c4092d..1c0cfbd28d 100755 --- a/frappe/cli.py +++ b/frappe/cli.py @@ -140,6 +140,8 @@ def setup_install(parser): help="Install a fresh app in db_name specified in conf.py") parser.add_argument("--restore", metavar=("DB-NAME", "SQL-FILE"), nargs=2, help="Restore from an sql file") + parser.add_argument("--with_scheduler_enabled", default=False, action="store_true", + help="Enable scheduler on restore") parser.add_argument("--add_system_manager", nargs="+", metavar=("EMAIL", "[FIRST-NAME] [LAST-NAME]"), help="Add a user with all roles") @@ -242,6 +244,11 @@ def setup_utilities(parser): parser.add_argument("--run_scheduler_event", nargs=1, metavar="all | daily | weekly | monthly", help="Run a scheduler event") + parser.add_argument("--enable_scheduler", default=False, action="store_true", + help="Enable scheduler") + parser.add_argument("--disable_scheduler", default=False, action="store_true", + help="Disable scheduler") + # replace parser.add_argument("--replace", nargs=3, @@ -284,8 +291,13 @@ def use(sites_path): def install(db_name, root_login="root", root_password=None, source_sql=None, admin_password = 'admin', force=False, site_config=None, reinstall=False, quiet=False, install_apps=None): from frappe.installer import install_db, install_app, make_site_dirs + import frappe.utils.scheduler + verbose = not quiet + # enable scheduler post install? + enable_scheduler = _is_scheduler_enabled() + install_db(root_login=root_login, root_password=root_password, db_name=db_name, source_sql=source_sql, admin_password = admin_password, verbose=verbose, force=force, site_config=site_config, reinstall=reinstall) make_site_dirs() @@ -299,8 +311,23 @@ def install(db_name, root_login="root", root_password=None, source_sql=None, for app in install_apps: install_app(app, verbose=verbose, set_as_patched=not source_sql) + frappe.utils.scheduler.toggle_scheduler(enable_scheduler) + + scheduler_status = "disabled" if frappe.utils.scheduler.is_scheduler_disabled() else "enabled" + print "*** Scheduler is", scheduler_status, "***" + frappe.destroy() +def _is_scheduler_enabled(): + enable_scheduler = False + try: + frappe.connect() + enable_scheduler = frappe.db.get_default("enable_scheduler") + finally: + frappe.db.close() + + return enable_scheduler + @cmd def install_app(app_name, quiet=False): verbose = not quiet @@ -334,10 +361,13 @@ def reinstall(quiet=False): install(db_name=frappe.conf.db_name, verbose=verbose, force=True, reinstall=True, install_apps=installed) @cmd -def restore(db_name, source_sql, force=False, quiet=False): +def restore(db_name, source_sql, force=False, quiet=False, with_scheduler_enabled=False): + import frappe.utils.scheduler verbose = not quiet install(db_name, source_sql=source_sql, verbose=verbose, force=force) + frappe.utils.scheduler.toggle_scheduler(with_scheduler_enabled) + @cmd def add_system_manager(email, first_name=None, last_name=None): import frappe.utils.user @@ -565,6 +595,24 @@ def run_scheduler_event(event, force=False): frappe.utils.scheduler.trigger(frappe.local.site, event, now=force) frappe.destroy() +@cmd +def enable_scheduler(): + import frappe.utils.scheduler + frappe.connect() + frappe.utils.scheduler.enable_scheduler() + frappe.db.commit() + print "Enabled" + frappe.destroy() + +@cmd +def disable_scheduler(): + import frappe.utils.scheduler + frappe.connect() + frappe.utils.scheduler.disable_scheduler() + frappe.db.commit() + print "Disabled" + frappe.destroy() + # replace @cmd def replace(search_regex, replacement, extn, force=False): diff --git a/frappe/core/doctype/system_settings/system_settings.json b/frappe/core/doctype/system_settings/system_settings.json index 34040a21c0..50cffa5454 100644 --- a/frappe/core/doctype/system_settings/system_settings.json +++ b/frappe/core/doctype/system_settings/system_settings.json @@ -1,92 +1,100 @@ { - "creation": "2014-04-17 16:53:52.640856", - "docstatus": 0, - "doctype": "DocType", - "document_type": "System", + "creation": "2014-04-17 16:53:52.640856", + "docstatus": 0, + "doctype": "DocType", + "document_type": "System", "fields": [ { - "fieldname": "localization", - "fieldtype": "Section Break", - "label": "Localization", + "fieldname": "localization", + "fieldtype": "Section Break", + "label": "Localization", "permlevel": 0 - }, + }, { - "fieldname": "language", - "fieldtype": "Select", - "in_list_view": 1, - "label": "Language", - "options": "Loading...", - "permlevel": 0, - "reqd": 1, + "fieldname": "language", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Language", + "options": "Loading...", + "permlevel": 0, + "reqd": 1, "search_index": 0 - }, + }, { - "fieldname": "time_zone", - "fieldtype": "Select", - "label": "Time Zone", - "permlevel": 0, + "fieldname": "time_zone", + "fieldtype": "Select", + "label": "Time Zone", + "permlevel": 0, "reqd": 1 - }, + }, { - "fieldname": "date_and_number_format", - "fieldtype": "Section Break", - "label": "Date and Number Format", + "fieldname": "date_and_number_format", + "fieldtype": "Section Break", + "label": "Date and Number Format", "permlevel": 0 - }, + }, { - "fieldname": "date_format", - "fieldtype": "Select", - "label": "Date Format", - "options": "yyyy-mm-dd\ndd-mm-yyyy\ndd/mm/yyyy\ndd.mm.yyyy\nmm/dd/yyyy\nmm-dd-yyyy", - "permlevel": 0, + "fieldname": "date_format", + "fieldtype": "Select", + "label": "Date Format", + "options": "yyyy-mm-dd\ndd-mm-yyyy\ndd/mm/yyyy\ndd.mm.yyyy\nmm/dd/yyyy\nmm-dd-yyyy", + "permlevel": 0, "reqd": 1 - }, + }, { - "fieldname": "number_format", - "fieldtype": "Select", - "label": "Number Format", - "options": "#,###.##\n#.###,##\n# ###.##\n# ###,##\n#,###.###\n#,##,###.##\n#.###\n#,###", - "permlevel": 0, + "fieldname": "number_format", + "fieldtype": "Select", + "label": "Number Format", + "options": "#,###.##\n#.###,##\n# ###.##\n# ###,##\n#,###.###\n#,##,###.##\n#.###\n#,###", + "permlevel": 0, "reqd": 1 - }, + }, { - "fieldname": "float_precision", - "fieldtype": "Select", - "label": "Float Precision", - "options": "\n2\n3\n4\n5\n6", + "fieldname": "float_precision", + "fieldtype": "Select", + "label": "Float Precision", + "options": "\n2\n3\n4\n5\n6", "permlevel": 0 - }, + }, { - "fieldname": "security", - "fieldtype": "Section Break", - "label": "Security", + "fieldname": "security", + "fieldtype": "Section Break", + "label": "Security", "permlevel": 0 - }, + }, { - "default": "06:00", - "description": "Session Expiry in Hours e.g. 06:00", - "fieldname": "session_expiry", - "fieldtype": "Data", - "label": "Session Expiry", - "options": "", + "default": "06:00", + "description": "Session Expiry in Hours e.g. 06:00", + "fieldname": "session_expiry", + "fieldtype": "Data", + "label": "Session Expiry", + "options": "", + "permlevel": 0 + }, + { + "description": "Run scheduled jobs only if checked", + "fieldname": "enable_scheduler", + "fieldtype": "Check", + "in_list_view": 0, + "label": "Enable Scheduled Jobs", "permlevel": 0 } - ], - "icon": "icon-cog", - "issingle": 1, - "modified": "2014-05-27 08:00:24.700595", - "modified_by": "Administrator", - "module": "Core", - "name": "System Settings", - "name_case": "", - "owner": "Administrator", + ], + "icon": "icon-cog", + "issingle": 1, + "modified": "2014-06-02 02:09:03.623094", + "modified_by": "Administrator", + "module": "Core", + "name": "System Settings", + "name_case": "", + "owner": "Administrator", "permissions": [ { - "create": 1, - "permlevel": 0, - "read": 1, - "role": "System Manager", + "create": 1, + "permlevel": 0, + "read": 1, + "role": "System Manager", "write": 1 } ] -} +} \ No newline at end of file diff --git a/frappe/core/doctype/system_settings/system_settings.py b/frappe/core/doctype/system_settings/system_settings.py index 2491a4a9b0..03c2073c72 100644 --- a/frappe/core/doctype/system_settings/system_settings.py +++ b/frappe/core/doctype/system_settings/system_settings.py @@ -17,11 +17,11 @@ class SystemSettings(Document): def on_update(self): for df in self.meta.get("fields"): - if df.fieldtype in ("Select", "Data"): + if df.fieldtype in ("Select", "Data", "Check"): frappe.db.set_default(df.fieldname, self.get(df.fieldname)) - set_default_language(self.language) - + if self.language: + set_default_language(self.language) @frappe.whitelist() def load(): diff --git a/frappe/patches.txt b/frappe/patches.txt index 9e42bcc58c..151dc61d95 100644 --- a/frappe/patches.txt +++ b/frappe/patches.txt @@ -32,3 +32,4 @@ frappe.patches.v4_0.set_user_gravatar frappe.patches.v4_0.update_custom_field_insert_after frappe.patches.v4_0.set_user_permissions frappe.patches.v4_0.create_custom_field_for_owner_match +frappe.patches.v4_0.enable_scheduler_in_system_settings diff --git a/frappe/patches/v4_0/enable_scheduler_in_system_settings.py b/frappe/patches/v4_0/enable_scheduler_in_system_settings.py new file mode 100644 index 0000000000..8cb4e510fb --- /dev/null +++ b/frappe/patches/v4_0/enable_scheduler_in_system_settings.py @@ -0,0 +1,12 @@ +# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors +# MIT License. See license.txt + +from __future__ import unicode_literals +import frappe +from frappe.utils.scheduler import disable_scheduler, enable_scheduler + +def execute(): + if frappe.db.get_global("disable_scheduler"): + disable_scheduler() + else: + enable_scheduler() diff --git a/frappe/utils/install.py b/frappe/utils/install.py index c07a9f7adc..42d9fe605b 100644 --- a/frappe/utils/install.py +++ b/frappe/utils/install.py @@ -34,8 +34,7 @@ def after_install(): pass # all roles to admin - frappe.get_doc("User", "Administrator").add_roles(*frappe.db.sql_list(""" - select name from tabRole""")) + frappe.get_doc("User", "Administrator").add_roles(*frappe.db.sql_list("""select name from tabRole""")) # update admin password from frappe.auth import _update_password diff --git a/frappe/utils/scheduler.py b/frappe/utils/scheduler.py index 8c28533d7b..1a585552c5 100644 --- a/frappe/utils/scheduler.py +++ b/frappe/utils/scheduler.py @@ -104,13 +104,19 @@ def log(method, message=None): return message def is_scheduler_disabled(): - return frappe.utils.cint(frappe.db.get_global("disable_scheduler")) + return not frappe.utils.cint(frappe.db.get_default("enable_scheduler")) + +def toggle_scheduler(enable): + ss = frappe.get_doc("System Settings") + ss.enable_scheduler = 1 if enable else 0 + ss.ignore_mandatory = True + ss.save() def enable_scheduler(): - frappe.db.set_global("disable_scheduler", 0) + toggle_scheduler(True) def disable_scheduler(): - frappe.db.set_global("disable_scheduler", 1) + toggle_scheduler(False) def get_errors(from_date, to_date, limit): errors = frappe.db.sql("""select modified, method, error from `tabScheduler Log`