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

View File

@ -1,4 +1,5 @@
import sys import sys
from configparser import ConfigParser
from os import environ from os import environ
from pathlib import Path from pathlib import Path
from typing import Any, Dict, Optional from typing import Any, Dict, Optional
@ -84,6 +85,12 @@ class BaseConfig(BaseModel):
if filepath is None: if filepath is None:
return {} 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: try:
return safe_load(filepath.read_text(encoding="utf-8")) return safe_load(filepath.read_text(encoding="utf-8"))
except YAMLError as error: except YAMLError as error:

View File

@ -46,6 +46,28 @@ def test_base_config(tmp_path: Path):
assert config.database.port == 8888 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 = """ FIXTURE_CONFIG_RAW_MISSING = """
database: database:
host: "localhost" host: "localhost"