I just came across this same issue when using the web2py scheduler for the first time with an Oracle DB. I spent a good amount of time googling before finding this post which pointed me to where the problem was.
I have implemented a work around by creating the below trigger in the database that will strip out the single quotes before the data is inserted into the table. It's not pretty but it works. Now my tasks are running fine. create or replace trigger replace_quotes before insert on SCHEDULER_TASK for each row begin :new.args := replace( :new.args, '''', '' ); :new.vars := replace( :new.vars, '''', '' ); end; / On Thursday, 8 September 2016 14:27:15 UTC+1, 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. > > 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.