Source code for transparentmeta.sdk.factory

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

"""
This module provides factory functions for creating instances of
`TransparentMetadataWriter` and `TransparentMetadataReader` with a simple
function call.

Developers should use these functions as the primary interface for
instantiating these classes, which serve as the main entry points for
writing and reading digitally-signed metadata in audio files using
transparentmeta.
"""

import logging

from cryptography.hazmat.primitives.asymmetric.ed25519 import (
    Ed25519PrivateKey,
    Ed25519PublicKey,
)

from transparentmeta.sdk.transparent_metadata_reader import (
    TransparentMetadataReader,
)
from transparentmeta.sdk.transparent_metadata_writer import (
    TransparentMetadataWriter,
)
from transparentmeta.use_case.read.factory import build_read_use_case
from transparentmeta.use_case.read.reader_selector import ReaderSelector
from transparentmeta.use_case.write.factory import build_write_use_case
from transparentmeta.use_case.write.writer_selector import WriterSelector

logger = logging.getLogger(__name__)


[docs] def build_transparent_metadata_writer( private_key: Ed25519PrivateKey, ) -> TransparentMetadataWriter: """Creates an instance of TransparentWriter with all dependencies resolved. Args: private_key (Ed25519PrivateKey): The private key used for signing. Returns: transparent_metadata_writer (TransparentMetadataWriter): An instance of TransparentWriter ready to be used for metadata writing """ logger.info( "Building TransparentMetadataWriter instance with provided private key" ) writer_selector = WriterSelector() logger.debug("WriterSelector instance created ") write_use_case = build_write_use_case( private_key, "mp3", ) transparent_metadata_writer = TransparentMetadataWriter( write_use_case, writer_selector ) logger.info("TransparentMetadataWriter instance created") return transparent_metadata_writer
[docs] def build_transparent_metadata_reader( public_key: Ed25519PublicKey, ) -> TransparentMetadataReader: """Creates an instance of TransparentReader with all dependencies resolved. Args: public_key (Ed25519PrivateKey): The public key used for signature verification. Returns: transparent_metadata_reader (TransparentMetadataReader): An instance of TransparentReader ready to be used for metadata reading """ logger.info( "Building TransparentMetadataReader instance with provided " "public key" ) reader_selector = ReaderSelector() logger.debug("ReaderSelector instance created") read_use_case = build_read_use_case( public_key, "mp3", ) transparent_metadata_reader = TransparentMetadataReader( read_use_case, reader_selector ) logger.info("TransparentMetadataReader instance created") return transparent_metadata_reader