class IssuerRoleActionSerializerV1(serializers.Serializer): """ A serializer used for validating user role change POSTS """ action = serializers.ChoiceField(('add', 'modify', 'remove'), allow_blank=True) username = serializers.CharField(allow_blank=True, required=False) email = serializers.EmailField(allow_blank=True, required=False) role = serializers.CharField(validators=[ ChoicesValidator(list(dict(IssuerStaff.ROLE_CHOICES).keys())) ], default=IssuerStaff.ROLE_STAFF) url = serializers.URLField(max_length=1024, required=False) telephone = serializers.CharField(max_length=100, required=False) def validate(self, attrs): identifiers = [ attrs.get('username'), attrs.get('email'), attrs.get('url'), attrs.get('telephone') ] identifier_count = len(list(filter(None.__ne__, identifiers))) if identifier_count > 1: raise serializers.ValidationError( 'Please provided only one of the following: a username, email address, url, or telephone recipient identifier.' ) return attrs
class IssuerStaffSerializerV2(DetailSerializerV2): user = EntityRelatedFieldV2(source='cached_user', queryset=BadgeUser.cached) role = serializers.CharField(validators=[ChoicesValidator(dict(IssuerStaff.ROLE_CHOICES).keys())]) class Meta(DetailSerializerV2.Meta): apispec_definition = ('IssuerStaff', { 'properties': { 'role': { 'type': "string", 'enum': ["staff", "editor", "owner"] } } })
class IssuerRoleActionSerializerV1(serializers.Serializer): """ A serializer used for validating user role change POSTS """ action = serializers.ChoiceField(('add', 'modify', 'remove'), allow_blank=True) username = serializers.CharField(allow_blank=True, required=False) email = serializers.EmailField(allow_blank=True, required=False) role = serializers.CharField( validators=[ChoicesValidator(dict(IssuerStaff.ROLE_CHOICES).keys())], default=IssuerStaff.ROLE_STAFF) def validate(self, attrs): if attrs.get('username') and attrs.get('email'): raise serializers.ValidationError( 'Either a username or email address must be provided, not both.') return attrs
class IssuerStaffSerializerV1(serializers.Serializer): """ A read_only serializer for staff roles """ user = BadgeUserProfileSerializerV1(source='cached_user') role = serializers.CharField( validators=[ChoicesValidator(dict(IssuerStaff.ROLE_CHOICES).keys())]) class Meta: list_serializer_class = CachedListSerializer apispec_definition = ('IssuerStaff', { 'properties': { 'role': { 'type': "string", 'enum': ["staff", "editor", "owner"] } } })