seems more a problem of the adapter rather than the scheduler itself

On Thursday, June 8, 2017 at 5:16:32 AM UTC+2, Richard P wrote:
>
> 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.

Reply via email to