[Django] #22857: Django 1.7 runserver auto-reload : setting behaviour by extensions

32 views
Skip to first unread message

Django

unread,
Jun 17, 2014, 5:39:13 PM6/17/14
to django-...@googlegroups.com
#22857: Django 1.7 runserver auto-reload : setting behaviour by extensions
--------------------------------------------+------------------------
Reporter: artscoop | Owner: nobody
Type: New feature | Status: new
Component: Core (Management commands) | Version: 1.7-beta-2
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
--------------------------------------------+------------------------
Hi,
I am experiencing a problem introduced by Django 1.7b2 in django-rosetta
(app for editing locale files).
In Django 1.6, in a development server, rosetta responded to a button
click, updated .po files and redirected to the same page.
In Django 1.7, still in a development server, rosetta responds to a button
click, updates .po files and the server is immediately killed and
restarted (connection closed). This is an unwanted behaviour and I have no
control over this.

Is there a way to tell runserver's autoreload mechanism to ignore locale
files, or file extensions ?
Running runserver with the --noreload flag is not really an option.

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

Django

unread,
Jun 17, 2014, 5:49:42 PM6/17/14
to django-...@googlegroups.com
#22857: Django 1.7 runserver auto-reload : setting behaviour by extensions
-------------------------------------+-------------------------------------

Reporter: artscoop | Owner: nobody
Type: New feature | Status: new
Component: Core (Management | Version:
commands) | 1.7-beta-2
Severity: Release blocker | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by timo):

* needs_better_patch: => 0
* needs_docs: => 0
* severity: Normal => Release blocker
* needs_tests: => 0
* stage: Unreviewed => Accepted


Comment:

I guess this is #9523. One user's feature is another user's bug... I guess
it's likely possible to add a flag to control the behavior although I'm
not sure it's ideal to be adding more flags like that to `runserver`.

--
Ticket URL: <https://code.djangoproject.com/ticket/22857#comment:1>

Django

unread,
Jun 17, 2014, 5:57:28 PM6/17/14
to django-...@googlegroups.com
#22857: Django 1.7 runserver auto-reload : setting behaviour by extensions
-------------------------------------+-------------------------------------

Reporter: artscoop | Owner: nobody
Type: New feature | Status: new
Component: Core (Management | Version:
commands) | 1.7-beta-2
Severity: Release blocker | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by artscoop):

In my opinion, the request in #9523 was a very valid one and still is...
but yes, some django apps help with editing translations. This is one
category of apps that defeats the purpose of autoreloading on .mo changes.
:(

--
Ticket URL: <https://code.djangoproject.com/ticket/22857#comment:2>

Django

unread,
Jun 17, 2014, 8:09:26 PM6/17/14
to django-...@googlegroups.com
#22857: Django 1.7 runserver auto-reload : setting behaviour by extensions
-------------------------------------+-------------------------------------

Reporter: artscoop | Owner: nobody
Type: New feature | Status: new
Component: Core (Management | Version:
commands) | 1.7-beta-2
Severity: Release blocker | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by andrewgodwin):

Not entirely sure this is a release blocker, though - it'd be nice to fix,
but at the same time I don't think it's a regression from previously
documented behaviour, just a pattern that happened to work.

Said app could, for example, use an ajax request to kick off the rebuild
and then poll the server to see when it reappears before reloading.

(Not saying we shouldn't land a fix for this in 1.7, just saying that I'm
not really prepared to hold the entire release up for it...)

--
Ticket URL: <https://code.djangoproject.com/ticket/22857#comment:3>

Django

unread,
Jun 18, 2014, 8:57:50 AM6/18/14
to django-...@googlegroups.com
#22857: Django 1.7 runserver auto-reload : setting behaviour by extensions
-------------------------------------+-------------------------------------

Reporter: artscoop | Owner: nobody
Type: New feature | Status: new
Component: Core (Management | Version:
commands) | 1.7-beta-2
Severity: Release blocker | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by CollinAnderson):

