#32260: handler500 as a Class-based view raises SystemCheckError
-------------------------------------+-------------------------------------
     Reporter:  Daniyal Abbasi       |                    Owner:  Daniyal
                                     |  Abbasi
         Type:  Bug                  |                   Status:  assigned
    Component:  Core (System         |                  Version:  3.1
  checks)                            |
     Severity:  Normal               |               Resolution:
     Keywords:                       |             Triage Stage:
                                     |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Changes (by Daniyal Abbasi):

 * owner:  nobody => Daniyal Abbasi
 * status:  new => assigned


Old description:

> Setting handler500 as a Class-Based view raises the following error which
> running checks.
>

> {{{
> $ python manage.py check
> SystemCheckError: System check identified some issues:
>
> ERRORS:
> ?: (urls.E007) The custom handler500 view 'path.to.my.MyView' does not
> take the correct number of arguments (request).
> }}}
>
> In my root urls.py, I have the following configuration,
>
> {{{
> handler404 = MyView.as_view()
> handler500 = MyView.as_view()
> }}}

New description:

 Setting handler500 as a Class-Based view raises the following error which
 running checks.


 {{{
 $ python manage.py check
 SystemCheckError: System check identified some issues:

 ERRORS:
 ?: (urls.E007) The custom handler500 view 'path.to.my.MyView' does not
 take the correct number of arguments (request).
 }}}

 In my root urls.py, I have the following configuration,

 {{{
 handler404 = MyView.as_view()
 handler500 = MyView.as_view()
 }}}


 I believe this is due to the function `_check_custom_error_handlers` in
 `django/urls/resolver.py`. The signature variable in this function is
 expected to match (request, exception) for all handlers except for
 handler500 which is expected to have only (request). A positional
 argument, template_name is also present.

 While using class based views, we get two positional arguments (self,
 request) and then it recieves *args and * *kwargs. The check is permitting
 other handlers as the number of arguments coincidentally match.

 I suggest a fix in the `_check_custom_error_handlers` which first checks
 if the handler* are function based or class based, and then it preceed the
 check with the appropriate number of arguments.

--

-- 
Ticket URL: <https://code.djangoproject.com/ticket/32260#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/071.edd43afda310c99c5d0b6d3166454328%40djangoproject.com.

Reply via email to