From 87198ed9982bc3dfde09a94affc79ba111993cfb Mon Sep 17 00:00:00 2001 From: Milad Gholamrezaei Date: Tue, 9 Jun 2020 17:18:06 +0430 Subject: [PATCH] added __call__ and __repr__ methods to PasswordValidator class --- rest_framework/validators.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/rest_framework/validators.py b/rest_framework/validators.py index 94c7542ce..2f3aadef9 100644 --- a/rest_framework/validators.py +++ b/rest_framework/validators.py @@ -8,6 +8,7 @@ object creation, and makes it possible to switch between using the implicit """ from django.db import DataError from django.utils.translation import gettext_lazy as _ +from django.contrib.auth import password_validation from rest_framework.exceptions import ValidationError from rest_framework.utils.representation import smart_repr @@ -46,7 +47,21 @@ class PasswordValidator: self.validators = validators self.user = user + def __call__(self, value, serializer_field): + try: + password_validation.validate_password( + password=value, + user=self.user, + password_validators=self.validators + ) + except ValidationError as e: + raise ValidationError(e) + def __repr__(self): + return '<%s(validators=%s)>' % ( + self.__class__.__name__, + self.validators if self.validators else 'AUTH_PASSWORD_VALIDATORS' + ) class UniqueValidator: