Source code for kodiRename.config.config_dump

# -*- coding: utf-8 -*-
#################################################################################
# MIT License
#
# Copyright (c) 2025 Duncan Fraser
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#################################################################################
#
# File          : config_dump.py
#
# Author        : Duncan Fraser <dfraser@thedrunkencoder.uk>
#
# Description   :
#
#################################################################################
import inspect
from typing import Any, TextIO

from .config_load import (
    driveMappingConfig,
    generalConfig,
    kodiConfig,
    movieConfig,
    tvConfig,
)


[docs] def writeAttributes(configIO: TextIO, object: Any) -> None: """Write Attributes or Methods of object to file :param configIO: Writable Text I/O object :param object: Configuration Object """ for field in object.__annotations__: doc = inspect.getcomments(getattr(object, field)) if doc is not None: configIO.writelines(["# " + i + "\n" for i in doc.split("\n")]) if type(getattr(object, field)) == str or type(getattr(object, field)) == bool: configIO.write('{0}="{1}"'.format(field, getattr(object, field))) else: configIO.write("{0}={1}".format(field, getattr(object, field))) configIO.write("\n")
[docs] def writeGeneralConfig( configIO: TextIO, general_config: generalConfig = generalConfig() ) -> None: """Write General Configuration to file :param configIO: Writable Text I/O object :param general_config: General Configuration """ doc = inspect.getdoc(general_config) if doc is not None: configIO.writelines(["# " + i + "\n" for i in doc.split("\n")]) configIO.write("[general]\n") writeAttributes(configIO=configIO, object=general_config) configIO.write("\n")
[docs] def writeKodiConfig(configIO: TextIO, kodi_config: kodiConfig = kodiConfig()) -> None: """Write Kodi Configuration to file :param configIO: Writable Text I/O object :param kodi_config: Kodi Configuration """ doc = inspect.getdoc(kodi_config) if doc is not None: configIO.writelines(["# " + i + "\n" for i in doc.split("\n")]) configIO.write("[kodi]\n") writeAttributes(configIO=configIO, object=kodi_config) configIO.write("\n")
[docs] def writeMovieConfig( configIO: TextIO, movie_config: movieConfig = movieConfig() ) -> None: """Write Movie Configuration to file :param configIO: Writable Text I/O object :param movie_config: Movie Configuration """ if movie_config.outputDirectory is None: movie_config.outputDirectory = "" doc = inspect.getdoc(movie_config) if doc is not None: configIO.writelines(["# " + i + "\n" for i in doc.split("\n")]) configIO.write("[movie]\n") writeAttributes(configIO=configIO, object=movie_config) configIO.write("\n")
[docs] def writeTvConfig(configIO: TextIO, tv_config: tvConfig = tvConfig()) -> None: """Write TV Configuration to file :param configIO: Writable Text I/O object :param tv_config: TV Configuration """ if tv_config.outputDirectory is None: tv_config.outputDirectory = "" doc = inspect.getdoc(tv_config) if doc is not None: configIO.writelines(["# " + i + "\n" for i in doc.split("\n")]) configIO.write("[tv]\n") writeAttributes(configIO=configIO, object=tv_config) configIO.write("\n")
[docs] def writeDriveMapping( configIO: TextIO, drive_mapping: driveMappingConfig = driveMappingConfig(src="", dest=""), ) -> None: """Write Drive mapping configuration to file :param configIO: Writable Text I/O object :param drive_mapping: Drive Mapping Configuration """ doc = inspect.getdoc(drive_mapping) if doc is not None: configIO.writelines(["# " + i + "\n" for i in doc.split("\n")]) configIO.write("[[drive_mapping]]\n") writeAttributes(configIO=configIO, object=drive_mapping) configIO.write("\n")
[docs] def writeDefaultConfig(configIO: TextIO) -> None: """Write default configuration to file :param configIO: Writable Text I/O object """ writeGeneralConfig(configIO=configIO) writeKodiConfig(configIO=configIO) writeMovieConfig(configIO=configIO) writeTvConfig(configIO=configIO) writeDriveMapping(configIO=configIO)