feat(shared): allow loading from ini config file
This commit is contained in:
parent
65dff91d47
commit
b1ecf25d6f
|
@ -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:
|
||||||
|
|
|
@ -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"
|
||||||
|
|
Loading…
Reference in New Issue