would #18855 solve the problem?

--
Ticket URL: <https://code.djangoproject.com/ticket/22857#comment:4>

Django

unread,
Jun 18, 2014, 4:36:55 PM6/18/14
to django-...@googlegroups.com
#22857: Django 1.7 runserver auto-reload : setting behaviour by extensions
-------------------------------------+-------------------------------------

Reporter: artscoop | Owner: nobody
Type: New feature | Status: new
Component: Core (Management | Version:
commands) | 1.7-beta-2
Severity: Release blocker | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by timo):

I am not sure if it will, but it currently has some issues and even if we
resolve them, I'm not sure backporting to 1.7 this late in the release
cycle is acceptable. Currently the "best" solution I am thinking of is
adding a `--noreload-translations` flag to `runserver`. Open to other
opinions and ideas!

--
Ticket URL: <https://code.djangoproject.com/ticket/22857#comment:5>

Django

unread,
Jun 18, 2014, 5:09:05 PM6/18/14
to django-...@googlegroups.com
#22857: Django 1.7 runserver auto-reload : setting behaviour by extensions
-------------------------------------+-------------------------------------

Reporter: artscoop | Owner: nobody
Type: New feature | Status: new
Component: Core (Management | Version:
commands) | 1.7-beta-2
Severity: Release blocker | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by claudep):

Another idea (completely untested) would be to gather mo files in another
set of files in runserver and only reset translations when one of these
files changes instead of restarting the server.

--
Ticket URL: <https://code.djangoproject.com/ticket/22857#comment:6>

Django

unread,
Jun 18, 2014, 5:19:37 PM6/18/14
to django-...@googlegroups.com
#22857: Django 1.7 runserver auto-reload : setting behaviour by extensions
-------------------------------------+-------------------------------------

Reporter: artscoop | Owner: nobody
Type: New feature | Status: new
Component: Core (Management | Version:
commands) | 1.7-beta-2
Severity: Release blocker | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by artscoop):

@claudep I didn't know it was possible to reset/reload translations
separately (even though it makes perfect sense), but I think it's better
than the --noreload-translations, because the command option would have to
be officially documented, and maybe deprecated very quickly.
The suggestion about AJAXing a view until the server comes back is good
but a bit hacky.

I do think resetting translation cache on .mo change is the best idea, and
would be more immediate than reloading the whole dev server (which ideally
should be reloaded on code changes only). It seems that resetting the
translation is a simple as in this example:
https://djangosnippets.org/snippets/1704/

--
Ticket URL: <https://code.djangoproject.com/ticket/22857#comment:7>

Django

unread,
Jun 20, 2014, 2:52:07 AM6/20/14
to django-...@googlegroups.com
#22857: Django 1.7 runserver auto-reload : setting behaviour by extensions
-------------------------------------+-------------------------------------

Reporter: artscoop | Owner: nobody
Type: New feature | Status: new
Component: Core (Management | Version:
commands) | 1.7-beta-2
Severity: Release blocker | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by andrewgodwin):

If we can reset the translation cache then let's try that, but I'm really
pushed to define this as a release blocker (it is not breaking any part of
Django directly, and the behaviour it produces can be worked around with
``--noreload`` if you need to file translations), so if we get down to the
release time and this is what's left... it might not make it.

--
Ticket URL: <https://code.djangoproject.com/ticket/22857#comment:8>

Django

unread,
Jun 20, 2014, 4:55:31 AM6/20/14
to django-...@googlegroups.com
#22857: Django 1.7 runserver auto-reload : setting behaviour by extensions
-------------------------------------+-------------------------------------

Reporter: artscoop | Owner: nobody
Type: New feature | Status: new
Component: Core (Management | Version:
commands) | 1.7-beta-2
Severity: Normal | Resolution:

Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by aaugustin):

* severity: Release blocker => Normal


Comment:

I agree that this change of behaviour is annoying for rosetta but I don't
think we should delay 1.7 for this edge case.

