aliceplex/schema

View on GitHub
aliceplex/schema/schema/episode.py

Summary

Maintainability
A
0 mins
Test Coverage
from marshmallow import fields
from marshmallow.validate import Length, Range

from aliceplex.schema.model import Episode
from aliceplex.schema.schema.base import DataClassSchema
from aliceplex.schema.schema.person import PersonSchema, PersonStrictSchema

__all__ = ["EpisodeSchema", "EpisodeStrictSchema"]


class EpisodeSchema(DataClassSchema):
    """
    Schema for :class:`aliceplex.schema.model.Episode`
    """

    title = fields.List(fields.Str(allow_none=False), allow_none=False)
    aired = fields.Date(allow_none=True)
    content_rating = fields.Str(allow_none=True)
    summary = fields.Str(allow_none=True)
    directors = fields.List(
        fields.Pluck(PersonSchema, "name", allow_none=False),
        allow_none=False
    )
    writers = fields.List(
        fields.Pluck(PersonSchema, "name", allow_none=False),
        allow_none=False
    )
    rating = fields.Float(validate=Range(min=0, max=10), allow_none=True)

    @property
    def data_class(self) -> type:
        return Episode


class EpisodeStrictSchema(EpisodeSchema):
    """
    Strict schema for :class:`aliceplex.schema.model.Episode`
    """

    title = fields.List(
        fields.Str(allow_none=False),
        validate=Length(min=1),
        allow_none=False,
        required=True
    )
    aired = fields.Date(allow_none=True)
    content_rating = fields.Str(allow_none=False, required=True)
    summary = fields.Str(allow_none=False, required=True)
    directors = fields.List(
        fields.Pluck(PersonStrictSchema, "name", allow_none=False),
        allow_none=False,
        required=True
    )
    writers = fields.List(
        fields.Pluck(PersonStrictSchema, "name", allow_none=False),
        allow_none=False,
        required=True
    )
    rating = fields.Float(validate=Range(min=0, max=10), allow_none=True)