def handle(self, *args, **options): username = options.get('username', None) email = options.get('email', None) interactive = options.get('interactive') verbosity = int(options.get('verbosity', 1)) database = options.get('database') # Do quick and dirty validation if --noinput if not interactive: if not username or not email: raise CommandError("You must use --username and --email with --noinput.") if not RE_VALID_USERNAME.match(username): raise CommandError("Invalid username. Use only letters, digits, and underscores") try: is_valid_email(email) except exceptions.ValidationError: raise CommandError("Invalid email address.") # If not provided, create the user with an unusable password password = None # Prompt for username/email/password. Enclose this whole thing in a # try/except to trap for a keyboard interrupt and exit gracefully. if interactive: default_username = get_default_username() try: # Get a username while 1: if not username: input_msg = 'Username' if default_username: input_msg += ' (leave blank to use %r)' % default_username username = input(input_msg + ': ') if default_username and username == '': username = default_username if not RE_VALID_USERNAME.match(username): self.stderr.write("Error: That username is invalid. Use only letters, digits and underscores.") username = None continue try: User.objects.using(database).get(username=username) except User.DoesNotExist: break else: self.stderr.write("Error: That username is already taken.") username = None # Get an email while 1: if not email: email = input('E-mail address: ') try: is_valid_email(email) except exceptions.ValidationError: self.stderr.write("Error: That e-mail address is invalid.") email = None else: break # Get a password while 1: if not password: password = getpass.getpass() password2 = getpass.getpass('Password (again): ') if password != password2: self.stderr.write("Error: Your passwords didn't match.") password = None continue if password.strip() == '': self.stderr.write("Error: Blank passwords aren't allowed.") password = None continue break except KeyboardInterrupt: self.stderr.write("\nOperation cancelled.") sys.exit(1) User.objects.db_manager(database).create_superuser(username, email, password) if verbosity >= 1: self.stdout.write("Superuser created successfully.")
def test_existing(self): models.User.objects.create(username='******') management.get_system_username = lambda: 'joe' self.assertEqual(management.get_default_username(), '') self.assertEqual( management.get_default_username(check_db=False), 'joe')
def test_i18n(self): # 'Julia' with accented 'u': management.get_system_username = lambda: 'J\xfalia' self.assertEqual(management.get_default_username(), 'julia')
def test_simple(self): management.get_system_username = lambda: 'joe' self.assertEqual(management.get_default_username(), 'joe')