From e0c4ffe0d68dc556356cf4f105f728119cae3f65 Mon Sep 17 00:00:00 2001 From: mario Date: Tue, 29 Aug 2017 08:04:02 +0200 Subject: [PATCH] chore: refactored error messages --- rest_auth/registration/serializers.py | 43 +++++++++++++++++++-------- rest_auth/serializers.py | 39 ++++++++++++++++-------- 2 files changed, 57 insertions(+), 25 deletions(-) diff --git a/rest_auth/registration/serializers.py b/rest_auth/registration/serializers.py index c6b5d5b..eba7161 100644 --- a/rest_auth/registration/serializers.py +++ b/rest_auth/registration/serializers.py @@ -23,6 +23,21 @@ class SocialLoginSerializer(serializers.Serializer): access_token = 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): request = self.context.get('request') if not isinstance(request, HttpRequest): @@ -49,13 +64,11 @@ class SocialLoginSerializer(serializers.Serializer): request = self._get_request() if not view: - raise serializers.ValidationError( - _("View is not defined, pass it as a context variable") - ) + self.fail('view_not_defined') adapter_class = getattr(view, 'adapter_class', None) if not adapter_class: - raise serializers.ValidationError(_("Define adapter_class in view")) + self.fail('adapter_class_missing') adapter = adapter_class(request) app = adapter.get_provider().get_app(request) @@ -73,13 +86,12 @@ class SocialLoginSerializer(serializers.Serializer): self.client_class = getattr(view, 'client_class', None) if not self.callback_url: + self.fail('callback_url_missing') raise serializers.ValidationError( _("Define callback_url in view") ) if not self.client_class: - raise serializers.ValidationError( - _("Define client_class in view") - ) + self.fail('client_class_missing') code = attrs.get('code') @@ -98,8 +110,7 @@ class SocialLoginSerializer(serializers.Serializer): access_token = token['access_token'] else: - raise serializers.ValidationError( - _("Incorrect input. access_token or code is required.")) + self.fail('incorrect_input') social_token = adapter.parse_token({'access_token': access_token}) social_token.app = app @@ -108,7 +119,7 @@ class SocialLoginSerializer(serializers.Serializer): login = self.get_social_login(adapter, app, social_token, access_token) complete_social_login(request, login) except HTTPError: - raise serializers.ValidationError(_('Incorrect value')) + self.fail('incorrect_value') if not login.is_existing: login.lookup() @@ -128,6 +139,13 @@ class RegisterSerializer(serializers.Serializer): password1 = 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): username = get_adapter().clean_username(username) return username @@ -136,8 +154,7 @@ class RegisterSerializer(serializers.Serializer): email = get_adapter().clean_email(email) if allauth_settings.UNIQUE_EMAIL: if email and email_address_exists(email): - raise serializers.ValidationError( - _("A user is already registered with this e-mail address.")) + self.fail('user_already_registered') return email def validate_password1(self, password): @@ -145,7 +162,7 @@ class RegisterSerializer(serializers.Serializer): def validate(self, data): if data['password1'] != data['password2']: - raise serializers.ValidationError(_("The two password fields didn't match.")) + self.fail('password_didnt_match') return data def custom_signup(self, request, user): diff --git a/rest_auth/serializers.py b/rest_auth/serializers.py index 723cfca..c6186d4 100644 --- a/rest_auth/serializers.py +++ b/rest_auth/serializers.py @@ -21,14 +21,28 @@ class LoginSerializer(serializers.Serializer): email = serializers.EmailField(required=False, allow_blank=True) 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): user = None if email and password: user = authenticate(email=email, password=password) else: - msg = _('Must include "email" and "password".') - raise exceptions.ValidationError(msg) + self.fail('email_and_password_required') return user @@ -38,8 +52,7 @@ class LoginSerializer(serializers.Serializer): if username and password: user = authenticate(username=username, password=password) else: - msg = _('Must include "username" and "password".') - raise exceptions.ValidationError(msg) + self.fail('username_and_password_required') return user @@ -51,8 +64,7 @@ class LoginSerializer(serializers.Serializer): elif username and password: user = authenticate(username=username, password=password) else: - msg = _('Must include either "username" or "email" and "password".') - raise exceptions.ValidationError(msg) + self.fail('either_username_or_email_and_password_required') return user @@ -92,11 +104,9 @@ class LoginSerializer(serializers.Serializer): # Did we get back an active user? if user: if not user.is_active: - msg = _('User account is disabled.') - raise exceptions.ValidationError(msg) + self.fail('user_account_disabled') else: - msg = _('Unable to log in with provided credentials.') - raise exceptions.ValidationError(msg) + self.fail('cannot_log_in') # If required, is the email verified? 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: email_address = user.emailaddress_set.get(email=user.email) if not email_address.verified: - raise serializers.ValidationError(_('E-mail is not verified.')) + self.fail('email_not_verified') attrs['user'] = user return attrs @@ -230,6 +240,10 @@ class PasswordChangeSerializer(serializers.Serializer): set_password_form_class = SetPasswordForm + default_error_messages = { + 'invalid_password': _('Invalid password.'), + } + def __init__(self, *args, **kwargs): self.old_password_field_enabled = getattr( settings, 'OLD_PASSWORD_FIELD_ENABLED', False @@ -253,7 +267,8 @@ class PasswordChangeSerializer(serializers.Serializer): ) if all(invalid_password_conditions): - raise serializers.ValidationError('Invalid password') + self.fail('invalid_password') + return value def validate(self, attrs):