Removed BaseCommand.stdin introduced in 116d39842d
.
This option is not actually very useful in the general case because it doesn't override sys.stdin. It's still marginally useful for testing some features of the createsuperuser command so it was moved there. This commit also makes the detection of a TTY in createsuperuser a bit more robust, after a suggestion of appolo13.
This commit is contained in:
parent
b78f9a12c8
commit
2a9ee49f3c
|
@ -50,6 +50,10 @@ class Command(BaseCommand):
|
||||||
option_list = BaseCommand.option_list
|
option_list = BaseCommand.option_list
|
||||||
help = 'Used to create a superuser.'
|
help = 'Used to create a superuser.'
|
||||||
|
|
||||||
|
def execute(self, *args, **options):
|
||||||
|
self.stdin = options.get('stdin', sys.stdin) # Used for testing
|
||||||
|
return super(Command, self).execute(*args, **options)
|
||||||
|
|
||||||
def handle(self, *args, **options):
|
def handle(self, *args, **options):
|
||||||
username = options.get(self.UserModel.USERNAME_FIELD, None)
|
username = options.get(self.UserModel.USERNAME_FIELD, None)
|
||||||
interactive = options.get('interactive')
|
interactive = options.get('interactive')
|
||||||
|
@ -84,7 +88,7 @@ class Command(BaseCommand):
|
||||||
default_username = get_default_username()
|
default_username = get_default_username()
|
||||||
try:
|
try:
|
||||||
|
|
||||||
if not self.stdin.isatty():
|
if hasattr(self.stdin, 'isatty') and not self.stdin.isatty():
|
||||||
raise NotRunningInTTYException("Not running in a TTY")
|
raise NotRunningInTTYException("Not running in a TTY")
|
||||||
|
|
||||||
# Get a username
|
# Get a username
|
||||||
|
|
|
@ -2,6 +2,7 @@ from __future__ import unicode_literals
|
||||||
|
|
||||||
from datetime import date
|
from datetime import date
|
||||||
import locale
|
import locale
|
||||||
|
import sys
|
||||||
|
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.contrib.auth import models, management
|
from django.contrib.auth import models, management
|
||||||
|
@ -309,6 +310,34 @@ class CreatesuperuserManagementCommandTestCase(TestCase):
|
||||||
self.assertEqual(User._default_manager.count(), 0)
|
self.assertEqual(User._default_manager.count(), 0)
|
||||||
self.assertIn("Superuser creation skipped", out.getvalue())
|
self.assertIn("Superuser creation skipped", out.getvalue())
|
||||||
|
|
||||||
|
def test_passing_stdin(self):
|
||||||
|
"""
|
||||||
|
You can pass a stdin object as an option and it should be
|
||||||
|
available on self.stdin.
|
||||||
|
If no such option is passed, it defaults to sys.stdin.
|
||||||
|
"""
|
||||||
|
|
||||||
|
user_data = {'username': 'foo', 'email': 'foo@example.com'}
|
||||||
|
sentinel = object()
|
||||||
|
command = createsuperuser.Command()
|
||||||
|
command.execute(
|
||||||
|
stdin=sentinel,
|
||||||
|
stdout=six.StringIO(),
|
||||||
|
interactive=False,
|
||||||
|
username='janet',
|
||||||
|
email='janet@example.com',
|
||||||
|
)
|
||||||
|
self.assertIs(command.stdin, sentinel)
|
||||||
|
|
||||||
|
command = createsuperuser.Command()
|
||||||
|
command.execute(
|
||||||
|
stdout=six.StringIO(),
|
||||||
|
interactive=False,
|
||||||
|
username='joe',
|
||||||
|
email='joe@example.com',
|
||||||
|
)
|
||||||
|
self.assertIs(command.stdin, sys.stdin)
|
||||||
|
|
||||||
|
|
||||||
class CustomUserModelValidationTestCase(TestCase):
|
class CustomUserModelValidationTestCase(TestCase):
|
||||||
@override_settings(AUTH_USER_MODEL='auth.CustomUserNonListRequiredFields')
|
@override_settings(AUTH_USER_MODEL='auth.CustomUserNonListRequiredFields')
|
||||||
|
|
|
@ -306,7 +306,6 @@ class BaseCommand(object):
|
||||||
self.stderr = OutputWrapper(options.get('stderr', sys.stderr))
|
self.stderr = OutputWrapper(options.get('stderr', sys.stderr))
|
||||||
else:
|
else:
|
||||||
self.stderr = OutputWrapper(options.get('stderr', sys.stderr), self.style.ERROR)
|
self.stderr = OutputWrapper(options.get('stderr', sys.stderr), self.style.ERROR)
|
||||||
self.stdin = options.get('stdin', sys.stdin) # Useful for testing
|
|
||||||
|
|
||||||
if self.can_import_settings:
|
if self.can_import_settings:
|
||||||
from django.conf import settings # NOQA
|
from django.conf import settings # NOQA
|
||||||
|
|
|
@ -61,32 +61,6 @@ class CommandTests(SimpleTestCase):
|
||||||
management.call_command('leave_locale_alone_true', stdout=out)
|
management.call_command('leave_locale_alone_true', stdout=out)
|
||||||
self.assertEqual(out.getvalue(), "pl\n")
|
self.assertEqual(out.getvalue(), "pl\n")
|
||||||
|
|
||||||
def test_passing_stdin(self):
|
|
||||||
"""
|
|
||||||
You can pass a stdin object to a command's options and it should be
|
|
||||||
available on self.stdin.
|
|
||||||
"""
|
|
||||||
class CustomCommand(BaseCommand):
|
|
||||||
def handle(self, *args, **kwargs):
|
|
||||||
pass
|
|
||||||
|
|
||||||
sentinel = object()
|
|
||||||
command = CustomCommand()
|
|
||||||
command.execute(stdin=sentinel, stdout=StringIO())
|
|
||||||
self.assertIs(command.stdin, sentinel)
|
|
||||||
|
|
||||||
def test_passing_stdin_default(self):
|
|
||||||
"""
|
|
||||||
If stdin is not passed as an option, the default should be sys.stdin.
|
|
||||||
"""
|
|
||||||
class CustomCommand(BaseCommand):
|
|
||||||
def handle(self, *args, **kwargs):
|
|
||||||
return 'OK'
|
|
||||||
|
|
||||||
command = CustomCommand()
|
|
||||||
command.execute(stdout=StringIO())
|
|
||||||
self.assertIs(command.stdin, sys.stdin)
|
|
||||||
|
|
||||||
|
|
||||||
class UtilsTests(SimpleTestCase):
|
class UtilsTests(SimpleTestCase):
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue