After some investigation, I think I found a solution. I added "self"
to the list of arguments on `return self.__request(*args, **kwargs)`,
so my decorator class now looks like this:

class restrict(object):
        """
        Decorator for admin section of the website that need restriction.
        """
        def __init__(self, request):
                self.__request = request

        def __call__(self, *args, **kwargs):
                if session.auth != 1:
                        web.seeother(config.general.base_url)
                else:
                        return self.__request(self, *args, **kwargs)

I'm not quite sure why this works, as I would think "self" would give
the decorator class instance instead of the web.py page instance, but
alas--it works. Just posting it here in case someone else has the same
issue.

On Jun 9, 5:58 pm, alecwh <[email protected]> wrote:
> Hello web.py list,
>
> I have a decorator which I apply to the methods that I want to
> restrict access to (aka 'admin only sections'). It basically checks to
> see if the user is logged in, and if so, it will continue running the
> request. If not, it will redirect to the main page:
>
> class restrict(object):
>         """
>         Decorator for admin section of the website that need restriction.
>         """
>         def __init__(self, request):
>                 self.__request = request
>
>         def __call__(self, *args, **kwargs):
>                 if session.auth != 1:
>                         web.seeother(config.general.base_url)
>                 else:
>                         return self.__request(*args, **kwargs)
>
> When I apply this to, say, Index.GET, like this:
>
> class Index:
>         @restrict
>         def POST(self):
>                 i = web.input()
>                 ....
>
> I get this error message upon running Index.POST while logged in:
>
> [Wed Jun 09 17:45:18 2010] [error] [client 127.0.0.1]   File "/var/www/
> me/alecwh/index.py", line 64, in __call__, referer:http://localhost/me/alecwh/
> [Wed Jun 09 17:45:18 2010] [error] [client 127.0.0.1]     return
> self.__request(*args, **kwargs), referer:http://localhost/me/alecwh/
> [Wed Jun 09 17:45:18 2010] [error] [client 127.0.0.1] TypeError:
> POST() takes exactly 1 argument (0 given), referer:http://localhost/me/alecwh/
>
> I don't know what's wrong, as my __call__ decorator method passes
> along  *args, **kwargs. Can someone point me in the right direction
> for solving this problem? To my knowledge, this should work perfectly.
>
> Thanks for your help!

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

Reply via email to