On 20 Aug 2012, at 10:32 AM, Massimo Di Pierro <massimo.dipie...@gmail.com> 
wrote:
> can you show a proof of concept?

Not exactly a proof, but a concept.

At the very end of lazy_define_table, just before 'return table':

    if args.get('on_define'):
        args.get('on_define')(table)

The caller-defined on_define function can do things like:

def on_define(table):
    table.field.readable = True

or, more interestingly:

def on_define(table):
    if request.something == whatever:
        table.field.readable = True

...etc. Assuming that there's dynamic stuff like that going on, it saves having 
to figure out whether you're in a request in which the table is going to be 
instantiated and then modify the fields.

One more thought, just an abstract one because I don't have an example to 
offer. Since we're storing args at define_table time, to be used later when the 
table is referenced, it's important that the caller not include mutable objects 
in args and change them (in relevant ways) between the define_table call and 
the instantiation.


> 
> On Monday, 20 August 2012 11:51:27 UTC-5, Jonathan Lundell wrote:
> On 18 Aug 2012, at 1:46 PM, Massimo Di Pierro <massimo....@gmail.com> wrote:
>> As Bruno says. Something like this will completely nullify the benefit of 
>> lazy tables.
>> 
>> Field(..., readable=True) is OK but
>> db.table.field.readable=True is BAD because will force db.table to be 
>> instantiated.
>> 
> 
> Here's a vague idea: suppose define_table had a requirements parameter, 
> defaulting to None, that could be set to a function (lambda or otherwise) 
> that would be called after the table is instantiated? Then you'd still be 
> able to pull your dynamic requirements into one place, but without triggering 
> define-time instantiation. For convenience, the function would be called for 
> any instantiation, even a non-lazy one, so one could turn lazy instantiation 
> on & off for testing without changing it.
> 


-- 



Reply via email to