"""Trafaret schemas for meta information of audio files.""" import trafaret as t from trafaret.extras import KeysSubset from constants import transcoding_types # noqa from constants import audio_standards # noqa import custom_validators # noqa BASE_SCHEMA = t.Dict({ t.Key('bits_per_sample'): t.Or(t.Atom(16), t.Atom(24)), KeysSubset('bits_per_sample', 'sample_rate'): ( custom_validators.sample_rate_validation), t.Key('lossless'): t.Atom(audio_standards.LOSSLESS_VALUE), t.Key('channels'): t.Int(audio_standards.DEFAULT_COUNT_OF_CHANEL), t.Key('channel_mode'): t.String(audio_standards.DEFAULT_CHANEL_MODE), t.Key('sample_rate'): t.Int, t.Key('playtime_seconds'): t.Float, t.Key('bitrate'): t.Int, t.Key('file_size'): t.Int, t.Key('mime_type'): t.Or( t.Atom(transcoding_types.MIME_TYPE_FILE_WAV), t.Atom(transcoding_types.MIME_TYPE_FILE_XWAV), t.Atom(transcoding_types.MIME_TYPE_FILE_VHDWAV), t.Atom(transcoding_types.MIME_TYPE_FILE_FLAC), t.Atom(transcoding_types.MIME_TYPE_FILE_MP4), t.Atom(transcoding_types.MIME_TYPE_FILE_XMP4) ), t.Key('codec'): t.Or( t.Atom(transcoding_types.PCM_CODEC_NAME), t.Atom(transcoding_types.FLAC_CODEC_NAME), t.Atom(transcoding_types.ALAC_CODEC_NAME), ) }, allow_extra='*') WAV_SCHEMA = t.Dict({ KeysSubset( 'channels', 'sample_rate', 'bits_per_sample', 'bitrate' ): custom_validators.wav_bitrate_validation, KeysSubset('playtime_seconds', 'file_size', 'file_size_per_sec'): custom_validators.wav_file_size_validation}, allow_extra='*' )