mirror of
https://github.com/django/django.git
synced 2025-10-09 14:59:24 +00:00
Fixed #36434 -- Preserved unbuffered stdio (-u) in autoreloader child.
Signed-off-by: SaJH <wogur981208@gmail.com>
This commit is contained in:
parent
5cbd96003c
commit
68aae8878f
@ -268,6 +268,19 @@ def trigger_reload(filename):
|
||||
|
||||
def restart_with_reloader():
|
||||
new_environ = {**os.environ, DJANGO_AUTORELOAD_ENV: "true"}
|
||||
orig = getattr(sys, "orig_argv", ())
|
||||
if any(
|
||||
(arg == "-u")
|
||||
or (
|
||||
arg.startswith("-")
|
||||
and not arg.startswith(("--", "-X", "-W"))
|
||||
and len(arg) > 2
|
||||
and arg[1:].isalpha()
|
||||
and "u" in arg
|
||||
)
|
||||
for arg in orig[1:]
|
||||
):
|
||||
new_environ.setdefault("PYTHONUNBUFFERED", "1")
|
||||
args = get_child_arguments()
|
||||
while True:
|
||||
p = subprocess.run(args, env=new_environ, close_fds=False)
|
||||
|
@ -535,6 +535,53 @@ class RestartWithReloaderTests(SimpleTestCase):
|
||||
[self.executable, "-Wall", "-m", "django"] + argv[1:],
|
||||
)
|
||||
|
||||
def test_propagates_unbuffered_from_parent(self):
|
||||
for args in ("-u", "-Iuv"):
|
||||
with self.subTest(args=args):
|
||||
with mock.patch.dict(os.environ, {}, clear=True):
|
||||
with tempfile.TemporaryDirectory() as d:
|
||||
script = Path(d) / "manage.py"
|
||||
script.touch()
|
||||
mock_call = self.patch_autoreload([str(script), "runserver"])
|
||||
with (
|
||||
mock.patch("__main__.__spec__", None),
|
||||
mock.patch.object(
|
||||
autoreload.sys,
|
||||
"orig_argv",
|
||||
[self.executable, args, str(script), "runserver"],
|
||||
),
|
||||
):
|
||||
autoreload.restart_with_reloader()
|
||||
env = mock_call.call_args.kwargs["env"]
|
||||
self.assertEqual(env.get("PYTHONUNBUFFERED"), "1")
|
||||
|
||||
def test_does_not_propagate_unbuffered_from_parent(self):
|
||||
for args in (
|
||||
"-Xdev",
|
||||
"-Xfaulthandler",
|
||||
"--user",
|
||||
"-Wall",
|
||||
"-Wdefault",
|
||||
"-Wignore::UserWarning",
|
||||
):
|
||||
with self.subTest(args=args):
|
||||
with mock.patch.dict(os.environ, {}, clear=True):
|
||||
with tempfile.TemporaryDirectory() as d:
|
||||
script = Path(d) / "manage.py"
|
||||
script.touch()
|
||||
mock_call = self.patch_autoreload([str(script), "runserver"])
|
||||
with (
|
||||
mock.patch("__main__.__spec__", None),
|
||||
mock.patch.object(
|
||||
autoreload.sys,
|
||||
"orig_argv",
|
||||
[self.executable, args, str(script), "runserver"],
|
||||
),
|
||||
):
|
||||
autoreload.restart_with_reloader()
|
||||
env = mock_call.call_args.kwargs["env"]
|
||||
self.assertIsNone(env.get("PYTHONUNBUFFERED"))
|
||||
|
||||
|
||||
class ReloaderTests(SimpleTestCase):
|
||||
RELOADER_CLS = None
|
||||
|
Loading…
x
Reference in New Issue
Block a user