Refactor config file loading with decorator

Introduced ConfigFile.loader decorator to handle config file loading in CLI entrypoint. Removed manual config file loading logic from main function for improved modularity and readability.
This commit is contained in:
Rafael Moraes
2026-01-17 01:37:49 -03:00
parent d6afb680be
commit c770ff361f
2 changed files with 15 additions and 4 deletions
+1 -4
View File
@@ -47,6 +47,7 @@ def make_sync(func):
@click.help_option("-h", "--help")
@click.version_option(__version__, "-v", "--version")
@dataclass_click(CliConfig)
@ConfigFile.loader
@make_sync
async def main(config: CliConfig):
colorama.just_fix_windows_console()
@@ -66,10 +67,6 @@ async def main(config: CliConfig):
logger.info(f"Starting Gamdl {__version__}")
if not config.no_config_file:
config_file = ConfigFile(config.config_path)
config = config_file.load()
if config.use_wrapper:
apple_music_api = await AppleMusicApi.create_from_wrapper(
wrapper_account_url=config.wrapper_account_url,
+14
View File
@@ -1,5 +1,6 @@
import configparser
import typing
from functools import wraps
from pathlib import Path
import click
@@ -151,3 +152,16 @@ class ConfigFile:
self.add_params_default_to_config()
self.update_params_from_config()
return self.get_cli_config()
@staticmethod
def loader(func):
@wraps(func)
def wrapper(cli_config: CliConfig):
ctx = click.get_current_context()
config_path = ctx.params.get("config_path")
no_config_file = ctx.params.get("no_config_file")
if config_path and not no_config_file:
cli_config = ConfigFile(config_path).load()
return func(cli_config)
return wrapper