--
Ticket URL: <https://code.djangoproject.com/ticket/22857#comment:9>

Django

unread,
Jun 21, 2014, 5:43:39 AM6/21/14
to django-...@googlegroups.com
#22857: Django 1.7 runserver auto-reload : setting behaviour by extensions
-------------------------------------+-------------------------------------

Reporter: artscoop | Owner: nobody
Type: New feature | Status: new
Component: Core (Management | Version:
commands) | 1.7-beta-2
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by claudep):

* has_patch: 0 => 1


Comment:

PR: https://github.com/django/django/pull/2837

--
Ticket URL: <https://code.djangoproject.com/ticket/22857#comment:10>

Django

unread,
Jun 24, 2014, 8:45:51 PM6/24/14
to django-...@googlegroups.com
#22857: Django 1.7 runserver auto-reload : setting behaviour by extensions
-------------------------------------+-------------------------------------

Reporter: artscoop | Owner: nobody
Type: New feature | Status: new
Component: Core (Management | Version:
commands) | 1.7-beta-2
Severity: Normal | Resolution:
Keywords: | Triage Stage: Ready for
Has patch: 1 | checkin
Needs tests: 0 | Needs documentation: 0
Easy pickings: 0 | Patch needs improvement: 0
| UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by timo):

* stage: Accepted => Ready for checkin


Comment:

Patch seems okay to me, although I'm not really familiar with this stuff
so a second pair of eyes wouldn't hurt.

--
Ticket URL: <https://code.djangoproject.com/ticket/22857#comment:11>

Django

unread,
Jun 25, 2014, 3:02:41 AM6/25/14
to django-...@googlegroups.com
#22857: Django 1.7 runserver auto-reload : setting behaviour by extensions
-------------------------------------+-------------------------------------

Reporter: artscoop | Owner: nobody
Type: New feature | Status: new
Component: Core (Management | Version:
commands) | 1.7-beta-2
Severity: Normal | Resolution:
Keywords: | Triage Stage: Ready for
Has patch: 1 | checkin
Needs tests: 0 | Needs documentation: 0
Easy pickings: 0 | Patch needs improvement: 0
| UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by claudep):

I'd like at least the reporter to review and check the patch.

--
Ticket URL: <https://code.djangoproject.com/ticket/22857#comment:12>

Django

unread,
Jun 25, 2014, 3:19:23 AM6/25/14
to django-...@googlegroups.com
#22857: Django 1.7 runserver auto-reload : setting behaviour by extensions
-------------------------------------+-------------------------------------

Reporter: artscoop | Owner: nobody
Type: New feature | Status: new
Component: Core (Management | Version:
commands) | 1.7-beta-2
Severity: Normal | Resolution:
Keywords: | Triage Stage: Ready for
Has patch: 1 | checkin
Needs tests: 0 | Needs documentation: 0
Easy pickings: 0 | Patch needs improvement: 0
| UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by artscoop):

To be done in the next 8 hours, I'll keep you informed.

--
Ticket URL: <https://code.djangoproject.com/ticket/22857#comment:13>

Django

unread,
Jun 25, 2014, 2:05:27 PM6/25/14
to django-...@googlegroups.com
#22857: Django 1.7 runserver auto-reload : setting behaviour by extensions
-------------------------------------+-------------------------------------

Reporter: artscoop | Owner: nobody
Type: New feature | Status: new
Component: Core (Management | Version:
commands) | 1.7-beta-2
Severity: Normal | Resolution:
Keywords: | Triage Stage: Ready for
Has patch: 1 | checkin
Needs tests: 0 | Needs documentation: 0
Easy pickings: 0 | Patch needs improvement: 0
| UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by artscoop):

@claudep Works flawlessly. Could not test on the master branch since it
breaks many third party apps, but copied the autoreload.py file into the
working 1.7b4. the server did not restart on .mo file changes, yet the new
translation was properly taken into account.

--
Ticket URL: <https://code.djangoproject.com/ticket/22857#comment:14>

Django

