Hi all,

I have setup auth and authz as described in the docs, together with open_id. 
For testing, I have made a simple secured view and have also set up the 
"Forbidden" view as a login form.
As anonymous, logging in by hand and then visiting the secured page works 
fine. But when I directly access the secured page, instead of presenting the 
login form, an error occurs. From the Apache log:

Error - <type 'exceptions.AttributeError'>: 'Forbidden' object has no 
attribute '__name__'
URL: http://morrigan.annwn.local/3/secure
File 
'/home/my_env/lib/python2.6/site-packages/WebError-0.10.3-py2.6.egg/weberror/errormiddleware.py',
 
line 162 in __call__
  app_iter = self.application(environ, sr_checker)
File 
'/home/my_env/lib/python2.6/site-packages/repoze.tm2-1.0b1-py2.6.egg/repoze/tm/__init__.py',
 
line 23 in __call__
  result = self.application(environ, save_status_and_headers)
File '/home/my_env/lib/python2.6/site-packages/pyramid/router.py', line 180 
in __call__
  response = view_callable(why, request)
File '/home/my_env/lib/python2.6/site-packages/pyramid/config.py', line 2824 
in _rendered_view
  response = wrapped_view(context, request)
File '/home/my_env/lib/python2.6/site-packages/pyramid/config.py', line 2906 
in _class_view
  response = getattr(inst, attr)()
File '/home/my_env/OriNet/orinet/views/whoami.py', line 27 in login
  do_login_url = resource_url(self.context, self.request, 'dologin.html')
File '/home/my_env/lib/python2.6/site-packages/pyramid/url.py', line 290 in 
resource_url
  resource_url = context_url()
File '/home/my_env/lib/python2.6/site-packages/pyramid/traversal.py', line 
692 in __call__
  physical_path = resource_path(resource)
File '/home/my_env/lib/python2.6/site-packages/pyramid/traversal.py', line 
159 in resource_path
  return _join_path_tuple(resource_path_tuple(resource, *elements))
File '/home/my_env/lib/python2.6/site-packages/pyramid/traversal.py', line 
369 in resource_path_tuple
  return tuple(_resource_path_list(resource, *elements))
File '/home/my_env/lib/python2.6/site-packages/pyramid/traversal.py', line 
381 in _resource_path_list
  path = [loc.__name__ or '' for loc in lineage(resource)]
AttributeError: 'Forbidden' object has no attribute '__name__'

The code that produces it is:

class WhoAmI(object):
    def __init__(self, context, request):
        self.request = request
        self.context = context

    @action(renderer="whoami/login.mak")
    # Get also called on a Forbidden exception
    @view_config(context=Forbidden, renderer="whoami/login.mak")
    def login(self):
        #login_url = route_url('whoami', self.request, action="login")
        do_login_url = resource_url(self.context, self.request, 
'dologin.html')
        this_url = route_url('whoami', self.request, action="login")
        root_url = resource_url(self.context, self.request)
        referrer  = self.request.url
        if referrer == do_login_url:
            referrer =  root_url # never use the login form itself as 
came_from
        if referrer == this_url:
            referrer = root_url # never use the login form itself as 
came_from
        self.request.session['came_from'] = referrer
        openid_url = self.request.registry.settings['openid.url']
        return dict(
              do_login_url = do_login_url
            , openid_url = openid_url
        )

Recently, I had not used "resource_url()" but had hard-coded the URLs. That 
worked. So the problem must be within resource_url() and the context 
"Forbidden".
Does anybody have a solution for this?
Thanks.
KR, drebbin

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