Hi folks,
I'm trying to get validation, error_handling & exception handling working on a login-form based app... 3 days later... and different approaches later, just can't crack this thing... I created a simple "tg-admin quickstart dapp" app. Did not touch any of the generated kid templates (login especially ). I just modified the controller as follows... I followed the instructions to the "t"... in http://docs.turbogears.org/1.0/ErrorHandling The index controller is to provide the login page (based on login.kid). The action param points to "/validate". Any non-blank, alphanumeric (plus "-" or "_") based id/pwd should cause the validation to succeed... pretty brain-dead app... When I acces "/", I get the login page. When I don't enter any data, and hit enter (to cause validation & exception handling), it gives me a 500 error - succeeds with the error_handler() but appears to fail at the 1st exception_handler registered for "/validate" Could someone please look at this and help out. Can't seem to make any progress on this - a simple app, that follows std recipes - and no luck :-( Thanks much, /venkat ------------------- class Root(controllers.RootController): # login error handler def login_error_handler(self, tg_errors=None): previous_url = "/validateuser" forward_url = None # login.kid template will XML-ize response snippet (msg) # msg = "Validation error: Please enter valid username & " + \ "password and re-login." cherrypy.response.status=403 return dict(message=msg, previous_url=previous_url, logging_in=True, original_parameters=cherrypy.request.params, forward_url=forward_url, now=time.ctime()) # login exception handlers def login_value_handler(self, tg_exceptions=None): """only called for value errors""" return dict(handling_value=True,exception=str(tg_exceptions)) def login_index_handler(self, tg_exceptions=None): """only called for index errors""" return dict(handling_index=True,exception=str(tg_exceptions)) # login page # @turbogears.expose(template="dapp.templates.login") def index(self, *args, **kwargs): print get_args_kwargs("\n******* Hitting '/index' *******\n", *args, **kwargs) # normal login attempt - assume not logged in # msg = _("Please login...") previous_url = "/validateuser" forward_url = cherrypy.request.headers.get("Referer", "/") cherrypy.response.status=403 return dict(message=msg, previous_url=previous_url, logging_in=True, original_parameters=cherrypy.request.params, forward_url=forward_url, now=time.ctime()) # validation controller # @turbogears.expose(template="dapp.templates.login") @turbogears.validate(validators = { # Only letters/numbers/underscores/dashes are allowed for fields # "user_name": validators.PlainText(not_empty=True), "password": validators.PlainText(not_empty=True) }) @turbogears.error_handler(login_error_handler) @turbogears.exception_handler(login_value_handler,"isinstance(tg_exceptions,ValueError)") @turbogears.exception_handler(login_index_handler,rules="isinstance(tg_exceptions,IndexError)") def validateuser(self, *args, **kw): print get_args_kwargs("******* Hitting '/validateuser' ******* ", *args, **kw) # If we are here, we can accept any validated userid/pwd combo... # print "Happy TurboGears Controller Responding For Duty" forward_url = "/welcome" raise redirect(forward_url) # after sccesfull login # @turbogears.expose(template="dapp.templates.welcome") def welcome(self, *args, **kwargs): return dict(now=time.ctime()) # Default catch-all # @turbogears.expose() def default(self, *args, **kwargs): return get_args_kwargs("Default:", *args, **kwargs) ---------- Traceback at the browser: Page handler: <bound method Root.validateuser of <dapp.controllers.Root object at 0xb6dcc20c>> Traceback (most recent call last): File "/usr/local/Python2.4/lib/python2.4/site-packages/CherryPy-2.2.1-py2.4.egg/cherrypy/_cphttptools.py", line 105, in _run self.main() File "/usr/local/Python2.4/lib/python2.4/site-packages/CherryPy-2.2.1-py2.4.egg/cherrypy/_cphttptools.py", line 254, in main body = page_handler(*virtual_path, **self.params) File "<string>", line 3, in validateuser File "/usr/local/Python2.4/lib/python2.4/site-packages/TurboGears-1.0b1-py2.4.egg/turbogears/controllers.py", line 326, in expose output = database.run_with_transaction( File "<string>", line 5, in run_with_transaction File "/usr/local/Python2.4/lib/python2.4/site-packages/TurboGears-1.0b1-py2.4.egg/turbogears/database.py", line 246, in so_rwt retval = func(*args, **kw) File "<string>", line 5, in _expose File "/usr/local/Python2.4/lib/python2.4/site-packages/TurboGears-1.0b1-py2.4.egg/turbogears/controllers.py", line 343, in <lambda> mapping, fragment, args, kw))) File "/usr/local/Python2.4/lib/python2.4/site-packages/TurboGears-1.0b1-py2.4.egg/turbogears/controllers.py", line 380, in _execute_func return _process_output(output, template, format, content_type, mapping, fragment) File "/usr/local/Python2.4/lib/python2.4/site-packages/TurboGears-1.0b1-py2.4.egg/turbogears/controllers.py", line 74, in _process_output fragment=fragment) File "/usr/local/Python2.4/lib/python2.4/site-packages/TurboGears-1.0b1-py2.4.egg/turbogears/view/base.py", line 131, in render return engine.render(**kw) File "/usr/local/Python2.4/lib/python2.4/site-packages/TurboKid-0.9.9-py2.4.egg/turbokid/kidsupport.py", line 174, in render return t.serialize(encoding=self.defaultencoding, output=format, fragment=fragment) File "/usr/local/Python2.4/lib/python2.4/site-packages/kid-0.9.3-py2.4.egg/kid/__init__.py", line 236, in serialize return serializer.serialize(self, encoding, fragment) File "/usr/local/Python2.4/lib/python2.4/site-packages/kid-0.9.3-py2.4.egg/kid/serialization.py", line 51, in serialize text = list(self.generate(stream, encoding, fragment)) File "/usr/local/Python2.4/lib/python2.4/site-packages/kid-0.9.3-py2.4.egg/kid/serialization.py", line 329, in generate for ev, item in self.apply_filters(stream): File "/usr/local/Python2.4/lib/python2.4/site-packages/kid-0.9.3-py2.4.egg/kid/pull.py", line 210, in _coalesce for ev, item in stream: File "/usr/local/Python2.4/lib/python2.4/site-packages/kid-0.9.3-py2.4.egg/kid/filter.py", line 21, in transform_filter for ev, item in apply_matches(stream, template, templates, apply_func): File "/usr/local/Python2.4/lib/python2.4/site-packages/kid-0.9.3-py2.4.egg/kid/filter.py", line 31, in apply_matches item = stream.expand() File "/usr/local/Python2.4/lib/python2.4/site-packages/kid-0.9.3-py2.4.egg/kid/pull.py", line 99, in expand for ev, item in self._iter: File "/usr/local/Python2.4/lib/python2.4/site-packages/kid-0.9.3-py2.4.egg/kid/pull.py", line 168, in _track for p in stream: File "/usr/local/Python2.4/lib/python2.4/site-packages/kid-0.9.3-py2.4.egg/kid/pull.py", line 210, in _coalesce for ev, item in stream: File "/scratch/sampleapps/dapp/dapp/dapp/templates/login.py", line 77, in _pull File "/usr/local/Python2.4/lib/python2.4/site-packages/kid-0.9.3-py2.4.egg/kid/pull.py", line 123, in strip for (ev, item) in self._iter: File "/usr/local/Python2.4/lib/python2.4/site-packages/kid-0.9.3-py2.4.egg/kid/pull.py", line 168, in _track for p in stream: File "/usr/local/Python2.4/lib/python2.4/site-packages/kid-0.9.3-py2.4.egg/kid/pull.py", line 210, in _coalesce for ev, item in stream: File "/usr/local/Python2.4/lib/python2.4/site-packages/kid-0.9.3-py2.4.egg/kid/pull.py", line 374, in __iter__ for (ev, stuff) in self._expat_stream(): File "/usr/local/Python2.4/lib/python2.4/site-packages/kid-0.9.3-py2.4.egg/kid/pull.py", line 346, in _expat_stream feed(data) File "/usr/local/Python2.4/lib/python2.4/site-packages/kid-0.9.3-py2.4.egg/kid/pull.py", line 414, in feed raise e ExpatError: not well-formed (invalid token): line 1, column 52 --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---

