summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYusuke Miyazaki <miyazaki.dev@gmail.com>2017-10-25 16:29:05 +0900
committerTim Graham <timograham@gmail.com>2017-11-06 09:58:15 -0500
commit278d66b94bb443e1c1581e014fee2593a33f338c (patch)
tree4ed4722a986deac726dd36fccd53abaa16051f2c
parentac21f2e39148c8683445eef01ef4323500711fb0 (diff)
Fixed #28501 -- Fixed "python -m django runserver" crash.
-rw-r--r--django/utils/autoreload.py9
-rw-r--r--tests/utils_tests/test_autoreload.py9
2 files changed, 17 insertions, 1 deletions
diff --git a/django/utils/autoreload.py b/django/utils/autoreload.py
index 2784a89aeb..d3124e8751 100644
--- a/django/utils/autoreload.py
+++ b/django/utils/autoreload.py
@@ -280,8 +280,15 @@ def reloader_thread():
def restart_with_reloader():
+ import django.__main__
while True:
- args = [sys.executable] + ['-W%s' % o for o in sys.warnoptions] + sys.argv
+ args = [sys.executable] + ['-W%s' % o for o in sys.warnoptions]
+ if sys.argv[0] == django.__main__.__file__:
+ # The server was started with `python -m django runserver`.
+ args += ['-m', 'django']
+ args += sys.argv[1:]
+ else:
+ args += sys.argv
new_environ = os.environ.copy()
new_environ["RUN_MAIN"] = 'true'
exit_code = subprocess.call(args, env=new_environ)
diff --git a/tests/utils_tests/test_autoreload.py b/tests/utils_tests/test_autoreload.py
index da375c0f32..486d62cd18 100644
--- a/tests/utils_tests/test_autoreload.py
+++ b/tests/utils_tests/test_autoreload.py
@@ -277,3 +277,12 @@ class RestartWithReloaderTests(SimpleTestCase):
autoreload.restart_with_reloader()
self.assertEqual(mock_call.call_count, 1)
self.assertEqual(mock_call.call_args[0][0], [self.executable, '-Wall'] + argv)
+
+ def test_python_m_django(self):
+ main = '/usr/lib/pythonX.Y/site-packages/django/__main__.py'
+ argv = [main, 'runserver']
+ mock_call = self.patch_autoreload(argv)
+ with mock.patch('django.__main__.__file__', main):
+ autoreload.restart_with_reloader()
+ self.assertEqual(mock_call.call_count, 1)
+ self.assertEqual(mock_call.call_args[0][0], [self.executable, '-Wall', '-m', 'django'] + argv[1:])