diff --git a/frappe/utils/scheduler.py b/frappe/utils/scheduler.py index 9c730eaffa..73ba5a0339 100755 --- a/frappe/utils/scheduler.py +++ b/frappe/utils/scheduler.py @@ -11,6 +11,7 @@ Events: # imports - standard imports import os import time +from typing import NoReturn # imports - module imports import frappe @@ -30,7 +31,7 @@ def cprint(*args, **kwargs): pass -def start_scheduler(): +def start_scheduler() -> NoReturn: """Run enqueue_events_for_all_sites based on scheduler tick. Specify scheduler_interval in seconds in common_site_config.json""" @@ -41,7 +42,7 @@ def start_scheduler(): enqueue_events_for_all_sites() -def enqueue_events_for_all_sites(): +def enqueue_events_for_all_sites() -> None: """Loop through sites and enqueue events that are not already queued""" if os.path.exists(os.path.join(".", ".restarting")): @@ -54,16 +55,13 @@ def enqueue_events_for_all_sites(): for site in sites: try: enqueue_events_for_site(site=site) - except Exception as e: - print(e.__class__, f"Failed to enqueue events for site: {site}") + except Exception: + frappe.logger("scheduler").debug(f"Failed to enqueue events for site: {site}", exc_info=True) -def enqueue_events_for_site(site): - def log_and_raise(): - error_message = "Exception in Enqueue Events for Site {}\n{}".format( - site, frappe.get_traceback() - ) - frappe.logger("scheduler").error(error_message) +def enqueue_events_for_site(site: str) -> None: + def log_exc(): + frappe.logger("scheduler").error(f"Exception in Enqueue Events for Site {site}", exc_info=True) try: frappe.init(site=site) @@ -74,29 +72,26 @@ def enqueue_events_for_site(site): enqueue_events(site=site) frappe.logger("scheduler").debug(f"Queued events for site {site}") - except frappe.db.OperationalError as e: + except Exception as e: if frappe.db.is_access_denied(e): frappe.logger("scheduler").debug(f"Access denied for site {site}") - else: - log_and_raise() - except Exception: - log_and_raise() + log_exc() finally: frappe.destroy() -def enqueue_events(site): +def enqueue_events(site: str) -> None: if schedule_jobs_based_on_activity(): frappe.flags.enqueued_jobs = [] queued_jobs = get_jobs(site=site, key="job_type").get(site) or [] for job_type in frappe.get_all("Scheduled Job Type", ("name", "method"), dict(stopped=0)): if not job_type.method in queued_jobs: # don't add it to queue if still pending - frappe.get_doc("Scheduled Job Type", job_type.name).enqueue() + frappe.get_cached_doc("Scheduled Job Type", job_type.name).enqueue() -def is_scheduler_inactive(): +def is_scheduler_inactive() -> bool: if frappe.local.conf.maintenance_mode: cprint(f"{frappe.local.site}: Maintenance mode is ON") return True @@ -111,7 +106,7 @@ def is_scheduler_inactive(): return False -def is_scheduler_disabled(): +def is_scheduler_disabled() -> bool: if frappe.conf.disable_scheduler: cprint(f"{frappe.local.site}: frappe.conf.disable_scheduler is SET") return True