Working config loading from TOML, env var, cli args

This commit is contained in:
3wc
2025-08-06 11:07:45 +01:00
parent 4fcf972e17
commit 69d471a859
4 changed files with 26 additions and 40 deletions

View File

@ -42,14 +42,15 @@ db.init(HAMSTER_FILE)
@click.group(context_settings={"auto_envvar_prefix": "HAMSTERTOOL"})
@click.option("-d", "--debug", is_flag=True)
@click.option("--config", default=CONFIG_FILE, type=click.Path())
@click.option("--kimai-api-key", envvar="KIMAI_API_KEY")
@click.option("--kimai-api-url", envvar="KIMAI_API_URL")
@click.option("--kimai-username", envvar="KIMAI_USERNAME")
@click.option("--kimai-api-key", envvar="KIMAI_API_KEY")
@click.pass_context
def cli(ctx, config, debug, kimai_api_url, kimai_username, kimai_api_key):
def cli(ctx, config, debug, kimai_api_url=None, kimai_username=None, kimai_api_key=None):
file_config = {}
if os.path.exists(config):
with open(config, "rb") as f:
ctx.default_map = tomllib.load(f)
file_config = tomllib.load(f)
if debug:
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
@ -62,6 +63,12 @@ def cli(ctx, config, debug, kimai_api_url, kimai_username, kimai_api_key):
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True
ctx.obj = KimaiAPI(
kimai_username if kimai_username is not None else file_config.get("kimai_username"),
kimai_api_key if kimai_api_key is not None else file_config.get("kimai_api_key"),
kimai_api_url if kimai_api_url is not None else file_config.get("kimai_api_url"),
)
@cli.group()
def categories():
@ -326,12 +333,8 @@ def find_duplicates():
@cli.group()
@click.pass_context
def kimai(ctx, kimai_username=None, kimai_api_key=None):
ctx.ensure_object(dict)
ctx.obj['KIMAI_USERNAME'] = kimai_username
ctx.obj['KIMAI_API_KEY'] = kimai_api_key
def kimai():
pass
def _get_kimai_mapping_file(path, category_search=None):
@ -776,11 +779,10 @@ def reset():
@db_.command("sync")
@click.pass_context
def kimai_db_sync(ctx):
@click.pass_obj
def kimai_db_sync(api):
sync(
username=ctx.obj['KIMAI_USERNAME'],
api_key=ctx.obj['KIMAI_API_KEY']
api
)
@ -822,14 +824,12 @@ def mapping2db(mapping_path=None, global_=False):
@cli.command()
@click.pass_context
def app(ctx):
@click.pass_obj
def app(kimai_api):
from .app import HamsterToolsApp
app = HamsterToolsApp(
kimai_api_url=ctx.obj["KIMAI_API_URL"],
kimai_username=ctx.obj["KIMAI_USERNAME"],
kimai_api_key=ctx.obj["KIMAI_API_KEY"]
kimai_api
)
app.run()