unread,
Jun 26, 2014, 4:03:45 AM6/26/14
to django-...@googlegroups.com
#22857: Django 1.7 runserver auto-reload : setting behaviour by extensions
-------------------------------------+-------------------------------------
Reporter: artscoop | Owner: nobody
Type: New feature | Status: closed

Component: Core (Management | Version:
commands) | 1.7-beta-2
Severity: Normal | Resolution: fixed

Keywords: | Triage Stage: Ready for
Has patch: 1 | checkin
Needs tests: 0 | Needs documentation: 0
Easy pickings: 0 | Patch needs improvement: 0
| UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Claude Paroz <claude@…>):

* status: new => closed
* resolution: => fixed


Comment:

In [changeset:"0d363b25b82b0a86b7243512470f364bef92bc3d"]:
{{{
#!CommitTicketReference repository=""
revision="0d363b25b82b0a86b7243512470f364bef92bc3d"
Fixed #22857 -- Reset translations when only .mo file changed

No need to restart the server when a translation file changes.
Refs #9523. Thanks artscoop for the report and Tim Graham for
the review.
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/22857#comment:15>

Django

unread,
Jun 26, 2014, 4:07:43 AM6/26/14
to django-...@googlegroups.com
#22857: Django 1.7 runserver auto-reload : setting behaviour by extensions
-------------------------------------+-------------------------------------
Reporter: artscoop | Owner: nobody

Type: New feature | Status: closed
Component: Core (Management | Version:
commands) | 1.7-beta-2
Severity: Normal | Resolution: fixed
Keywords: | Triage Stage: Ready for
Has patch: 1 | checkin
Needs tests: 0 | Needs documentation: 0
Easy pickings: 0 | Patch needs improvement: 0
| UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by claudep):

@artscoop Thanks for the feedback!
I won't make alone the decision to backport to 1.7. If other core devs
think it's a good idea, just speak.

--
Ticket URL: <https://code.djangoproject.com/ticket/22857#comment:16>

Django

unread,
Jun 26, 2014, 5:39:41 AM6/26/14
to django-...@googlegroups.com
#22857: Django 1.7 runserver auto-reload : setting behaviour by extensions
-------------------------------------+-------------------------------------
Reporter: artscoop | Owner: nobody

Type: New feature | Status: closed
Component: Core (Management | Version:
commands) | 1.7-beta-2
Severity: Normal | Resolution: fixed
Keywords: | Triage Stage: Ready for
Has patch: 1 | checkin
Needs tests: 0 | Needs documentation: 0
Easy pickings: 0 | Patch needs improvement: 0
| UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by timo):

I would backport this or revert #9523 from 1.7 so we don't ship a buggy
change.

--
Ticket URL: <https://code.djangoproject.com/ticket/22857#comment:17>

Django

unread,
Jun 26, 2014, 4:50:17 PM6/26/14
to django-...@googlegroups.com
#22857: Django 1.7 runserver auto-reload : setting behaviour by extensions
-------------------------------------+-------------------------------------
Reporter: artscoop | Owner: nobody

Type: New feature | Status: closed
Component: Core (Management | Version:
commands) | 1.7-beta-2
Severity: Normal | Resolution: fixed
Keywords: | Triage Stage: Ready for
Has patch: 1 | checkin
Needs tests: 0 | Needs documentation: 0
Easy pickings: 0 | Patch needs improvement: 0
| UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by Tim Graham <timograham@…>):

In [changeset:"cbcb7c010bdc015c79b4b8a0ba2955abb23aee82"]:
{{{
#!CommitTicketReference repository=""
revision="cbcb7c010bdc015c79b4b8a0ba2955abb23aee82"
[1.7.x] Fixed #22857 -- Reset translations when only .mo file changed

No need to restart the server when a translation file changes.
Refs #9523. Thanks artscoop for the report and Tim Graham for
the review.

Backport of 0d363b25b8 from master
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/22857#comment:18>

Reply all
Reply to author
Forward
0 new messages