def signup(data, login=True, remember=False): data = data or dict() email = data.get('email') username = data.get('username') password = data.get('password') confirm = data.get('password_confirm') email = validate_email(email) username = validate_username(username) password = validate_password(password, confirm) try: usr = user.create(username, password, email=email) except exc.InvalidPasswordError: raise ValidationError('Invalid Password') except exc.UsernameUnavailableError: raise ValidationError('Username has already been taken') except exc.EmailUnavailableError: raise ValidationError('Email has already been taken') if login: login_user(usr, remember=remember) return usr