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
-~----------~----~----~----~------~----~------~--~---

Reply via email to