summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorBaptiste Mispelon <bmispelon@gmail.com>2014-02-18 00:01:03 +0100
committerBaptiste Mispelon <bmispelon@gmail.com>2014-02-18 11:36:06 +0100
commit2a9ee49f3cbdc42a98a0c8bc654165f2f35ef3d6 (patch)
tree5f4815b256807f435d580cb9ea29817959029832 /django
parentb78f9a12c83b19f24b4b450de29159d597059673 (diff)
Removed BaseCommand.stdin introduced in 116d39842dab2569013856e9f3701a7cb6554f09.
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.
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