[fix] use importlib instead of imp.load_source in test_runner. Fixes to scheduler.py
This commit is contained in:
parent
32b3d7c279
commit
13e43fcbcd
3 changed files with 25 additions and 15 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue