On 4/4/07, Michael Bayer <[EMAIL PROTECTED]> wrote:
> On Apr 4, 2007, at 7:20 PM, Shannon -jj Behrens wrote:
>
> >
> > I call flush in my parent class controller.
> >
> > I have one controller where I need to try to flush before the method
> > is done because I need to be sure the user has picked a unique
> > username.  The code looks like:
> >
> >         class Continue(Exception):
> >             pass
> >             ...
> >             # Update the dbsession.
> >             ...
> >             try:
> >                 self.dbsession.flush()
> >                 c.action_results = "Account updated."
> >                 raise Continue
> >             except SQLError, e:
> >                 try:
> >                     is_duplicate_entry = \
> >                         e.orig.args[1].startswith("Duplicate entry")
> >                     if not is_duplicate_entry:
> >                         raise ValueError
> >                 except (AttributeError, IndexError, ValueError),
> > ignored:
> >                     raise e            # We can't handle e.  Re-
> > raise it.
> >                 else:
> >                     c.action_results = """\
> > Sorry, that email address has already been taken."""
> >                     self.dbsession.clear()
> >                     if not request.environ.has_key('paste.testing'):
> >                         time.sleep(2)  # Prevent directory harvest
> > attacks.
> >                     raise Continue
> >
> >         except Continue:
> >             return render_response('account')
> >
> > I think this is fine.
> >
> > Does that make sense to you?
>
>
> is that your controller code ?   seems pretty explicit, which is fine
> because thats  what you needed there.  but im looking for just your
> basic "add"/"edit" methods, that just load some objects, change them
> around, and its done.  would rather not have *any* explicit step that
> has to be repeated in controller methods for a basic flush/commit
> (other than a decorator).  otherwise it basically means putting
> "session.flush()" at the end of every controller right above the
> "return" and id rather not have to do that...not just for appearance,
> but also because abstracting away the transactional strategy it
> leaves room for it to be tuned/modified at the library/
> configurational level.

Sorry that I was unclear.  I rely on the parent class to flush the
session *except* in this one case.  Hence, I was suggesting that if
you *need* to do stuff after the flush, you can always call flush
explicitly.  You're the ORM guru, but that approach worked for my
needs.

Best Regards,
-jj

-- 
http://jjinux.blogspot.com/

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"pylons-discuss" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/pylons-discuss?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to