Re: [Django] #30516: raise_last_exception doesn't work with exception types with different __init__ signatures

2019-05-27 Thread Django
#30516: raise_last_exception doesn't work with exception types with different
__init__ signatures
---+--
 Reporter:  alantrick  |Owner:  nobody
 Type:  Uncategorized  |   Status:  new
Component:  Uncategorized  |  Version:  2.2
 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
---+--
Description changed by alantrick:

Old description:

> How to reproduce:
>
> In apps.py, put the following code, and update __init__.py or the
> settings to have this app config be used.
>
> {{{
> from django.apps import AppConfig
>
> class MyException(Exception):
> def __init__(self, value: str, other_thing: str):
> super().__init__(value)
> self.ot = other_thing
>
> class Config(AppConfig):
> name = "myapp"
> verbose_name = "My App"
>
> def ready(self):
> raise MyException("foo", "bar")
> }}}
>
> The problem is that `django.utils.autoreload.raise_last_exception` tries
> to construct a new exception of the same type, with 1 argument (the
> original exception). Note that this behavior was changed in
> c8720e7696ca41f3262d5369365cc1bd72a216ca, it used to just re-raise the
> exception value. I don't know why it was changed.
>
> I noticed this issue as a result of https://gitlab.com/alantrick/django-
> vox/issues/9

New description:

 How to reproduce:

 In apps.py, put the following code, and update __init__.py or the settings
 to have this app config be used.

 {{{
 from django.apps import AppConfig

 class MyException(Exception):
 def __init__(self, value: str, other_thing: str):
 super().__init__(value)
 self.ot = other_thing

 class Config(AppConfig):
 name = "myapp"
 verbose_name = "My App"

 def ready(self):
 raise MyException("foo", "bar")
 }}}

 The problem is that `django.utils.autoreload.raise_last_exception` tries
 to construct a new exception of the same type, with 1 argument (the
 original exception). The consequence is that you just get a TypeError
 exception about ` __init__() missing 1 required positional argument:
 'other_thing'` and it completely masks the original exception.

 Note that this behavior was changed in
 c8720e7696ca41f3262d5369365cc1bd72a216ca, it used to just re-raise the
 exception value. I don't know why it was changed.

 I noticed this issue as a result of https://gitlab.com/alantrick/django-
 vox/issues/9

--

-- 
Ticket URL: 
Django 
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 post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/067.8180ec8d5dea2a522c5f452c2c3afa0f%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.


[Django] #30516: raise_last_exception doesn't work with exception types with different __init__ signatures

2019-05-27 Thread Django
#30516: raise_last_exception doesn't work with exception types with different
__init__ signatures
-+
   Reporter:  alantrick  |  Owner:  nobody
   Type:  Uncategorized  | Status:  new
  Component:  Uncategorized  |Version:  2.2
   Severity:  Normal |   Keywords:
   Triage Stage:  Unreviewed |  Has patch:  0
Needs documentation:  0  |Needs tests:  0
Patch needs improvement:  0  |  Easy pickings:  0
  UI/UX:  0  |
-+
 How to reproduce:

 In apps.py, put the following code, and update __init__.py or the settings
 to have this app config be used.

 {{{
 from django.apps import AppConfig

 class MyException(Exception):
 def __init__(self, value: str, other_thing: str):
 super().__init__(value)
 self.ot = other_thing

 class Config(AppConfig):
 name = "myapp"
 verbose_name = "My App"

 def ready(self):
 raise MyException("foo", "bar")
 }}}

 The problem is that `django.utils.autoreload.raise_last_exception` tries
 to construct a new exception of the same type, with 1 argument (the
 original exception). Note that this behavior was changed in
 c8720e7696ca41f3262d5369365cc1bd72a216ca, it used to just re-raise the
 exception value. I don't know why it was changed.

 I noticed this issue as a result of https://gitlab.com/alantrick/django-
 vox/issues/9

-- 
Ticket URL: 
Django 
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 post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/052.fa6db57a3af06d36d83b28cf37dd170b%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.