From: Ian B. <ia...@co...> - 2001-12-18 18:46:58
|
I've got a situation, the solution which I've used I'm not quite happy with. I was wondering if someone else had a thought... Right now there are at least three ways in which a page can be aborted -- it can require a login, you can get a permission denied error, or you can do a redirect. Since I've started doing stuff in awake(), this means I have to check in awake() if one of those conditions is true, and abort immediately. Then writeContent() or writeHTML has to abort as well. I found this awkward to do. I set two instance variables to tell whether one of these conditions occurred, so that writeContent or writeHTML would abort (with a redirect, writeHTML is aborted, but for login or permission denied, just writeContent is aborted). Normally, I might use a try:except: to capture these situations, or some other sort of factoring... but because awake() and respond() are completely seperate, I don't know how to deal with this. I can't optionally call (or not call) respond() from awake(). I really hate having flag variables, and the logic becomes more and more awkward as I add more exceptions to SitePage. So how have other people dealt with this? Ian |
From: Geoffrey T. <gta...@na...> - 2001-12-18 19:03:02
|
At 12:50 PM 12/18/01 -0600, Ian Bicking wrote: >I've got a situation, the solution which I've used I'm not quite happy >with. I was wondering if someone else had a thought... > >Right now there are at least three ways in which a page can be aborted >-- it can require a login, you can get a permission denied error, or you >can do a redirect. Since I've started doing stuff in awake(), this >means I have to check in awake() if one of those conditions is true, and >abort immediately. Then writeContent() or writeHTML has to abort as >well. > >I found this awkward to do. I set two instance variables to tell >whether one of these conditions occurred, so that writeContent or >writeHTML would abort (with a redirect, writeHTML is aborted, but for >login or permission denied, just writeContent is aborted). > >Normally, I might use a try:except: to capture these situations, or some >other sort of factoring... but because awake() and respond() are >completely seperate, I don't know how to deal with this. I can't >optionally call (or not call) respond() from awake(). I really hate >having flag variables, and the logic becomes more and more awkward as I >add more exceptions to SitePage. > >So how have other people dealt with this? I'm using a flag instance variable that I set in awake(), and I've overridden respond() sort of like this: class SitePage(Page): def respond(self, trans): if not self.shouldSkipRespond: Page.respond(self, trans) The other option would be to modify WebKit so that there's some pre-defined exception that you can raise that will basically stop processing the servlet at that point and send whatever response has been accumulated so far. Seems useful to me. Patches accepted :-) -- - Geoff Talvola gtalvola@NameConnector.com |
From: Chuck E. <Chu...@ya...> - 2001-12-19 20:00:10
|
On Tuesday 18 December 2001 11:05 am, Geoffrey Talvola wrote: > At 12:50 PM 12/18/01 -0600, Ian Bicking wrote: > >I've got a situation, the solution which I've used I'm not quite > > happy with. I was wondering if someone else had a thought... > > > >Right now there are at least three ways in which a page can be > > aborted -- it can require a login, you can get a permission denied > > error, or you can do a redirect. Since I've started doing stuff in > > awake(), this means I have to check in awake() if one of those > > conditions is true, and abort immediately. Then writeContent() or > > writeHTML has to abort as well. > > > >I found this awkward to do. I set two instance variables to tell > >whether one of these conditions occurred, so that writeContent or > >writeHTML would abort (with a redirect, writeHTML is aborted, but > > for login or permission denied, just writeContent is aborted). > > > >Normally, I might use a try:except: to capture these situations, or > > some other sort of factoring... but because awake() and respond() > > are completely seperate, I don't know how to deal with this. I > > can't optionally call (or not call) respond() from awake(). I > > really hate having flag variables, and the logic becomes more and > > more awkward as I add more exceptions to SitePage. > > > >So how have other people dealt with this? > > I'm using a flag instance variable that I set in awake(), and I've > overridden respond() sort of like this: > > class SitePage(Page): > def respond(self, trans): > if not self.shouldSkipRespond: > Page.respond(self, trans) > > The other option would be to modify WebKit so that there's some > pre-defined exception that you can raise that will basically stop > processing the servlet at that point and send whatever response has > been accumulated so far. Seems useful to me. Patches accepted :-) I've been reassigning writeContent like so: self.writeContent = self.noOp or: self.writeContent = self.writeLogin or: self.writeContent = self.writePermDenied This has the flexibility that you can determine what the page will write and you still get your header, sidebar and footer. Note that those parts (header, etc.) therefore need to be smart about unknown users, permission denied, etc. To set this up I think all that's required is that awake() have this early on: self.writeContent = self.__class__.writeContent Hmmm, sounds like another Wiki topic. -Chuck |
From: Tavis R. <ta...@ca...> - 2001-12-19 20:07:52
|
On Wednesday 19 December 2001 12:00, Chuck Esterbrook wrote: > To set this up I think all that's required is that awake() have > this early on: > self.writeContent = self.__class__.writeContent Why do you have to do this bit? |
From: Chuck E. <Chu...@ya...> - 2001-12-20 03:02:46
|
On Wednesday 19 December 2001 01:19 pm, Tavis Rudd wrote: > On Wednesday 19 December 2001 12:00, Chuck Esterbrook wrote: > > To set this up I think all that's required is that awake() have > > this early on: > > self.writeContent = self.__class__.writeContent > > Why do you have to do this bit? So that you get back to "normal". My original idea was to put that in sleep() to restore the page back to normal, but then if you experienced an exception, the restoration wouldn't occur. I suppose you could put this at the end of an if ladder if you liked: if not self.user: self.writeContent = self.writeSignIn elif self.permDenied(): self.writeContent = self.writePermDenied else: self.writeContent = self.__class__.writeContent -Chuck |