diff --git a/VERSION b/VERSION index 2ac640e6..f1f44883 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 2.00.0 (2012-07-06 11:47:22) dev +Version 2.00.0 (2012-07-07 10:28:16) dev diff --git a/applications/examples/views/default/who.html b/applications/examples/views/default/who.html index 278ad5f5..827b68a4 100644 --- a/applications/examples/views/default/who.html +++ b/applications/examples/views/default/who.html @@ -96,6 +96,7 @@
  • Mateusz Banach (stickers, IS_EMAIL, IS_IMAGE, contenttype)
  • Michael Willis (shell)
  • Michele Comitini (faceboook) +
  • Michael Toomim (scheduler)
  • Nathan Freeze (admin design, IS_STRONG, DAL features, web2pyslices.com)
  • Niall Sweeny (MSSQL support)
  • Niccolo Polo (epydoc) diff --git a/gluon/contrib/markmin/markmin2html.py b/gluon/contrib/markmin/markmin2html.py index e97f2877..9b7d52a7 100755 --- a/gluon/contrib/markmin/markmin2html.py +++ b/gluon/contrib/markmin/markmin2html.py @@ -363,7 +363,7 @@ def render(text,extra={},allowed={},sep='p',URL=None,environment=None,latex='goo return str(environment[a]) text = re.compile(r'@\{(?P\w+?)\}').sub(u2,text) if not URL is None: - # this is experimental @{controller/index/args} + # this is experimental @{function/args} # turns into a digitally signed URL def u1(match,URL=URL): f,args = match.group('f'), match.group('args') diff --git a/gluon/scheduler.py b/gluon/scheduler.py index 401cff6c..25b162b7 100644 --- a/gluon/scheduler.py +++ b/gluon/scheduler.py @@ -169,16 +169,21 @@ def executor(queue,task): try: if task.app: os.chdir(os.environ['WEB2PY_PATH']) - from gluon.shell import env + from gluon.shell import env, parse_path_info from gluon.dal import BaseAdapter from gluon import current level = logging.getLogger().getEffectiveLevel() logging.getLogger().setLevel(logging.WARN) - _env = env(task.app,import_models=True) + # Get controller-specific subdirectory if task.app is of + # form 'app/controller' + (a,c,f) = parse_path_info(task.app) + _env = env(a=a,c=c,import_models=True) logging.getLogger().setLevel(level) scheduler = current._scheduler - scheduler_tasks = current._scheduler.tasks - _function = scheduler_tasks[task.function] + f = task.function + # First look for the func in tasks, else look in models + _function = current._scheduler.tasks.get(f) or _env.get(f) + assert _function, 'Function %s not found in scheduler\'s environmen globals().update(_env) args = loads(task.args) vars = loads(task.vars, object_hook=_decode_dict) @@ -353,6 +358,7 @@ class Scheduler(MetaScheduler): def define_tables(self,db,migrate): from gluon import current + from gluon.dal import DEFAULT logging.debug('defining tables (migrate=%s)' % migrate) now = datetime.datetime.now() db.define_table( @@ -364,7 +370,8 @@ class Scheduler(MetaScheduler): Field('status',requires=IS_IN_SET(TASK_STATUS), default=QUEUED,writable=False), Field('function_name', - requires=IS_IN_SET(sorted(self.tasks.keys()))), + requires=IS_IN_SET(sorted(self.tasks.keys())) \ + if self.tasks else DEFAULT), Field('args','text',default='[]',requires=TYPE(list)), Field('vars','text',default='{}',requires=TYPE(dict)), Field('enabled','boolean',default=True), @@ -379,8 +386,9 @@ class Scheduler(MetaScheduler): Field('assigned_worker_name',default='',writable=False), migrate=migrate,format='%(task_name)s') if hasattr(current,'request'): - db.scheduler_task.application_name.default=current.request.application - + db.scheduler_task.application_name.default = \ + '%s/%s' % (current.request.application, + current.request.controller) db.define_table( 'scheduler_run', Field('scheduler_task','reference scheduler_task'),