Fixed #32094 -- Fixed flush() calls on management command self.stdout/err proxies.

This commit is contained in:
Thomas Riccardi 2020-10-08 20:41:22 +02:00 committed by Mariusz Felisiak
parent b7da588e88
commit f1f24539d8
3 changed files with 19 additions and 0 deletions

View File

@ -140,6 +140,10 @@ class OutputWrapper(TextIOBase):
def __getattr__(self, name): def __getattr__(self, name):
return getattr(self._out, name) return getattr(self._out, name)
def flush(self):
if hasattr(self._out, 'flush'):
self._out.flush()
def isatty(self): def isatty(self):
return hasattr(self._out, 'isatty') and self._out.isatty() return hasattr(self._out, 'isatty') and self._out.isatty()

View File

@ -0,0 +1,8 @@
from django.core.management.base import BaseCommand
class Command(BaseCommand):
def handle(self, **options):
self.stdout.write('Working...')
self.stdout.flush()
self.stdout.write('OK')

View File

@ -341,6 +341,13 @@ class CommandTests(SimpleTestCase):
parser = BaseCommand().create_parser('prog_name', 'subcommand', epilog=epilog) parser = BaseCommand().create_parser('prog_name', 'subcommand', epilog=epilog)
self.assertEqual(parser.epilog, epilog) self.assertEqual(parser.epilog, epilog)
def test_outputwrapper_flush(self):
out = StringIO()
with mock.patch.object(out, 'flush') as mocked_flush:
management.call_command('outputwrapper', stdout=out)
self.assertIn('Working...', out.getvalue())
self.assertIs(mocked_flush.called, True)
class CommandRunTests(AdminScriptTestCase): class CommandRunTests(AdminScriptTestCase):
""" """