#30500: Error reporting returns a circular import error on a python formatting
error, and does not restart the development server
-------------------------------------+-------------------------------------
     Reporter:  Runner15             |                    Owner:  (none)
         Type:                       |                   Status:  closed
  Cleanup/optimization               |
    Component:  Error reporting      |                  Version:  2.2
     Severity:  Normal               |               Resolution:  invalid
     Keywords:  error reporting,     |             Triage Stage:
  error, circular import             |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------

Comment (by Keryn Knight):

 Adding details as I figure them out a bit, on the off-chance they prove
 valuable:

 instrumented `django/urls/resolvers.py`:
 {{{
 def url_patterns(...):
     patterns = getattr(self.urlconf_module, "urlpatterns",
 self.urlconf_module)
     print('url_patterns', type(patterns), patterns)
 }}}
 instrumented `django/utils/autoreload.py`:
 {{{
 def run(...):
     [...]
     try:
         v = get_resolver().urlconf_module
         print('run', type(v), v)
     [...]
 }}}

 Then, running the `utime(...)` script in a while loop as above, with
 runserver running (and `a` commented out):
 {{{
 url_patterns <class 'list'> [<URLResolver <module 't30500.urls2' from
 '/path/to/t30500/t30500/urls2.py'> (None:None) ''>]
 run <class 'module'> <module 't30500.urls' from
 '/path/to/t30500/t30500/urls.py'>
 url_patterns <class 'list'> [<URLPattern ''>]
 }}}

 The order of those calls changes sometimes (for me), so I guess it's maybe
 separate threads ''and'' non-deterministic? But importantly, they stay the
 same types and values, by the look of it.

 If `a` is uncommented, to raise `NameError: name 'a' is not defined`,
 every time `NameError` is thrown, the only print is:
 {{{
 run <class 'module'> <module 't30500.urls' from
 '/path/to/t30500/t30500/urls.py'>
 Exception in thread django-main-thread: [...]
 }}}

 when `ImproperlyConfigured: The included URLconf 't30500.urls' ...` is
 thrown, the only print is **instead**, this:
 {{{
 url_patterns <class 'module'> <module 't30500.urls' from
 '/path/to/t30500/t30500/urls.py'>
 Exception in thread django-main-thread: [...]
 }}}

 This seems like an important distinction (to me, with my highly
 sophisticated print-debugging, as pdb was being little help), and
 **additionally** the patterns variable is a module, rather than a list.

-- 
Ticket URL: <https://code.djangoproject.com/ticket/30500#comment:12>
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 [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/066.0942c44815a0fc79045f5c9c5429a1b1%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to