feat(shared): allow loading from ini config file

This commit is contained in:
jo 2022-01-18 07:30:23 +01:00 committed by Kyle Robbertze
parent 65dff91d47
commit b1ecf25d6f
2 changed files with 29 additions and 0 deletions
shared
libretime_shared
tests

View File

@ -1,4 +1,5 @@
import sys
from configparser import ConfigParser
from os import environ
from pathlib import Path
from typing import Any, Dict, Optional
@ -84,6 +85,12 @@ class BaseConfig(BaseModel):
if filepath is None:
return {}
# TODO: Remove ability to load ini files once yaml if fully supported.
if filepath.suffix == ".conf":
config = ConfigParser()
config.read_string(filepath.read_text(encoding="utf-8"))
return {s: dict(config.items(s)) for s in config.sections()}
try:
return safe_load(filepath.read_text(encoding="utf-8"))
except YAMLError as error:

View File

@ -46,6 +46,28 @@ def test_base_config(tmp_path: Path):
assert config.database.port == 8888
FIXTURE_CONFIG_RAW_INI = """
[database]
host = changed
port = 6666
"""
def test_base_config_ini(tmp_path: Path):
config_filepath = tmp_path / "config.conf"
config_filepath.write_text(FIXTURE_CONFIG_RAW_INI)
with mock.patch.dict(
environ,
dict(LIBRETIME_API_KEY="f3bf04fc"),
):
config = FixtureConfig(filepath=config_filepath)
assert config.api_key == "f3bf04fc"
assert config.database.host == "changed"
assert config.database.port == 6666
FIXTURE_CONFIG_RAW_MISSING = """
database:
host: "localhost"