Hi,

I thought I'd just put in a pull-request but there are quite a few hoops to 
jump through. Which is great for quality, but bad for a noob like me.

Said noob as spent quite some time staring at this error-message here 
before I figured out what was wrong:
Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/sendEmail/

Django Version: 1.11.1
Python Version: 3.4.6
Installed Applications:
...
Installed Middleware:
...



Traceback:

File 
"/home/me/code/venv/lib/python3.4/site-packages/django/core/handlers/exception.py"
 
in inner
  41.             response = get_response(request)

File 
"/home/me/code/venv/lib/python3.4/site-packages/django/core/handlers/base.py" 
in _get_response
  187.                 response = self.process_exception_by_middleware(e, 
request)

File 
"/home/me/code/venv/lib/python3.4/site-packages/django/core/handlers/base.py" 
in _get_response
  185.                 response = wrapped_callback(request, *callback_args, 
**callback_kwargs)

File 
"/home/me/code/venv/lib/python3.4/site-packages/django/views/decorators/csrf.py"
 
in wrapped_view
  58.         return view_func(*args, **kwargs)

File 
"/home/me/code/venv/lib/python3.4/site-packages/django/views/generic/base.py" 
in view
  68.             return self.dispatch(request, *args, **kwargs)

File 
"/home/me/code/venv/lib/python3.4/site-packages/rest_framework/views.py" in 
dispatch
  496.             response = self.handle_exception(exc)

File 
"/home/me/code/venv/lib/python3.4/site-packages/rest_framework/views.py" in 
handle_exception
  456.             self.raise_uncaught_exception(exc)

File 
"/home/me/code/venv/lib/python3.4/site-packages/rest_framework/views.py" in 
dispatch
  484.             self.initial(request, *args, **kwargs)

File 
"/home/me/code/venv/lib/python3.4/site-packages/rest_framework/views.py" in 
initial
  402.         self.check_permissions(request)

File 
"/home/me/code/venv/lib/python3.4/site-packages/rest_framework/views.py" in 
check_permissions
  334.         for permission in self.get_permissions():

File 
"/home/me/code/venv/lib/python3.4/site-packages/rest_framework/views.py" in 
get_permissions
  275.             return [permission() for permission in self.
permission_classes]

Exception Type: TypeError at /sendEmail/
Exception Value: 'type' object is not iterable

I finally noticed that 
    permission_classes = (IsAuthenticated) # Just a stupid class
does not equal
    permission_classes = (IsAuthenticated,) # a set with a class in it


As a solution, I offer this code-snippet, which would go here. 
<https://github.com/encode/django-rest-framework/blob/71ad99e0b276a90d0552d8936944293985fd8421/rest_framework/views.py#L270>
 
Anyone is free to grab and stick through all these hoops into the DRF. 
    def get_permissions(self):
        """
        Instantiates and returns the list of permissions that this view 
requires.
        """
        try:
            return [permission() for permission in self.permission_classes]
        except TypeError as e:
            raise TypeError("Make sure your view's 'permission_classes' are 
iterable. "
                            +"If you use '()' to generate a set with a 
single element "
                            +"make sure that there is a comma behind the 
one (element,).") from e


I fear it will not work in Python2, which is a requirement, right? But 
surely more experienced coders can make something similar, that will.
Cheers!
chris :)

-- 
You received this message because you are subscribed to the Google Groups 
"Django REST framework" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to