diff --git a/frappe/test_runner.py b/frappe/test_runner.py index 12651f65dc..27e0b8b6f1 100644 --- a/frappe/test_runner.py +++ b/frappe/test_runner.py @@ -71,7 +71,7 @@ def run_all_tests(app=None, verbose=False, profile=False): filename = cstr(filename) if filename.startswith("test_") and filename.endswith(".py"): # print filename[:-3] - _add_test(path, filename, verbose, test_suite=test_suite) + _add_test(app, path, filename, verbose, test_suite=test_suite) if profile: pr = cProfile.Profile() @@ -133,14 +133,22 @@ def _run_unittest(module, verbose=False, tests=(), profile=False): return out -def _add_test(path, filename, verbose, test_suite=None): +def _add_test(app, path, filename, verbose, test_suite=None): import os, imp if os.path.sep.join(["doctype", "doctype", "boilerplate"]) in path: # in /doctype/doctype/boilerplate/ return - module = imp.load_source(filename[:-3], os.path.join(path, filename)) + app_path = frappe.get_pymodule_path(app) + relative_path = os.path.relpath(path, app_path) + if relative_path=='.': + module_name = app + else: + module_name = '{app}.{relative_path}.{module_name}'.format(app=app, + relative_path=relative_path.replace('/', '.'), module_name=filename[:-3]) + + module = frappe.get_module(module_name) if getattr(module, "selenium_tests", False) and not frappe.conf.run_selenium_tests: return diff --git a/frappe/tests/test_scheduler.py b/frappe/tests/test_scheduler.py index 627a4b75c2..af9cd5832e 100644 --- a/frappe/tests/test_scheduler.py +++ b/frappe/tests/test_scheduler.py @@ -9,6 +9,10 @@ from dateutil.relativedelta import relativedelta import frappe import json, time +def test_timeout(): + '''This function needs to be pickleable''' + time.sleep(100) + class TestScheduler(TestCase): def setUp(self): @@ -58,7 +62,3 @@ class TestScheduler(TestCase): def tearDown(self): frappe.flags.ran_schedulers = [] - -def test_timeout(): - '''This function needs to be pickleable''' - time.sleep(100) diff --git a/frappe/utils/scheduler.py b/frappe/utils/scheduler.py index 299ef49806..f9e7170fef 100755 --- a/frappe/utils/scheduler.py +++ b/frappe/utils/scheduler.py @@ -82,19 +82,19 @@ def enqueue_events(site, queued_jobs): out = [] if last: last = datetime.strptime(last, DATETIME_FORMAT) - out = enqueue_applicable_events(nowtime, last, queued_jobs, site=site) + out = enqueue_applicable_events(site, nowtime, last, queued_jobs) return '\n'.join(out) -def enqueue_applicable_events(nowtime, last, queued_jobs, site): +def enqueue_applicable_events(site, nowtime, last, queued_jobs=()): nowtime_str = nowtime.strftime(DATETIME_FORMAT) out = [] enabled_events = get_enabled_scheduler_events() - def trigger_if_enabled(event, site, now=False): + def trigger_if_enabled(site, event): if event in enabled_events: - trigger(site, event, queued_jobs, now=now) + trigger(site, event, queued_jobs) _log(event) def _log(event): @@ -114,23 +114,25 @@ def enqueue_applicable_events(nowtime, last, queued_jobs, site): trigger_if_enabled(site, "weekly_long") if "all" not in enabled_events: - trigger(site, queued_jobs, "all") + trigger(site, "all", queued_jobs) if "hourly" not in enabled_events: - trigger(site, queued_jobs, "hourly") + trigger(site, "hourly", queued_jobs) if nowtime.hour != last.hour: trigger_if_enabled(site, "hourly") trigger_if_enabled(site, "hourly_long") - trigger_if_enabled("all", site=site) + trigger_if_enabled(site, "all") return out -def trigger(site, event, queued_jobs, now=False): +def trigger(site, event, queued_jobs=(), now=False): """trigger method in hooks.scheduler_events""" queue = 'long' if event.endswith('_long') else 'short' timeout = queue_timeout[queue] + if not queued_jobs and not now: + queued_jobs = get_jobs(site=site, queue=queue) for handler in frappe.get_hooks("scheduler_events").get(event, []): if not now: