.render() works fine on Rows objects with compact=True, and it also works 
fine on the results of .sort(), .exclude(), &, and | operations. The only 
problem is with the results of .find() operations when the original Rows 
object has compact=True. The problem is that the .find() method modifies 
the Row objects in self.records when compact=True, which it probably should 
not due.

Aside from this issue, perhaps the various Rows methods should preserve the 
"compact" attribute -- not sure why they don't.

Forwarding to the developers list for discussion.

Anthony

On Tuesday, January 7, 2014 3:10:00 AM UTC-5, Joe Barnhart wrote:
>
> I've been experimenting with the render method of the Rows class, and I am 
> very impressed.  But one drawback I found is that the Rows object must have 
> its value set to "compact=False" to work properly with render().  It isn't 
> a problem if the Rows object is used directly without any operators, but I 
> discovered that many, if not most, Rows methods do not preserve the 
> "compact" setting.
>
> For example. if you "sort" the Rows, it leaves compact=True.  Ditto, if 
> you use "extract" or "find" on the Rows object.  The "&" and "|" operators 
> also set the compact variable to "True".  The upshot is that you can't use 
> any of these operators on the Rows object and then use "render" on the 
> resulting object.
>
> It is a simple change to add the preservation of the "compact" flag during 
> any of these steps, but I'm unsure if this will break existing code.  Other 
> than coming up with a completely parallel set of methods, which leave 
> compact set the way it came in, I can't think of another approach will be 
> provably backwards-compatible.
>
> Here is an example:
>
>
>     def __and__(self,other):
>         if self.colnames!=other.colnames:
>             raise Exception('Cannot & incompatible Rows objects')
>         records = self.records+other.records
>         return Rows(self.db,records,self.colnames)
>
>
> Becomes:
>
>
>     def __and__(self,other):
>         if self.colnames!=other.colnames:
>             raise Exception('Cannot & incompatible Rows objects')
>         records = self.records+other.records
>         return Rows(self.db,records,self.colnames,compact=(self.compact 
> or other.compact))
>
>
> In the case above, the flag compact will be set True if either of the 
> participating Rows object is also "compact".  My logic is, if you've lost 
> the "table" values on either Rows object, you may as well lose them on the 
> combined set.
>
> What do you think?
>
> -- Joe B.
>
>
>

-- 
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/groups/opt_out.

Reply via email to