Some have gone so far to say "premature optimization is the root of all 
evil". I'm not quite in that camp but I do believe optimizations can and 
should generally wait. And for exact the reason exhibited here: they can 
make simple things complicated and hard to troubleshoot/fix.

I think the "load all models on every request" issue is a little overblown. 
I think you need 50+ tables before it becomes perceptible to end-users.


On Monday, June 4, 2012 12:23:59 PM UTC-7, anonymouse wrote:
>
> Aw crap. And I thought I had tried that. 
>
> setting ajax=True does indeed work... I'm guessing that it's because it 
> creates a separate request whereas load without ajax uses the current value 
> of request.controller to decide which models to execute.
>
> Anyway, problem solved. Thanks pbreit!
>
> Also, why, if I may ask, do you advise against conditional models or 
> 'premature optimization' as you put it? I guess there's the argument "if it 
> ain't broke, don't fix it". 
>
> The thing is I do some database queries within the conditional models file 
> (I omitted this in my example) which I don't think should run on every page 
> load, especially since this particular database is accessed by several 
> applications. Perhaps its still premature (the db traffic is low for now... 
> but that db is brand new and apps haven't been modified to use it as 
> opposed to LDAP). 
>
> On Monday, 4 June 2012 14:13:24 UTC-5, pbreit wrote:
>>
>> Hmmm...I would have expected a LOAD(...ajax=True) to trigger conditional 
>> models properly.
>>
>> Not the answer you're looking for but I very strongly advise against 
>> premature optimization (ie, conditional models).
>>
>>
>> On Monday, June 4, 2012 12:01:17 PM UTC-7, anonymouse wrote:
>>>
>>> Hi all,
>>>
>>> I'm having an issue trying to load a component that relies on 
>>> conditionally loaded models.
>>>
>>> It appears that either the conditional model file is not 
>>> executed/evaluated using the LOAD function.
>>>
>>> The following files are relevant to this issue:
>>>
>>> models/people/personnel.py
>>> controllers/people.py
>>> controllers/contact.py
>>> views/contact/index.html
>>> views/people/index.html
>>>
>>>
>>> The quick solution would clearly be to take the conditional model out of 
>>> "people" so that it is available to the "contact" controller, but I was 
>>> wondering if there were any another solutions which allow the "people" 
>>> model file to still be executed conditionally. 
>>>
>>> Perhaps I would be better off putting the model in modules and having 
>>> the model/personnel.py file import the table definition from modules, and 
>>> add another import statement to the "contact" controller and any other 
>>> controllers outside of people that use personnel data (though at present, 
>>> contact is the ONLY one)?
>>>
>>> I would think that LOAD would execute the conditional model but perhaps 
>>> there is a good reason it does not? I could just be using components/LOAD 
>>> completely wrong, but if not then maybe this is a good candidate for a 
>>> feature request? 
>>>
>>> If anyone can shed some light on this issue, please, shed away! 
>>>
>>> Below are the parts my app that are relevant: 
>>>
>>> ### Models: models/people/personnel.py
>>> db.define_table('people',
>>>  Field(...) # Defines name, position, user-id -- this is NOT meant for 
>>> any sort of access control, just a list of people in our institution
>>>  ...
>>> )
>>>
>>>
>>> ### I have two controllers:
>>> # controller - people.py
>>> def index():
>>>   if request.args(0):
>>>      people = db(db.people.positition == request.args(0)).select()
>>>   else:
>>>      people = db(db.people).select()
>>>   return dict(people=people)
>>>
>>> # contact.py
>>> def index():
>>>     ... build contact form, do form validation, etc ...
>>>     return dict(form=form) 
>>>
>>> # and my contact view 
>>> # views/contact/index.html contains this LOAD statement:
>>> {{ = LOAD('people','index',args=['faculty']) }}
>>>
>>> When I attempt to view the page /app/contact/index
>>>
>>> I get the error:
>>>   KeyError: people
>>>
>>> The error is of course generated in the 2nd line of the people.py index 
>>> function.
>>>
>>> When I attempt to view /app/people/index everything works perfectly. 
>>>
>>> Can I use LOAD with conditional models?
>>>
>>

Reply via email to