mirror of
https://github.com/django/django.git
synced 2025-10-24 22:26:08 +00:00
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:
@@ -50,6 +50,10 @@ class Command(BaseCommand):
|
||||
option_list = BaseCommand.option_list
|
||||
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):
|
||||
username = options.get(self.UserModel.USERNAME_FIELD, None)
|
||||
interactive = options.get('interactive')
|
||||
@@ -84,7 +88,7 @@ class Command(BaseCommand):
|
||||
default_username = get_default_username()
|
||||
try:
|
||||
|
||||
if not self.stdin.isatty():
|
||||
if hasattr(self.stdin, 'isatty') and not self.stdin.isatty():
|
||||
raise NotRunningInTTYException("Not running in a TTY")
|
||||
|
||||
# Get a username
|
||||
|
||||
@@ -2,6 +2,7 @@ from __future__ import unicode_literals
|
||||
|
||||
from datetime import date
|
||||
import locale
|
||||
import sys
|
||||
|
||||
from django.apps import apps
|
||||
from django.contrib.auth import models, management
|
||||
@@ -309,6 +310,34 @@ class CreatesuperuserManagementCommandTestCase(TestCase):
|
||||
self.assertEqual(User._default_manager.count(), 0)
|
||||
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):
|
||||
@override_settings(AUTH_USER_MODEL='auth.CustomUserNonListRequiredFields')
|
||||
|
||||
@@ -306,7 +306,6 @@ class BaseCommand(object):
|
||||
self.stderr = OutputWrapper(options.get('stderr', sys.stderr))
|
||||
else:
|
||||
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:
|
||||
from django.conf import settings # NOQA
|
||||
|
||||
Reference in New Issue
Block a user