"""Schema for sound recording metadata.""" from marshmallow import fields, validate from analytics.schemas import fields as custom_fields from analytics.schemas.common import BaseSchema ISRC_REGEX = r"^[A-Z]{2}-?\w{3}-?\d{2}-?\d{5}$" class ISRC(fields.Str): def __init__(self, **additional_metadata): super().__init__(**additional_metadata, validate=validate.Regexp(ISRC_REGEX)) class ArtistSchema(BaseSchema): """Marshmallow schema for artist.""" artist_name = fields.String() artist_type = fields.String(data_key="artist_type", attribute="type") class ProductMetadataSchema(BaseSchema): """Marshmallow schema for sound-recording-product metadata.""" product_id = fields.String() release_name = fields.String(data_key="product_name") release_date = custom_fields.UnifiedDate() release_format = fields.String(data_key="format") release_version = fields.String(data_key="version") sales_start_date = custom_fields.UnifiedDate(data_key="sale_start_date") artists = fields.Nested(ArtistSchema, many=True, data_key="primary_artists") release_id = fields.String(data_key="upc") subaccount_id = fields.String() subaccount_name = fields.String() is_deleted = fields.Boolean() class SoundRecordingMetadataSchema(BaseSchema): """Marshmallow for sound recording metadata.""" isrc = fields.String() track_name = fields.String(data_key="name") artist_name = fields.String() artists = fields.Nested(ArtistSchema, data_key="primary_artists", many=True) products = fields.Nested(ProductMetadataSchema, many=True)