summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/contrib/auth/management/commands/createsuperuser.py6
-rw-r--r--django/contrib/auth/tests/test_management.py29
-rw-r--r--django/core/management/base.py1
-rw-r--r--tests/user_commands/tests.py26
4 files changed, 34 insertions, 28 deletions
diff --git a/django/contrib/auth/management/commands/createsuperuser.py b/django/contrib/auth/management/commands/createsuperuser.py
index 9d18dd430d..0ec4ec39b5 100644
--- a/django/contrib/auth/management/commands/createsuperuser.py
+++ b/django/contrib/auth/management/commands/createsuperuser.py
@@ -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
diff --git a/django/contrib/auth/tests/test_management.py b/django/contrib/auth/tests/test_management.py
index 16247dbb9a..033b271780 100644
--- a/django/contrib/auth/tests/test_management.py
+++ b/django/contrib/auth/tests/test_management.py
@@ -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')
diff --git a/django/core/management/base.py b/django/core/management/base.py
index 9eeca23c47..77c0bc6034 100644
--- a/django/core/management/base.py
+++ b/django/core/management/base.py
@@ -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
diff --git a/tests/user_commands/tests.py b/tests/user_commands/tests.py
index e184d0e6df..52665f1a1c 100644
--- a/tests/user_commands/tests.py
+++ b/tests/user_commands/tests.py
@@ -61,32 +61,6 @@ class CommandTests(SimpleTestCase):
management.call_command('leave_locale_alone_true', stdout=out)
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):