> > This code MUST be executed. There is no way to import it because > request.client only exist when the request arrives and we do not want > to re import modules on every request.
Flask accomplishes this perfectly by placing the request in a context thread local. It only exists the the thread local when a request actually arrives. So from flask import request will fail if there is actually no request! I am learning more about thread locals at the moment, but it seems reasonable enough and it works. -- Thadeus On Thu, Jun 10, 2010 at 4:53 PM, mdipierro <mdipie...@cs.depaul.edu> wrote: > The conclusion is right but it is more complicated than that. This is > not a syntactical issue. > > Let' say in a model we have: > > db.define_table('a',Field('b',default=request.client)) > > This code MUST be executed. There is no way to import it because > request.client only exist when the request arrives and we do not want > to re import modules on every request. > > The easiness comes from the fact that you can code assuming there is a > client while in other frameworks you need to be careful and wrap > everything into functions that eventually will be called when the > request arrives and the request is passed around explicitly. In all > other frameworks, the imports are resolved before an http request > arrives, not after. This is why for example, they have issue with > multiple database connections, client dependent database connections, > real time migrations, etc. Moreover, as a result they need to monitor > py files for changes are reload them when changes occur. This > mechanism works ONLY for pure-python web servers and not with apache > for example. Moreover this is subject to all the reload caveats > http://docs.python.org/library/functions.html about old global > variables being retained on reload in the module __dict__ (this may > cause memory leaks and data leaking from one session to another thus > causing security issues). We make a clean exec for every request and > we have no memory leaks and no data pollution as well a clean syntax. > > There will be no import of models in web2py or it will not be web2py > any more. > > This can be reassessed in web3py but as I stated before: IF there is a > web3py for me to be interesting it has to be completely different. It > may not even be in Python. Perhaps we should look into Cobra (http:// > cobra-language.com/). > > Massimo > > > On Jun 10, 3:44 pm, Thadeus Burgess <thade...@thadeusb.com> wrote: >> This is what I desire from this >> >> Web2py applications to be importable python modules >> Along with [A] your models immediately become python modules that you >> can import. This solves my need to share models between web2py apps.' >> >> Web2py has a Top down approach, where other frameworks use a down-up >> approach. Meaning, web2py executes the models THEN looks at the >> request, determines the controller and executes it, then executes the >> view. Everyone else does the down-top approach, where the request >> comes in, it goes to the controller, the controller decides what >> models to IMPORT and then executes itself and even decides what view >> to return if any! >> >> This is what the discussion has turned into, a design pattern, web2py >> can never satisfy the down-top approach because of backwards >> compatibility. Perhaps web3py. >> >> -- >> Thadeus >> >> On Thu, Jun 10, 2010 at 3:24 PM, Yarko Tymciurak >> >> <resultsinsoftw...@gmail.com> wrote: >> > On Jun 10, 1:17 pm, mdipierro <mdipie...@cs.depaul.edu> wrote: >> >> If we are going to work on this we may as well solve a different >> >> problem. >> >> >> Executing models take time. If you have 500 tables each defined it its >> >> own file, it takes lots of time. Yet not all actions need all tables >> >> so we may want to implement a dependency not just among models but >> >> among actions and models so that not-needed models are not executed. >> >> >> If the dependencies are expressed in the model files themselves they >> >> > ... I assume you meant to say "...in controller files..." >> >> >> still needs to be executed (or at least bytceode compiled) to be >> >> resolved and that defies the purpose. >> >> Moreover this would be similar to the python import mechanism (from a >> >> user prospective) and thus an example of reinventing the wheel. >> >> > ... if I am following you, then why do we not just import the needed >> > models? I mean, really, seriously - why the need to exec? >> >> > It seems like that is a question on the table. >> >> >> Having a centralized place where these dependencies are expressed has >> >> advantages: >> >> - sets us a apart from everybody and we do not need to reinvent the >> >> wheel >> >> > Global variables in FORTRAN had proponents too - but the need to >> > manage complexity drove a different structure in programming. >> > (That is to say, I am not seeing, am challenging that there are _any_ >> > REAL advantages to centralized dependency management;) >> >> > ==> "set us apart" is not any kind of advantage, if it does not >> > provide tangible benefit. (that is, benefit may drive what sets >> > web2py apart, but making "set apart" a motive is not beneficial in and >> > of itself - this should be very clear). >> >> > If there is a current wheel that is useful, use it. >> >> > $ python >> >>>> import this >> >> > one way is better; if there is something that currently solves the >> > problem, use it (don't 'reinvent the wheel'; _and_ don't look for >> > problems as an excuse to invent a wheel) >> >> >> - it will make the structure of the application easier to read in a >> >> single place >> >> > ... I don't agree, don't see this as beneficial; harder to maintain; >> > related information scattered; >> >> >> - it will make the app faster >> >> > ... this is not a benefit - it is a goal; you are implying that >> > centralized models are the only way to make an app faster; I'm not >> > buying; I don't think that's true at all. >> >> >> - it will be easier to implement without breaking backward >> >> compatibility (and there it will get done) >> >> > .... simplicity of implementation is a benefit to _you_; but (while >> > that may be important to you), simplicity to implement applications >> > (since it happens more frequently) is first in line; _then_ >> > simplicity of implementation, practicality; >> >> > .... I don't see this as a benefit of central place; >> >> >> - it will open the possibility for dependencies to be auto-discovered >> >> and therefore the config-file auto-generated >> >> > ... actually, you could generate (if that were the most practical way) >> > a central dependency list from local declarations (which is how >> > Windows Registry works); >> >> > I don't see this is a benefit of "central place", rather a practical >> > consideration. >> >> > ... this is beginning to feel like an old tet-a-tet. >> >> > ... >