CAT is a helper object, so you are nesting CATs inside of CATs inside of 
CATs, which is causing the recursion problem when everything has to be 
rendered. Your second approach is the way to go. Actually, you can skip 
making a separate list and instead just do:

    table = TABLE()
    for row in ...:
        table.append(TR(...))

Anthony

On Friday, May 9, 2014 3:56:20 PM UTC-4, SimonD wrote:
>
> Hi,
> I would like to seek knowledge/expertise.
>
> I have this function - which shows "all user activity in the previous 90 
> days"
> def all_activity():
>     
> tabledata=TR(B('Date/Time'),B('User'),B('Activity'),_style='background-color:lightblue;')
>   
> #formatted header
>     for row in 
> db(db.activity.date_time>datetime.datetime.today()-datetime.timedelta(days=91)).select(db.activity.date_time,
>     db.activity.user_email,db.activity.activity, 
> orderby=~db.activity.date_time):
>
>         tabledata=CAT(tabledata,TR(TD(row.date_time.strftime('%d %b %Y, 
> (%H:%M %p)'),_style='white-space:nowrap;'),row.user_email,row.activity))
>         #using CAT() to build the rows
>
>     return dict(rows=TABLE(tabledata)) 
>
> Although it may seem an unusual way to create a table (is it?), it 
> works..... except that when I get to about 350 records I get this error:
>
> RuntimeError: maximum recursion depth exceeded in cmp
>
>
> After some elimination-testing, it seems the CAT() helper is at the root 
> of the issue
>
> If the function is written like this:
> def all_activity():
>     tabledata=[]
>     
> tabledata.append(TR(B('Date/Time'),B('User'),B('Activity'),_style='background-color:lightblue;'))
>     for row in 
> db(db.activity.date_time>datetime.datetime.today()-datetime.timedelta(days=91)).select(db.activity.date_time,
>     db.activity.user_email,db.activity.activity, 
> orderby=~db.activity.date_time):
>         
>         tabledata.append(TR(TD(row.date_time.strftime('%d %b %Y, (%H:%M 
> %p)'),_style='white-space:nowrap;'),row.user_email,row.activity))
>         #essentialy using a tuple instead of CAT()
>
>     return dict(rows=TABLE(tabledata)) 
>
> ...the error appears to go away.
> Yes - I know that the second verion of the function (using tuples) is a 
> better way - it was just that I was taken by surprise with the error.
>
> My function is not recursive, but raising a recursive exception.
>
> So, I want to get the view of experts why the CAT() helper would be 
> causing the problem?
> Essentially, is re-iterating CAT() causing a recursive issue?
>
> If so, is there a way to make the CAT() helper work in this scenario?
>
> BTW - this is on 2.9.5+rocket+sqlite. I also have the issue with 
> 2.9.5+apaches+mod_wsgi
> I saw a note one this forums that claims a move to MySQL would solve the 
> error. But I am note sure I have exactly the same symptoms and scenario.
>
> Thanks for the guidance.
>
>

-- 
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