> > I've been testing the way you described above and it works, to a point. > The models are not imported in alphabetical order. This seems to be > controlled by this line (521):
models = listdir(path, '^\w+\.py$', 0, sort=False) in compileapp.py > listdir is essentially os.walk with a regexp for filtering and os.walk > doesn't give any guarantees for ordering at all from what I understand. > Note, it is not os.listdir -- it is the listdir function from gluon/fileutils.py, which does sort the files alphabetically: http://code.google.com/p/web2py/source/browse/gluon/fileutils.py#88. > Later in compileapp, the models found with listdir are looped through, > once (not dependant on the regexp) which gives changing the regexp between > models limited use. > It loops through the files alphabetically -- within any given file, response.models_to_run can be changed, which can affect whether models that come *later* in alphabetical order get run (obviously it cannot cause models that come earlier in alphabetical order to be run). Using response.models_to_run does not change the order in which models are run, nor the ability of later models to affect earlier ones. It merely controls which models get run, with some ability for earlier models to make dynamic changes that affect later ones. > To explain my issue, I'll try to use an example. Please bear with me! > Let's say I have the following models: > > dbInterface/someDbFile.py > > anotherInterface/someAnotherInterface.py > > __init__.py > logic.py > > > Now let's assume that listdir lists the models root dir first, then > anotherInterface dir and then dbInterface dir. > That should be exactly how listdir lists the models. > I want the dbInterface to load before anotherInterface since > anotherInterface is dependant on dbInterface. > Very simple -- just change the names so dbInterface comes before anotherInterface. > Is there any way I can control the order things are imported from > subfolders without changing web2py? I am aware that just setting sort to > true in the listdir-call will fix my issue but I would like to be able to > update web2py without having to make that change each time, if possible. > As noted, sort is already True, so you should be OK. There is no way to change the order in which web2py executes the models, though (other than to generate your folder and file names to produce the order you desire). Anthony --