chore: refactored error messages

This commit is contained in:
mario 2017-08-29 08:04:02 +02:00
parent 9d1f65eedc
commit e0c4ffe0d6
2 changed files with 57 additions and 25 deletions

View File

@ -23,6 +23,21 @@ class SocialLoginSerializer(serializers.Serializer):
access_token = serializers.CharField(required=False, allow_blank=True) access_token = serializers.CharField(required=False, allow_blank=True)
code = serializers.CharField(required=False, allow_blank=True) code = serializers.CharField(required=False, allow_blank=True)
default_error_messages = {
'view_not_defined':
_('View is not defined, pass it as a context variable'),
'adapter_class_missing':
_('Define adapter_class in view'),
'callback_url_missing':
_('Define callback_url in view'),
'client_class_missing':
_('Define client_class in view'),
'incorrect_input':
_('Incorrect input. access_token or code is required.'),
'incorrect_value':
_('Incorrect value')
}
def _get_request(self): def _get_request(self):
request = self.context.get('request') request = self.context.get('request')
if not isinstance(request, HttpRequest): if not isinstance(request, HttpRequest):
@ -49,13 +64,11 @@ class SocialLoginSerializer(serializers.Serializer):
request = self._get_request() request = self._get_request()
if not view: if not view:
raise serializers.ValidationError( self.fail('view_not_defined')
_("View is not defined, pass it as a context variable")
)
adapter_class = getattr(view, 'adapter_class', None) adapter_class = getattr(view, 'adapter_class', None)
if not adapter_class: if not adapter_class:
raise serializers.ValidationError(_("Define adapter_class in view")) self.fail('adapter_class_missing')
adapter = adapter_class(request) adapter = adapter_class(request)
app = adapter.get_provider().get_app(request) app = adapter.get_provider().get_app(request)
@ -73,13 +86,12 @@ class SocialLoginSerializer(serializers.Serializer):
self.client_class = getattr(view, 'client_class', None) self.client_class = getattr(view, 'client_class', None)
if not self.callback_url: if not self.callback_url:
self.fail('callback_url_missing')
raise serializers.ValidationError( raise serializers.ValidationError(
_("Define callback_url in view") _("Define callback_url in view")
) )
if not self.client_class: if not self.client_class:
raise serializers.ValidationError( self.fail('client_class_missing')
_("Define client_class in view")
)
code = attrs.get('code') code = attrs.get('code')
@ -98,8 +110,7 @@ class SocialLoginSerializer(serializers.Serializer):
access_token = token['access_token'] access_token = token['access_token']
else: else:
raise serializers.ValidationError( self.fail('incorrect_input')
_("Incorrect input. access_token or code is required."))
social_token = adapter.parse_token({'access_token': access_token}) social_token = adapter.parse_token({'access_token': access_token})
social_token.app = app social_token.app = app
@ -108,7 +119,7 @@ class SocialLoginSerializer(serializers.Serializer):
login = self.get_social_login(adapter, app, social_token, access_token) login = self.get_social_login(adapter, app, social_token, access_token)
complete_social_login(request, login) complete_social_login(request, login)
except HTTPError: except HTTPError:
raise serializers.ValidationError(_('Incorrect value')) self.fail('incorrect_value')
if not login.is_existing: if not login.is_existing:
login.lookup() login.lookup()
@ -128,6 +139,13 @@ class RegisterSerializer(serializers.Serializer):
password1 = serializers.CharField(write_only=True) password1 = serializers.CharField(write_only=True)
password2 = serializers.CharField(write_only=True) password2 = serializers.CharField(write_only=True)
default_error_messages = {
'user_already_registered':
_('A user is already registered with this e-mail address.'),
'password_didnt_match':
_('The two password fields didn\'t match.')
}
def validate_username(self, username): def validate_username(self, username):
username = get_adapter().clean_username(username) username = get_adapter().clean_username(username)
return username return username
@ -136,8 +154,7 @@ class RegisterSerializer(serializers.Serializer):
email = get_adapter().clean_email(email) email = get_adapter().clean_email(email)
if allauth_settings.UNIQUE_EMAIL: if allauth_settings.UNIQUE_EMAIL:
if email and email_address_exists(email): if email and email_address_exists(email):
raise serializers.ValidationError( self.fail('user_already_registered')
_("A user is already registered with this e-mail address."))
return email return email
def validate_password1(self, password): def validate_password1(self, password):
@ -145,7 +162,7 @@ class RegisterSerializer(serializers.Serializer):
def validate(self, data): def validate(self, data):
if data['password1'] != data['password2']: if data['password1'] != data['password2']:
raise serializers.ValidationError(_("The two password fields didn't match.")) self.fail('password_didnt_match')
return data return data
def custom_signup(self, request, user): def custom_signup(self, request, user):

