Source code for transparentmeta.request.write_request

# SPDX-License-Identifier: GPL-3.0-or-later
# Copyright (c) 2025 Transparent Audio
# Author: Valerio Velardo - valerio@transparentaudio.ai

"""
Defines the Pydantic model for handling metadata write requests.

This model is used to validate user-provided input and structure it for
processing by the metadata write use case. It ensures that:

1. The file path exists,
2. The file is in a supported audio format,
3. The file is a valid, functioning audio file,
4. The file has write permissions,
5. The metadata conforms to structured validation rules.
"""

from pathlib import Path

from pydantic import BaseModel, field_validator

from transparentmeta.entity.metadata import Metadata
from transparentmeta.request.file_validators import (
    validate_audio_file_is_functioning,
    validate_audio_format_is_supported,
    validate_file_exists,
    validate_file_has_write_permissions,
)


[docs] class WriteRequest(BaseModel): """Pydantic model representing a request to write metadata to an audio file. Attributes: filepath (Path): Path to the audio file. Validated for existence, supported format, integrity, and write permissions. metadata (Metadata): Metadata to be written to the audio file. """ filepath: Path metadata: Metadata
[docs] @field_validator("filepath") @classmethod def validate_filepath(cls, value: Path) -> Path: """Validates the provided file path using multiple file validation functions. Ensures that: 1. The file exists. 2. The file format is supported. 3. The file is a valid audio file. 4. The file has write permissions. Args: value (Path): The path to the file. Returns: Path: The validated file path. Raises: FileNotFoundError: If the file does not exist. UnsupportedAudioFormatError: If the format is not supported. InvalidAudioFileError: If the file is not a functioning audio file. FilePermissionError: If the file is not writable. """ value = validate_file_exists(value) value = validate_audio_format_is_supported(value) value = validate_audio_file_is_functioning(value) value = validate_file_has_write_permissions(value) return value