Kaydet (Commit) 2a9ee49f authored tarafından Baptiste Mispelon's avatar Baptiste Mispelon

Removed BaseCommand.stdin introduced in 116d3984.

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.
üst b78f9a12
......@@ -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
......
......@@ -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):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment