Sorry for being picky on this. I think the database is not a suitable place either to store a 'application instance initialized flag'. Reason: 1) the db can be used by more than one instance of the app 2) if the app stops execution without setting back the 'db record' to 'app not initialized' - like it happens when you remove the power - then the application will not work any more because the code will refer to objects which are not created yet because the one-time- initialization per app was not executed.
I'm not aware how application wide vars in web2py cache are working, but I assume it could be a viable option. what do you think? On Jun 8, 2:43 pm, mdipierro <mdipie...@cs.depaul.edu> wrote: > You are right. Not in session. You can store an application wide var > in cache but I would suggest using the db for this. Anyway, I will > post an example. > > On Jun 8, 4:27 am, Hans <johann.scheibelho...@easytouch-edv.com> > wrote: > > > The log file initialization code must be executed once when the > > application starts and should not be executed multiple times (e.g. not > > once per user and not once per controller execution). > > > I'm not aware that in a session I can store a application-wide global > > variable - independent of the user. > > > Can you provide a link or example code for execution only once per > > application (e.g. initialization function) ? > > > On Jun 5, 10:19 pm, mdipierro <mdipie...@cs.depaul.edu> wrote: > > > > can you store it into a session? > > > > On Jun 5, 2:11 pm, Hans <johann.scheibelho...@easytouch-edv.com> > > > wrote: > > > > > The problem I have with my code for generating log files that the part > > > > of the code (see first posting in this thread) which is outside any > > > > function in the controller (because it should be available for all > > > > functions in this controller) is executed every time a function is > > > > called. I have not found a way to execute it only once intitially and > > > > prevent multiple executions. Hence it registeres log handlers every > > > > time the controller is executed which causes every log line to be > > > > written multiple times into the log file. > > > > > The following did not work: > > > > > try: > > > > done_once > > > > except: > > > > place code to be executed only once here > > > > global done_once > > > > done_once=true > > > > > because the variable done_once is undefined each time the controller > > > > is executed again. > > > > > How can a code in the controller be executed only once? > > > > Also completely different approach suggestions are welcome! > > > > > Thanks, > > > > Hans > > > > On Jun 5, 4:36 pm, mdipierro <mdipie...@cs.depaul.edu> wrote: > > > > > > Sorry Hans, I still do not understand the problem. > > > > > > code outside function is executed when a function in the controller is > > > > > called (whatever the function) code in the function is executed only > > > > > when that function is called. A call to redirect causes the browser to > > > > > make another request thus the controller is executed again. > > > > > > Massimo > > > > > > On Jun 5, 8:08 am, Hans <johann.scheibelho...@easytouch-edv.com> > > > > > wrote: > > > > > > > Correction: redirect() usage is NOT causing the problem. Every call > > > > > > of > > > > > > a controller function also executes > > > > > > 1) general parts of the model (db.py) > > > > > > 2) general parts of the controller (default.py) > > > > > > 3) the requested function in controller > > > > > > > In my case every click to an menu function adds another multiple for > > > > > > log entries. > > > > > > > Thinking about the response.menu example which gives you different > > > > > > menu options depending on the user being logged in or not I'm > > > > > > convinced that the general controller sections are executed before > > > > > > each requested function. That's good for the dynamically changing > > > > > > menu > > > > > > and other needs. > > > > > > > For a log file function which should be available for the entire > > > > > > controller I need to make sure its executed only once. Is there a > > > > > > simple way to do that or a different way to achieve a log file > > > > > > function (similar like my example up in this thread) available for > > > > > > the > > > > > > entire controller? > > > > > > > Thanks, > > > > > > Hans > > > > > > On Jun 5, 2:34 pm, Hans <johann.scheibelho...@easytouch-edv.com> > > > > > > wrote: > > > > > > > > yes confirmed, the controller is called multiple times. the > > > > > > > reason I > > > > > > > found is that the redirect() statements I use cause this. every > > > > > > > redirect() seems to call the controller, not only the redirection > > > > > > > target function. > > > > > > > > for example my index is mainly a redirect function, based on > > > > > > > settings > > > > > > > its for instance doing > > > > > > > redirect(URL(r=request,f='f1')) > > > > > > > > then also in other functions I use redirects e.g. based on rights/ > > > > > > > settings. > > > > > > > > I'm using 1.63.5 on WinXP SP3. > > > > > > > > Is there a better function than redirect() for avoiding to call > > > > > > > the > > > > > > > general controller stuff multiple times? > > > > > > > Is redirect() supposed to also call the general controller stuff > > > > > > > or > > > > > > > only directly the redirection target function ? > > > > > > > > Thanks, > > > > > > > Hans > > > > > > > On Jun 4, 10:48 pm, mdipierro <mdipie...@cs.depaul.edu> wrote: > > > > > > > > > Odd I think your controller is being called 3 times. Is that > > > > > > > > possible? > > > > > > > > I would add a print statement to check. > > > > > > > > > On Jun 4, 2:29 pm, Hans <johann.scheibelho...@easytouch-edv.com> > > > > > > > > wrote: > > > > > > > > > > I tried to define a global logging for a web2py app. The > > > > > > > > > problem with > > > > > > > > > that is that if I place the following code in my default.py > > > > > > > > > controller > > > > > > > > > or db.py model then in both cases its executed more than > > > > > > > > > once...resulting into having every log line written multiple > > > > > > > > > times > > > > > > > > > into the log file. > > > > > > > > > > either starting the default.py or db.py with those lines is > > > > > > > > > yielding > > > > > > > > > the same result > > > > > > > > > import logging, logging.handlers > > > > > > > > > > # Make a global logging object. > > > > > > > > > lox = logging.getLogger("log") > > > > > > > > > lox.setLevel(logging.DEBUG) > > > > > > > > > > # This handler writes everything to a file. > > > > > > > > > h1 = logging.FileHandler("/var/log/myapp.log") > > > > > > > > > f = logging.Formatter("%(levelname)s %(asctime)s > > > > > > > > > %(funcName)s % > > > > > > > > > (lineno)d %(message)s") > > > > > > > > > h1.setFormatter(f) > > > > > > > > > h1.setLevel(logging.DEBUG) > > > > > > > > > lox.addHandler(h1) > > > > > > > > > > # This handler emails me anything that is an error or > > > > > > > > > worse. > > > > > > > > > h2 = logging.handlers.SMTPHandler('localhost', > > > > > > > > > '....@test.com', > > > > > > > > > ['tobenotif...@test.com'], 'ERROR log') > > > > > > > > > h2.setLevel(logging.ERROR) > > > > > > > > > h2.setFormatter(f) > > > > > > > > > lox.addHandler(h2) > > > > > > > > > > log usage example in controller... > > > > > > > > > def index(): > > > > > > > > > log = logging.getLogger("log") > > > > > > > > > log.debug("starting...") > > > > > > > > > ....do something > > > > > > > > > log.debug("finishing...") > > > > > > > > > return() > > > > > > > > > > log file looks like: > > > > > > > > > DEBUG 2009-06-04 20:27:45,617 index 1 starting... > > > > > > > > > DEBUG 2009-06-04 20:27:45,617 index 1 starting... > > > > > > > > > DEBUG 2009-06-04 20:27:45,617 index 1 starting... > > > > > > > > > DEBUG 2009-06-04 20:27:50,617 index 1 finishing... > > > > > > > > > DEBUG 2009-06-04 20:27:50,617 index 1 finishing... > > > > > > > > > DEBUG 2009-06-04 20:27:50,617 index 1 finishing... > > > > > > > > > > how can I fix the 'multiple problem' ? > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py Web Framework" group. To post to this group, send email to web2py@googlegroups.com To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---