There's something about that that still bothers me. I can imagine many circumstances under which a method is equipped to handle validation, but not unusual exceptions. In fact, I think that will be the common case. I think we need to tweak the behavior a little to fit the common case, but I'm not completely certain what the tweak should be.
Kevin On 2/9/06, Simon Belak <[EMAIL PROTECTED]> wrote: > > By declaring tg_errors parameter you are also declaring method to be > it's own error handler (for cases where no more specific hook exists). > Consequently when the exception gets raised, create is called with > exception as tg_errors. Upon second raise from within create, control is > passed to a lower layer (CherryPy) to prevent infinite loops. > > As I have said in my previous response, best idiom would be to use > specialisation. > > > Simon > > Randall wrote: > > Here's a clear example of the strange behaviour I'm observing. > > > > @turbogears.expose() > > def add(self): > > # The exception is being thrown during the next statement. > > self.form_widget = createReviewerForm() > > return DataController.add(self) > > > > @turbogears.expose() > > @turbogears.validate(form=createReviewerForm) > > def create(self, reviewer, writer, permission, tg_errors=None): > > if tg_errors: > > print tg_errors > > self.add() > > data = dict(reviewer=reviewer, writer=writer, > > permission=permission) > > try: > > # Should throw an exception because of a unique constraint. > > DataController.create(self, **data) > > except Exception, e: > > print e > > # Please raise this exception. > > raise > > > > I would expect this when create is called: > > ERROR: duplicate key violates unique constraint > > "reviewer_association_ui" > > Which I saw in standard output because of "print e". > > > > But instead TG raised this: > > ERROR: current transaction is aborted, commands ignored until end > > of transaction block > > > > The only thing I can figure is that TG is calling the create method > > twice. If that's the case, why? Why doesn't TG just throw the > > exception when it runs into it? > > > > Randall > > > > > -- Kevin Dangoor Author of the Zesty News RSS newsreader email: [EMAIL PROTECTED] company: http://www.BlazingThings.com blog: http://www.BlueSkyOnMars.com

