From 9c970632c53ba184d7e4026deba424df834fd83e Mon Sep 17 00:00:00 2001 From: Massimo Date: Thu, 21 Feb 2013 10:16:30 -0600 Subject: [PATCH] scheduler patch, thanks Niphlod --- VERSION | 2 +- gluon/scheduler.py | 17 +++++++++++------ scripts/writedoc.py | 10 +++++----- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/VERSION b/VERSION index 6494d1cd..9061d438 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 2.4.1-alpha.2+timestamp.2013.02.21.09.57.59 +Version 2.4.1-alpha.2+timestamp.2013.02.21.10.15.58 diff --git a/gluon/scheduler.py b/gluon/scheduler.py index 98f19b9c..621522f6 100644 --- a/gluon/scheduler.py +++ b/gluon/scheduler.py @@ -92,6 +92,7 @@ logger = logging.getLogger('web2py.scheduler.%s' % IDENTIFIER) from gluon import DAL, Field, IS_NOT_EMPTY, IS_IN_SET, IS_NOT_IN_DB, IS_INT_IN_RANGE, IS_DATETIME from gluon.utils import web2py_uuid +from gluon.storage import Storage QUEUED = 'QUEUED' @@ -203,6 +204,7 @@ def executor(queue, task, out): def write(self, data): self.out_queue.put(data) + W2P_TASK = Storage({'id' : task.task_id, 'uuid' : task.uuid}) stdout = LogOutput(out) try: if task.app: @@ -226,6 +228,8 @@ def executor(queue, task, out): if not isinstance(_function, CALLABLETYPES): raise NameError( "name '%s' not found in scheduler's environment" % f) + #Inject W2P_TASK into environment + _env.update({'W2P_TASK' : W2P_TASK}) globals().update(_env) args = loads(task.args) vars = loads(task.vars, object_hook=_decode_dict) @@ -504,7 +508,7 @@ class Scheduler(MetaScheduler): db.define_table( 'scheduler_run', - Field('scheduler_task', 'reference scheduler_task'), + Field('task_id', 'reference scheduler_task'), Field('status', requires=IS_IN_SET(RUN_STATUS)), Field('start_time', 'datetime'), Field('stop_time', 'datetime'), @@ -521,7 +525,7 @@ class Scheduler(MetaScheduler): Field('last_heartbeat', 'datetime'), Field('status', requires=IS_IN_SET(WORKER_STATUS)), Field('is_ticker', 'boolean', default=False, writable=False), - Field('group_names', 'list:string', default=self.group_names), + Field('group_names', 'list:string', default=self.group_names),#FIXME writable=False or give the chance to update dinamically the groups? migrate=migrate) if migrate: db.commit() @@ -626,7 +630,7 @@ class Scheduler(MetaScheduler): logger.debug(' new scheduler_run record') try: run_id = db.scheduler_run.insert( - scheduler_task=task.id, + task_id=task.id, status=RUNNING, start_time=now, worker_name=self.worker_name) @@ -650,7 +654,8 @@ class Scheduler(MetaScheduler): stop_time=task.stop_time, retry_failed=task.retry_failed, times_failed=task.times_failed, - sync_output=task.sync_output) + sync_output=task.sync_output, + uuid=task.uuid) def report_task(self, task, task_report): db = self.db @@ -983,12 +988,12 @@ class Scheduler(MetaScheduler): else: raise SyntaxError( "You can retrieve results only by id, uuid or Query") - fields = st.ALL + fields = [st.ALL] left = False orderby = ~st.id if output: fields = st.ALL, sr.ALL - left = sr.on(sr.scheduler_task == st.id) + left = sr.on(sr.task_id == st.id) orderby = ~st.id | ~sr.id row = self.db(q).select( *fields, diff --git a/scripts/writedoc.py b/scripts/writedoc.py index 59fd49d6..da433504 100644 --- a/scripts/writedoc.py +++ b/scripts/writedoc.py @@ -17,24 +17,24 @@ def main(path): print '

Models

' for filename in models: print '

%s

' % filename[len(path):] - print CODE(open(filename).read(),lanuage='web2py').xml() + print CODE(open(filename).read(),language='web2py').xml() print '

Layout Views

' for filename in views: print '

%s

' % filename[len(path):] - print CODE(open(filename).read(),lanuage='html').xml() + print CODE(open(filename).read(),language='html').xml() print '

Controllers and Views

' for filename in controllers: print '

%s

' % filename[len(path):] - print CODE(open(filename).read(),lanuage='web2py') + print CODE(open(filename).read(),language='web2py') views = glob.glob(os.path.join(path,'views','*','*.html')) views.sort() for filename in views: print '

%s

' % filename[len(path):] - print CODE(open(filename).read(),lanuage='html').xml() + print CODE(open(filename).read(),language='html').xml() print '

Modules

' for filename in modules: print '

%s

' % filename[len(path):] - print CODE(open(filename).read(),lanuage='python').xml() + print CODE(open(filename).read(),language='python').xml() print '' if __name__=='__main__':