class CategorySerializer(ma.ModelSerializer):
    articles = ma.Nested('ArticleListSerializer', many=True)
    series = ma.Nested('SeriesListSerializer', many=True)

    class Meta:
        model = Category
        fields = CATEGORY_FIELDS + ('articles', 'series')
class SeriesArticleSerializer(ma.ModelSerializer):
    slug = ma.Nested('ArticleSerializer', attribute='article', only='slug')
    title = ma.Nested('ArticleSerializer', attribute='article', only='title')

    class Meta:
        model = SeriesArticle
        fields = ARTICLE_SERIES_FIELDS
예제 #3
0
class TagSerializer(ma.ModelSerializer):
    articles = ma.Nested('ArticleListSerializer', many=True)
    series = ma.Nested('SeriesListSerializer', many=True)

    class Meta:
        model = Tag
        fields = TAG_FIELDS + ('articles', 'series')
class SeriesSerializer(ma.ModelSerializer):
    articles = ma.Nested('ArticleListSerializer', many=True)
    category = ma.Nested('CategorySerializer', only=('name', 'slug'))
    tags = ma.Nested('TagSerializer', only=('name', 'slug'), many=True)

    class Meta:
        model = Series
        fields = SERIES_FIELDS
예제 #5
0
class ArticleSerializer(ma.ModelSerializer):
    author = ma.Nested('UserSerializer', only=('first_name', 'last_name'))
    category = ma.Nested('CategorySerializer', only=('name', 'slug'))
    series = ma.Nested('ArticleSeriesDetailSerializer',
                       attribute='article_series')
    tags = ma.Nested('TagSerializer', only=('name', 'slug'), many=True)

    class Meta:
        model = Article
        fields = ARTICLE_FIELDS + ('html', )
예제 #6
0
class UserSerializer(ma.ModelSerializer):
    """
    Marshmallow serializer for the :class:`User` model.
    """
    email = ma.Email(required=True)
    roles = ma.Nested('RoleSerializer', only='name', many=True)

    class Meta:
        model = User
        exclude = ('confirmed_at', 'created_at', 'updated_at', 'user_roles')
        dump_only = ('active', 'roles')
        load_only = ('password', )

    def __init__(self,
                 *args,
                 user_manager: UserManager = injectable,
                 **kwargs):
        self.user_manager = user_manager
        super().__init__(*args, **kwargs)

    @ma.validates('email')
    def validate_email(self, email):
        existing = self.user_manager.get_by(email=email)
        if existing and (self.is_create() or existing != self.instance):
            raise ma.ValidationError('Sorry, that email is already taken.')
class ArticleSeriesDetailSerializer(ArticleSeriesSerializer):
    articles = ma.Nested('SeriesArticleSerializer',
                         attribute='series.series_articles',
                         many=True)

    class Meta:
        model = SeriesArticle
        fields = ARTICLE_SERIES_FIELDS + ('articles', )
예제 #8
0
class UserSerializer(ma.ModelSerializer):
    """
    Marshmallow serializer for the :class:`User` model.
    """

    user_manager: UserManager = injectable

    email = ma.Email(required=True)
    password = ma.String(required=True)
    roles = ma.Nested('RoleSerializer', only='name', many=True)

    class Meta:
        model = User
        exclude = ('confirmed_at', 'created_at', 'updated_at', 'user_roles')
        dump_only = ('active', 'roles')
        load_only = ('password',)

    @ma.validates('email')
    def validate_email(self, email):
        existing = self.user_manager.get_by(email=email)
        if existing and (self.is_create() or existing != self.instance):
            raise ma.ValidationError(
                _('flask_unchained.bundles.security:error.email_already_associated',
                  email=email))
예제 #9
0
class ArticleListSerializer(ArticleSerializer):
    series = ma.Nested('ArticleSeriesSerializer', attribute='article_series')

    class Meta:
        model = Article
        fields = ARTICLE_FIELDS