summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
Diffstat (limited to 'django')
-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
3 files changed, 34 insertions, 2 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