app/api/schema/tracks.py
import re
from marshmallow import validates_schema
from marshmallow_jsonapi import fields
from marshmallow_jsonapi.flask import Relationship
from app.api.helpers.errors import UnprocessableEntityError
from app.api.helpers.utilities import dasherize
from app.api.schema.base import SoftDeletionSchema
class TrackSchema(SoftDeletionSchema):
"""
Api Schema for track model
"""
class Meta:
"""
Meta class for User Api Schema
"""
type_ = 'track'
self_view = 'v1.track_detail'
self_view_kwargs = {'id': '<id>'}
inflect = dasherize
@validates_schema
def valid_color(self, data):
if 'color' not in data:
raise UnprocessableEntityError(
{'pointer': '/data/attributes/color'},
"Color attribut is required",
)
if not re.search(r'^#(?:[0-9a-fA-F]{3}){1,2}$', data['color']):
raise UnprocessableEntityError(
{'pointer': 'data/attributes/color'},
"Color should be proper HEX color code",
)
id = fields.Str(dump_only=True)
name = fields.Str(required=True)
description = fields.Str(allow_none=True)
color = fields.Str(required=True)
font_color = fields.Str(allow_none=True, dump_only=True)
position = fields.Integer(allow_none=True, default=0)
event = Relationship(
self_view='v1.track_event',
self_view_kwargs={'id': '<id>'},
related_view='v1.event_detail',
related_view_kwargs={'track_id': '<id>'},
schema='EventSchemaPublic',
type_='event',
)
sessions = Relationship(
self_view='v1.track_sessions',
self_view_kwargs={'id': '<id>'},
related_view='v1.session_list',
related_view_kwargs={'track_id': '<id>'},
schema='SessionSchema',
many=True,
type_='session',
)