<type 'exceptions.AttributeError'>
Python 2.5.2: /usr/bin/python
Sat Jul 31 01:44:23 2010

A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred.

 /var/lib/python-support/python2.5/flup/server/fcgi_base.py in run(self=<flup.server.fcgi_base.Request object at 0x2487910>)
  556         """Runs the handler, flushes the streams, and ends the request."""
  557         try:
  558             protocolStatus, appStatus = self.server.handler(self)
  559         except:
  560             traceback.print_exc(file=self.stderr)
protocolStatus undefined, appStatus undefined, self = <flup.server.fcgi_base.Request object at 0x2487910>, self.server = <flup.server.fcgi.WSGIServer object at 0x137fd10>, self.server.handler = <bound method WSGIServer.handler of <flup.server.fcgi.WSGIServer object at 0x137fd10>>
 /var/lib/python-support/python2.5/flup/server/fcgi_base.py in handler(self=<flup.server.fcgi.WSGIServer object at 0x137fd10>, req=<flup.server.fcgi_base.Request object at 0x2487910>)
 1114         try:
 1115             try:
 1116                 result = self.application(environ, start_response)
 1117                 try:
 1118                     for data in result:
result = None, self = <flup.server.fcgi.WSGIServer object at 0x137fd10>, self.application = <textpress.application.StaticDispatcher object at 0x12b0b90>, environ = {'DOCUMENT_ROOT': '/var/www/christoph/htdocs', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,text/xml;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'HTTP_ACCEPT_ENCODING': 'gzip', 'HTTP_ACCEPT_LANGUAGE': 'en-us,en;q=0.5', 'HTTP_CACHE_CONTROL': 'no-cache', 'HTTP_CONNECTION': 'close', 'HTTP_HOST': 'www.tux21b.org', 'HTTP_PRAGMA': 'no-cache', ...}, start_response = <function start_response at 0x210da28>
 /home/christoph/virtualenv/tux21b.org/lib/python2.5/site-packages/textpress/application.py in __call__(self=<textpress.application.StaticDispatcher object at 0x12b0b90>, environ={'DOCUMENT_ROOT': '/var/www/christoph/htdocs', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,text/xml;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'HTTP_ACCEPT_ENCODING': 'gzip', 'HTTP_ACCEPT_LANGUAGE': 'en-us,en;q=0.5', 'HTTP_CACHE_CONTROL': 'no-cache', 'HTTP_CONNECTION': 'close', 'HTTP_HOST': 'www.tux21b.org', 'HTTP_PRAGMA': 'no-cache', ...}, start_response=<function start_response at 0x210da28>)
 1123 
 1124     def __call__(self, environ, start_response):
 1125         return self.get_handler()(environ, start_response)
 1126 
 1127 
self = <textpress.application.StaticDispatcher object at 0x12b0b90>, self.get_handler = <bound method StaticDispatcher.get_handler of <t...pplication.StaticDispatcher object at 0x12b0b90>>, environ = {'DOCUMENT_ROOT': '/var/www/christoph/htdocs', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,text/xml;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'HTTP_ACCEPT_ENCODING': 'gzip', 'HTTP_ACCEPT_LANGUAGE': 'en-us,en;q=0.5', 'HTTP_CACHE_CONTROL': 'no-cache', 'HTTP_CONNECTION': 'close', 'HTTP_HOST': 'www.tux21b.org', 'HTTP_PRAGMA': 'no-cache', ...}, start_response = <function start_response at 0x210da28>
 /home/christoph/virtualenv/tux21b.org/lib/python2.5/site-packages/textpress/application.py in __call__(self=<TextPress '/home/christoph/virtualenv/tux21b.org/instance' [tp_1385810]>, environ={'DOCUMENT_ROOT': '/var/www/christoph/htdocs', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,text/xml;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'HTTP_ACCEPT_ENCODING': 'gzip', 'HTTP_ACCEPT_LANGUAGE': 'en-us,en;q=0.5', 'HTTP_CACHE_CONTROL': 'no-cache', 'HTTP_CONNECTION': 'close', 'HTTP_HOST': 'www.tux21b.org', 'HTTP_PRAGMA': 'no-cache', ...}, start_response=<function start_response at 0x210da28>)
 1065     def __call__(self, environ, start_response):
 1066         """Make the application object a WSGI application."""
 1067         return ClosingIterator(self.dispatch_request(environ, start_response),
 1068                                [local_manager.cleanup, cleanup_session])
 1069 
global ClosingIterator = <class 'werkzeug.utils.ClosingIterator'>, self = <TextPress '/home/christoph/virtualenv/tux21b.org/instance' [tp_1385810]>, self.dispatch_request = <werkzeug.utils.SharedDataMiddleware object at 0x1943f90>, environ = {'DOCUMENT_ROOT': '/var/www/christoph/htdocs', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,text/xml;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'HTTP_ACCEPT_ENCODING': 'gzip', 'HTTP_ACCEPT_LANGUAGE': 'en-us,en;q=0.5', 'HTTP_CACHE_CONTROL': 'no-cache', 'HTTP_CONNECTION': 'close', 'HTTP_HOST': 'www.tux21b.org', 'HTTP_PRAGMA': 'no-cache', ...}, start_response = <function start_response at 0x210da28>, global local_manager = <LocalManager storages: 1>, local_manager.cleanup = <bound method LocalManager.cleanup of <LocalManager storages: 1>>, global cleanup_session = <bound method ScopedSession.remove of <sqlalchemy.orm.scoping.ScopedSession object at 0x1336ed0>>
 /home/christoph/virtualenv/tux21b.org/lib/python2.5/site-packages/Werkzeug-0.3.1-py2.5.egg/werkzeug/utils.py in __call__(self=<werkzeug.utils.SharedDataMiddleware object at 0x1943f90>, environ={'DOCUMENT_ROOT': '/var/www/christoph/htdocs', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,text/xml;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'HTTP_ACCEPT_ENCODING': 'gzip', 'HTTP_ACCEPT_LANGUAGE': 'en-us,en;q=0.5', 'HTTP_CACHE_CONTROL': 'no-cache', 'HTTP_CONNECTION': 'close', 'HTTP_HOST': 'www.tux21b.org', 'HTTP_PRAGMA': 'no-cache', ...}, start_response=<function start_response at 0x210da28>)
  813                     break
  814         if stream_maker is None or not self.is_allowed(real_filename):
  815             return self.app(environ, start_response)
  816         from mimetypes import guess_type
  817         guessed_type = guess_type(real_filename)
