class BaseRegisterSerializer(serializers.Serializer): full_name = serializers.CharField(max_length=36) email = serializers.EmailField(max_length=255) username = serializers.CharField(max_length=255) password = serializers.CharField(min_length=6) def validate_username(self, attrs, source): value = attrs[source] validator = core_validators.RegexValidator(re.compile(r'^[\w.-]+$'), _("invalid username"), "invalid") try: validator(value) except ValidationError: raise ValidationError( _("Required. 255 characters or fewer. Letters, numbers " "and /./-/_ characters'")) return attrs def validate_full_name(self, attrs, source): value = attrs[source] if value != bleach.clean(value): raise ValidationError(_("Invalid full name")) if re.search(r"http[s]?:", value): raise ValidationError(_("Invalid full name")) return attrs
class MembershipValidator(validators.ModelValidator): email = serializers.EmailField(required=True) class Meta: model = models.Membership # IMPORTANT: Maintain the MembershipAdminSerializer Meta up to date # with this info (excluding here user_email and email) read_only_fields = ("user",) exclude = ("token", "email") def validate_email(self, attrs, source): project = attrs.get("project", None) if project is None: project = self.object.project email = attrs[source] qs = models.Membership.objects.all() # If self.object is not None, the serializer is in update # mode, and for it, it should exclude self. if self.object: qs = qs.exclude(pk=self.object.pk) qs = qs.filter(Q(project_id=project.id, user__email=email) | Q(project_id=project.id, email=email)) if qs.count() > 0: raise ValidationError(_("Email address is already taken")) return attrs def validate_role(self, attrs, source): project = attrs.get("project", None) if project is None: project = self.object.project role = attrs[source] if project.roles.filter(id=role.id).count() == 0: raise ValidationError(_("Invalid role for the project")) return attrs def validate_is_admin(self, attrs, source): project = attrs.get("project", None) if project is None: project = self.object.project if (self.object and self.object.user): if self.object.user.id == project.owner_id and not attrs[source]: raise ValidationError(_("The project owner must be admin.")) if not services.project_has_valid_admins(project, exclude_user=self.object.user): raise ValidationError( _("At least one user must be an active admin for this project.") ) return attrs
class BaseRegisterValidator(validators.Validator): full_name = serializers.CharField(max_length=256) email = serializers.EmailField(max_length=255) username = serializers.CharField(max_length=255) password = serializers.CharField(min_length=4) mobile_no = serializers.CharField() aadhaar_no = serializers.CharField() address = serializers.CharField()
class BaseRegisterSerializer(serializers.Serializer): full_name = serializers.CharField(max_length=256) email = serializers.EmailField(max_length=255) username = serializers.CharField(max_length=255) password = serializers.CharField(min_length=4) def validate_username(self, attrs, source): value = attrs[source] validator = validators.RegexValidator(re.compile('^[\w.-]+$'), _("invalid username"), "invalid") try: validator(value) except ValidationError: raise serializers.ValidationError(_("Required. 255 characters or fewer. Letters, numbers " "and /./-/_ characters'")) return attrs
class MemberBulkSerializer(RoleExistsValidator, serializers.Serializer): email = serializers.EmailField() role_id = serializers.IntegerField()
class MembershipSerializer(serializers.ModelSerializer): role_name = serializers.CharField(source='role.name', required=False, read_only=True, i18n=True) full_name = serializers.CharField(source='user.get_full_name', required=False, read_only=True) user_email = serializers.EmailField(source='user.email', required=False, read_only=True) is_user_active = serializers.BooleanField(source='user.is_active', required=False, read_only=True) email = serializers.EmailField(required=True) color = serializers.CharField(source='user.color', required=False, read_only=True) photo = serializers.SerializerMethodField("get_photo") project_name = serializers.SerializerMethodField("get_project_name") project_slug = serializers.SerializerMethodField("get_project_slug") invited_by = UserBasicInfoSerializer(read_only=True) is_owner = serializers.SerializerMethodField("get_is_owner") class Meta: model = models.Membership # IMPORTANT: Maintain the MembershipAdminSerializer Meta up to date # with this info (excluding here user_email and email) read_only_fields = ("user",) exclude = ("token", "user_email", "email") def get_photo(self, project): return get_photo_or_gravatar_url(project.user) def get_project_name(self, obj): return obj.project.name if obj and obj.project else "" def get_project_slug(self, obj): return obj.project.slug if obj and obj.project else "" def get_is_owner(self, obj): return (obj and obj.user_id and obj.project_id and obj.project.owner_id and obj.user_id == obj.project.owner_id) def validate_email(self, attrs, source): project = attrs.get("project", None) if project is None: project = self.object.project email = attrs[source] qs = models.Membership.objects.all() # If self.object is not None, the serializer is in update # mode, and for it, it should exclude self. if self.object: qs = qs.exclude(pk=self.object.pk) qs = qs.filter(Q(project_id=project.id, user__email=email) | Q(project_id=project.id, email=email)) if qs.count() > 0: raise serializers.ValidationError(_("Email address is already taken")) return attrs def validate_role(self, attrs, source): project = attrs.get("project", None) if project is None: project = self.object.project role = attrs[source] if project.roles.filter(id=role.id).count() == 0: raise serializers.ValidationError(_("Invalid role for the project")) return attrs def validate_is_admin(self, attrs, source): project = attrs.get("project", None) if project is None: project = self.object.project if (self.object and self.object.user): if self.object.user.id == project.owner_id and attrs[source] != True: raise serializers.ValidationError(_("The project owner must be admin.")) if not services.project_has_valid_admins(project, exclude_user=self.object.user): raise serializers.ValidationError(_("At least one user must be an active admin for this project.")) return attrs
class _MemberBulkValidator(validators.Validator): email = serializers.EmailField() role_id = serializers.IntegerField()