queue_task just does json.dumps(vars) https://github.com/web2py/web2py/blob/master/gluon/scheduler.py#L1483
the field is defined as 'text' https://github.com/web2py/web2py/blob/master/gluon/scheduler.py#L813 IMHO it's an issue with the oracle driver. On Thursday, September 8, 2016 at 8:14:49 PM UTC+2, Dave S wrote: > > > > On Thursday, September 8, 2016 at 6:27:15 AM UTC-7, Erwn Ltmann wrote: >> >> Hi Dave, >> >> thx for your response. I'm sorry, but it doesn't helps me. My problem >> concerning the usage of scheduler_task queueing. The web2py scheduler >> transforms automatically the dictionary parameter 'pvars' into a string >> represented JSON in order to save this value as VARCHAR2(512) into the vars >> column of database (oracle) table scheduler_task. So far so good. But IMHO >> with unnecessary quotes at begin and end. The scheduler part of web2py >> tried to read scheduler records and fails because this (damn) extra quotes. >> >> E. >> >> > I don't use Oracle and I don't have JSON arguments for tasks (yet), so I > can't tell you if the "problem" is with the queue_task() call or with the > Oracle driver. Niphlod is the Scheduler authority, having done the rewrite > of it. I'm not sure who our local Oracle expert is. > > Does the error occur when you access vars[0] from your task (launched by > the Scheduler?) Or does it occur when the Scheduler is trying to start up > your task? Also, *are you accessing the Scheduler tables directly? I > don't think you should be doing that* ... for one thing, that's an > implementation detail that's not an official API and is subject to change. > And I don't think it's needed, as your launched task is passed the args. > > /dps > (edited for m-fassis) > > > On Thursday, September 8, 2016 at 4:01:37 AM UTC+2, Dave S wrote: >>> >>> >>> >>> On Wednesday, September 7, 2016 at 5:30:49 PM UTC-7, Erwn Ltmann wrote: >>>> >>>> Hi, >>>> >>>> I'm used to create a new task for example: >>>> >>>> scheduler.queue_task( >>>> "a_task", >>>> pvars = dict(csid=row.id, csname=row.name, action=row.action), >>>> ... >>>> ) >>>> >>>> In the past (version 2.10.1), everything was fine. Within the current >>>> version (2.14.6) I have some trouble. See this code for example: >>>> >>>> for row in db(db.scheduler_task.group_name == "agents").select( >>>> db.scheduler_task.ALL): >>>> ... >>>> pvars = json.loads(row.vars) >>>> >>>> ... will raise this exception: >>>> >>>> ... >>>> File "/usr/local/lib/python2.7/json/decoder.py", line 384, in >>>> raw_decode >>>> raise ValueError("No JSON object could be decoded") >>>> ValueError: No JSON object could be decoded >>>> >>>> The reason is a quoted string in column 'VARS' in table >>>> 'SCHEDULER_TASK' (no quotes in web2py's old version 2.10.1). >>>> >>>> A new value for 'VARS' with quotes for example: >>>> >>>> '{"action": "script", "csname": "list", "csid": 121}' >>>> >>>> I can skip the quotes with a trick: >>>> >>>> pvars = json.loads(row.vars[1:-1]) >>>> >>>> But, it is not a general solution. The same problem appears for column >>>> 'ARGS' in scheduler.py when I process the tasks: >>>> >>>> File "/export/home/armadm/dev01/release/web2py/gluon/scheduler.py", >>>> line 311, in executor >>>> args = _decode_list(loads(task.args)) >>>> File "/usr/local/lib/python2.7/json/__init__.py", line 338, in loads >>>> return _default_decoder.decode(s) >>>> File "/usr/local/lib/python2.7/json/decoder.py", line 366, in decode >>>> obj, end = self.raw_decode(s, idx=_w(s, 0).end()) >>>> File "/usr/local/lib/python2.7/json/decoder.py", line 384, in >>>> raw_decode >>>> raise ValueError("No JSON object could be decoded") >>>> ValueError: No JSON object could be decoded >>>> >>>> I use Oracle as database: >>>> >>>> SQL> desc scheduler_task >>>> Name Null? Type >>>> ----------------------------------------- -------- >>>> ---------------------------- >>>> ID NOT NULL NUMBER >>>> ... >>>> ARGS VARCHAR2(512) >>>> VARS VARCHAR2(512) >>>> >>>> Any ideas? >>>> >>>> Thx, Erwn >>>> >>> >>> the vars field is a dict, with the var names as keys and the stuff you >>> want to pass as the values. Both are strings. >>> >>> I use a single var in my code, the name is "where" and the value is a >>> path. So I do >>> if vars["where"]: >>> mywhere = vars["where"] >>> >>> >>> No stripping of quotes is needed to get the path. >>> >>> /dps >>> >>> -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.