self = <werkzeug.utils.SharedDataMiddleware object at 0x1943f90>, self.app = <bound method TextPress.dispatch_request of <Tex...ph/virtualenv/tux21b.org/instance' [tp_1385810]>>, environ = {'DOCUMENT_ROOT': '/var/www/christoph/htdocs', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,text/xml;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'HTTP_ACCEPT_ENCODING': 'gzip', 'HTTP_ACCEPT_LANGUAGE': 'en-us,en;q=0.5', 'HTTP_CACHE_CONTROL': 'no-cache', 'HTTP_CONNECTION': 'close', 'HTTP_HOST': 'www.tux21b.org', 'HTTP_PRAGMA': 'no-cache', ...}, start_response = <function start_response at 0x210da28>
 /home/christoph/virtualenv/tux21b.org/lib/python2.5/site-packages/textpress/application.py in dispatch_request(self=<TextPress '/home/christoph/virtualenv/tux21b.org/instance' [tp_1385810]>, environ={'DOCUMENT_ROOT': '/var/www/christoph/htdocs', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,text/xml;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'HTTP_ACCEPT_ENCODING': 'gzip', 'HTTP_ACCEPT_LANGUAGE': 'en-us,en;q=0.5', 'HTTP_CACHE_CONTROL': 'no-cache', 'HTTP_CONNECTION': 'close', 'HTTP_HOST': 'www.tux21b.org', 'HTTP_PRAGMA': 'no-cache', ...}, start_response=<function start_response at 0x210da28>)
 1026         try:
 1027             endpoint, args = self.url_adapter.match(request.path)
 1028             response = self.views[endpoint](request, **args)
 1029         except NotFound, e:
 1030             response = render_response('404.html')
response undefined, self = <TextPress '/home/christoph/virtualenv/tux21b.org/instance' [tp_1385810]>, self.views = {'admin/about_textpress': <function do_about_textpress at 0x15e0668>, 'admin/approve_comment': <function do_approve_comment at 0x15dbed8>, 'admin/basic_options': <function do_basic_options at 0x15df7d0>, 'admin/block_comment': <function do_block_comment at 0x15df050>, 'admin/bookmarklet': <function do_bookmarklet at 0x15ca7d0>, 'admin/browse_uploads': <function do_browse_uploads at 0x15e0de8>, 'admin/cache': <function do_cache at 0x15dfd70>, 'admin/change_password': <function do_change_password at 0x15e0758>, 'admin/configuration': <function do_configuration at 0x15dfe60>, 'admin/configure_theme': <function do_configure_theme at 0x15dfaa0>, ...}, endpoint = 'blog/atom_feed', request = <textpress.application.Request object at 0x249af90>, args = {'author': u'tux21b'}
 /home/christoph/virtualenv/tux21b.org/textpress/textpress/cache.py in oncall(request=<textpress.application.Request object at 0x249af90>, *args=(), **kwargs={'author': u'tux21b'})
  154 
  155             if response is None:
  156                 response = f(request, *args, **kwargs)
  157 
  158             # make sure it's one of our request objects so that we
response = None, f = <function do_atom_feed at 0x15785f0>, request = <textpress.application.Request object at 0x249af90>, args = (), kwargs = {'author': u'tux21b'}
 /home/christoph/virtualenv/tux21b.org/textpress/textpress/views/blog.py in do_atom_feed(request=<textpress.application.Request object at 0x249af90>, author=u'tux21b', year=None, month=None, day=None, tag=None, post_slug=None)
  410     if post_slug is None:
  411         for post in Post.objects.get_list(year, month, day, tag, author,
  412                                           per_page=10, as_list=True):
  413             links = [link.as_dict() for link in post.links]
  414             feed.add(post.title, unicode(post.body), content_type='html',
per_page undefined, as_list undefined, builtin True = True
 /home/christoph/virtualenv/tux21b.org/lib/python2.5/site-packages/textpress/models.py in get_list(self=<textpress.models.PostManager object at 0x1454410>, year=None, month=None, day=None, tag=None, author=u'tux21b', page=1, per_page=10, ignore_role=False, as_list=True)
  259         # show all posts for an author
  260         elif author is not None:
  261             url_args['username'] = author.username
  262             endpoint = 'blog/show_author'
  263         # show the blog index
url_args = {}, author = u'tux21b', author.username undefined

<type 'exceptions.AttributeError'>: 'unicode' object has no attribute 'username'
      args = ("'unicode' object has no attribute 'username'",)
      message = "'unicode' object has no attribute 'username'"