View File

@ -21,14 +21,28 @@ class LoginSerializer(serializers.Serializer):
email = serializers.EmailField(required=False, allow_blank=True) email = serializers.EmailField(required=False, allow_blank=True)
password = serializers.CharField(style={'input_type': 'password'}) password = serializers.CharField(style={'input_type': 'password'})
default_error_messages = {
'email_and_password_required':
_('Must include "email" and "password".'),
'username_and_password_required':
_('Must include "username" and "password".'),
'either_username_or_email_and_password_required':
_('Must include either "username" or "email" and "password".'),
'user_account_disabled':
_('User account is disabled.'),
'cannot_log_in':
_('Unable to log in with provided credentials.'),
'email_not_verified':
_('E-mail is not verified.'),
}
def _validate_email(self, email, password): def _validate_email(self, email, password):
user = None user = None
if email and password: if email and password:
user = authenticate(email=email, password=password) user = authenticate(email=email, password=password)
else: else:
msg = _('Must include "email" and "password".') self.fail('email_and_password_required')
raise exceptions.ValidationError(msg)
return user return user
@ -38,8 +52,7 @@ class LoginSerializer(serializers.Serializer):
if username and password: if username and password:
user = authenticate(username=username, password=password) user = authenticate(username=username, password=password)
else: else:
msg = _('Must include "username" and "password".') self.fail('username_and_password_required')
raise exceptions.ValidationError(msg)
return user return user
@ -51,8 +64,7 @@ class LoginSerializer(serializers.Serializer):
elif username and password: elif username and password:
user = authenticate(username=username, password=password) user = authenticate(username=username, password=password)
else: else:
msg = _('Must include either "username" or "email" and "password".') self.fail('either_username_or_email_and_password_required')
raise exceptions.ValidationError(msg)
return user return user
@ -92,11 +104,9 @@ class LoginSerializer(serializers.Serializer):
# Did we get back an active user? # Did we get back an active user?
if user: if user:
if not user.is_active: if not user.is_active:
msg = _('User account is disabled.') self.fail('user_account_disabled')
raise exceptions.ValidationError(msg)
else: else:
msg = _('Unable to log in with provided credentials.') self.fail('cannot_log_in')
raise exceptions.ValidationError(msg)
# If required, is the email verified? # If required, is the email verified?
if 'rest_auth.registration' in settings.INSTALLED_APPS: if 'rest_auth.registration' in settings.INSTALLED_APPS:
@ -104,7 +114,7 @@ class LoginSerializer(serializers.Serializer):
if app_settings.EMAIL_VERIFICATION == app_settings.EmailVerificationMethod.MANDATORY: if app_settings.EMAIL_VERIFICATION == app_settings.EmailVerificationMethod.MANDATORY:
email_address = user.emailaddress_set.get(email=user.email) email_address = user.emailaddress_set.get(email=user.email)
if not email_address.verified: if not email_address.verified:
raise serializers.ValidationError(_('E-mail is not verified.')) self.fail('email_not_verified')
attrs['user'] = user attrs['user'] = user
return attrs return attrs
@ -230,6 +240,10 @@ class PasswordChangeSerializer(serializers.Serializer):
set_password_form_class = SetPasswordForm set_password_form_class = SetPasswordForm
default_error_messages = {
'invalid_password': _('Invalid password.'),
}
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.old_password_field_enabled = getattr( self.old_password_field_enabled = getattr(
settings, 'OLD_PASSWORD_FIELD_ENABLED', False settings, 'OLD_PASSWORD_FIELD_ENABLED', False
@ -253,7 +267,8 @@ class PasswordChangeSerializer(serializers.Serializer):
) )
if all(invalid_password_conditions): if all(invalid_password_conditions):
raise serializers.ValidationError('Invalid password') self.fail('invalid_password')
return value return value
def validate(self, attrs): def validate(self, attrs):