diff --git a/account/custom_middleware.py b/account/custom_middleware.py index 42a3b0f..b3cc750 100644 --- a/account/custom_middleware.py +++ b/account/custom_middleware.py @@ -17,6 +17,8 @@ from guardian.models import Guardian # multiple devices only # user can login in single # device at a time""" +# force update +# use 308 status code for force update def custom_response(custom_error, response_status = status.HTTP_404_NOT_FOUND): """custom response""" diff --git a/account/serializers.py b/account/serializers.py index dbb52a0..b783efd 100644 --- a/account/serializers.py +++ b/account/serializers.py @@ -123,7 +123,7 @@ class ChangePasswordSerializer(serializers.Serializer): def create(self, validated_data): """ - + change password """ new_password = validated_data.pop('new_password') current_password = validated_data.pop('current_password') @@ -392,7 +392,8 @@ class UserPhoneOtpSerializer(serializers.ModelSerializer): fields = '__all__' class ForceUpdateSerializer(serializers.ModelSerializer): - # ForceUpdate Serializer + """ ForceUpdate Serializer + """ class Meta(object): """ meta info """ diff --git a/base/messages.py b/base/messages.py index 8ad5234..b4abf7d 100644 --- a/base/messages.py +++ b/base/messages.py @@ -101,13 +101,16 @@ ERROR_CODE = { "2072": "You can not approve or reject this task because junior does not exist in the system", "2073": "You can not approve or reject this junior because junior does not exist in the system", "2074": "You can not complete this task because you does not exist in the system", + # deactivate account "2075": "Your account is deactivated. Please contact with admin", "2076": "This junior already associate with you", "2077": "You can not add guardian", "2078": "This junior is not associate with you", + # force update "2079": "Please update your app version for enjoying uninterrupted services", "2080": "Can not add App version", "2081": "You can not add more than 3 guardian", + # guardian code not exist "2082": "Guardian code does not exist" } diff --git a/guardian/serializers.py b/guardian/serializers.py index af11acc..ae72bdc 100644 --- a/guardian/serializers.py +++ b/guardian/serializers.py @@ -36,6 +36,7 @@ from django.utils.translation import gettext as _ # In this serializer file # define user serializer, +# define password validation # create guardian serializer, # task serializer, # guardian serializer, @@ -47,6 +48,7 @@ from django.utils.translation import gettext as _ from rest_framework import serializers class PasswordValidator: + """Password validation""" def __init__(self, min_length=8, max_length=None, require_uppercase=True, require_numbers=True): self.min_length = min_length self.max_length = max_length @@ -57,6 +59,7 @@ class PasswordValidator: self.enforce_password_policy(value) def enforce_password_policy(self, password): + # add validation for password special_characters = "!@#$%^&*()_-+=<>?/[]{}|" if len(password) < self.min_length: raise serializers.ValidationError( @@ -64,16 +67,20 @@ class PasswordValidator: ) if self.max_length is not None and len(password) > self.max_length: + # must be 8 character raise serializers.ValidationError( _("Password must be at most %(max_length)d characters long.") % {'max_length': self.max_length} ) if self.require_uppercase and not any(char.isupper() for char in password): + # must contain upper case letter raise serializers.ValidationError(_("Password must contain at least one uppercase letter.")) if self.require_numbers and not any(char.isdigit() for char in password): + # must contain digit raise serializers.ValidationError(_("Password must contain at least one digit.")) if self.require_numbers and not any(char in special_characters for char in password): + # must contain special character raise serializers.ValidationError(_("Password must contain at least one special character.")) diff --git a/guardian/views.py b/guardian/views.py index b541660..947f071 100644 --- a/guardian/views.py +++ b/guardian/views.py @@ -288,7 +288,8 @@ class ApproveJuniorAPIView(viewsets.ModelViewSet): if request.data['action'] == '1': # use ApproveJuniorSerializer serializer serializer = ApproveJuniorSerializer(context={"guardian_code": guardian.guardian_code, - "junior": junior_queryset, "action": request.data['action']}, + "junior": junior_queryset, + "action": request.data['action']}, data=request.data) if serializer.is_valid(): # save serializer diff --git a/junior/serializers.py b/junior/serializers.py index 09d4241..98616a2 100644 --- a/junior/serializers.py +++ b/junior/serializers.py @@ -523,18 +523,18 @@ class RemoveGuardianCodeSerializer(serializers.ModelSerializer): return instance class FAQSerializer(serializers.ModelSerializer): - # FAQ Serializer + """FAQ Serializer""" class Meta(object): - # meta info + """meta info""" model = FAQ fields = ('id', 'question', 'description') class CreateArticleCardSerializer(serializers.ModelSerializer): - # Article card Serializer + """Article card Serializer""" class Meta(object): - # meta info + """meta info""" model = ArticleCard fields = ('id', 'article') diff --git a/junior/views.py b/junior/views.py index c4297e9..4d20d57 100644 --- a/junior/views.py +++ b/junior/views.py @@ -266,10 +266,10 @@ class FilterJuniorAPIView(viewsets.ModelViewSet): manual_parameters=[ # Example of a query parameter openapi.Parameter( - 'title', # Query parameter name - openapi.IN_QUERY, # Parameter location + 'title', + openapi.IN_QUERY, description='title of the name', - type=openapi.TYPE_STRING, # Parameter type + type=openapi.TYPE_STRING, ), # Add more parameters as needed ]