Hi Diez,

Yes (if I understand correcly your point) I import the error class
just before defining the exception-catching expression, at the top of
controllers.py (Outside of the Root controller, and declaring it
inside the Root controller doesn't change anything either):

from sqlalchemy.orm.exc import NoResultFound
catch_excep_expr="isinstance(tg_exceptions,
(KeyError,TypeError,NoResultFound))"

By the way I'm not getting an import error, but a NameError

On 28 jan, 12:58, "Diez B. Roggisch" <[email protected]> wrote:
> On Thursday 28 January 2010 12:47:38 A. wrote:
>
>
>
> > Hi all,
>
> > I'm using tg1.1 with sqlalchemy
> > I'm trying to manage all exceptions using @exception_handler
> > decorator. It works fine for ValueError, TypeError etc.
> > But for now I am unable to deal with Database Errors using this same
> > technique:
>
> > here's how the code looks like:
>
> > 1) Definition of the handler,  in model.py, before the Root
> > controller:
>
> > def general_except_handler(self,tg_exceptions=None,**kw):
> >     log.error(u'*'+str(datetime.datetime.now())+u'* '+str
> > (request.path) + u" Exception: " +  unicode(str
> > (tg_exceptions),'latin'))
> >     flash(u"exception::Exception: " + unicode(str
> > (tg_exceptions),'latin'))
> >     redirect('/')
> >     return dict()
>
> > 2) Definition, just below the handler, of the catching expression
>
> > catch_excep_expr="isinstance(tg_exceptions, (KeyError,TypeError))"
>
> > 3) I then use it for the controllers with exception_handler decorator
>
> >     @expose(template="resyweb.templates.generic_form_display")
> >     @exception_handler(general_except_handler,catch_excep_expr)
> >     @identity.require(identity.in_group("admin"))
> >     def edit_reviewer(self,**kw):
>
> > It works fine but when I try to include something like SQLAlchemyError
> > (previously imported with
>
> > from sqlalchemy.exceptions import SQLAlchemyError ), I cannot start
> > the application:
>
> > ...
> >  in Root
> >     @identity.require(identity.in_group("admin"))
> >   File "c:\python25\lib\site-packages\TurboGears-1.1-py2.5.egg
> > \turbogears\errorh
> > andling.py", line 133, in register
> >     dispatch_error_adaptor(handler or func))
> >   File "C:\Python25\lib\site-packages\decoratortools-1.7-py2.5.egg\peak
> > \util\dec
> > orators.py", line 601, in do_decorate
> >   File "build\bdist.win32\egg\peak\rules\core.py", line 197, in
> > callback
> >   File "build\bdist.win32\egg\peak\rules\core.py", line 190, in
> > register_for_cla
> > ss
> >   File "build\bdist.win32\egg\peak\rules\core.py", line 65, in
> > parse_rule
> >   File "build\bdist.win32\egg\peak\rules\core.py", line 153, in
> > __call__
> >   File "build\bdist.win32\egg\peak\rules\predicates.py", line 517, in
> > _parse_str
> > ing
> >   File "build\bdist.win32\egg\peak\rules\ast_builder.py", line 424, in
> > parse_exp
> > r
> >   File "build\bdist.win32\egg\peak\rules\ast_builder.py", line 419, in
> > build
> >   File "build\bdist.win32\egg\peak\rules\ast_builder.py", line 51, in
> > com_binary
>
> >   File "build\bdist.win32\egg\peak\rules\predicates.py", line 189, in
> > And
> >   File "build\bdist.win32\egg\peak\rules\ast_builder.py", line 419, in
> > build
> >   File "build\bdist.win32\egg\peak\rules\ast_builder.py", line 217, in
> > atom
> >   File "build\bdist.win32\egg\peak\rules\ast_builder.py", line 419, in
> > build
> >   File "build\bdist.win32\egg\peak\rules\ast_builder.py", line 51, in
> > com_binary
>
> >   File "build\bdist.win32\egg\peak\rules\predicates.py", line 189, in
> > And
> >   File "build\bdist.win32\egg\peak\rules\ast_builder.py", line 419, in
> > build
> >   File "build\bdist.win32\egg\peak\rules\ast_builder.py", line 217, in
> > atom
> >   File "build\bdist.win32\egg\peak\rules\ast_builder.py", line 419, in
> > build
> >   File "build\bdist.win32\egg\peak\rules\ast_builder.py", line 178, in
> > power
> >   File "build\bdist.win32\egg\peak\rules\ast_builder.py", line 284, in
> > com_call_
> > function
> >   File "build\bdist.win32\egg\peak\rules\predicates.py", line 199, in
> > CallFunc
> >   File "build\bdist.win32\egg\peak\rules\predicates.py", line 233, in
> > apply_meta
>
> >   File "build\bdist.win32\egg\peak\rules\predicates.py", line 213, in
> > parse
> >   File "build\bdist.win32\egg\peak\rules\ast_builder.py", line 419, in
> > build
> >   File "build\bdist.win32\egg\peak\rules\ast_builder.py", line 217, in
> > atom
> >   File "build\bdist.win32\egg\peak\rules\ast_builder.py", line 419, in
> > build
> >   File "build\bdist.win32\egg\peak\rules\ast_builder.py", line 356, in
> > testlist_
> > gexp
> >   File "build\bdist.win32\egg\peak\rules\ast_builder.py", line 51, in
> > com_binary
>
> >   File "build\bdist.win32\egg\peak\rules\codegen.py", line 428, in
> > method
> >   File "build\bdist.win32\egg\peak\rules\ast_builder.py", line 419, in
> > build
> >   File "build\bdist.win32\egg\peak\rules\ast_builder.py", line 10, in
> > <lambda>
> >   File "build\bdist.win32\egg\peak\rules\codegen.py", line 347, in
> > Name
> > NameError: SQLAlchemyError
>
> > Would anyone know how to find a solution for this problem, or maybe
> > another technique for catching application-wide database exceptions?
>
> I *think* this is because you need to have the name SQLAlchemy defined in the
> module you define the handler in. So do you import it in your controller
> file?
>
> Diez

-- 
You received this message because you are subscribed to the Google Groups 
"TurboGears" 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/turbogears?hl=en.

Reply via email to