Coverage for src/configuraptor/loaders/__init__.py: 100%
12 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-07-03 15:35 +0200
« prev ^ index » next coverage.py v7.2.7, created at 2023-07-03 15:35 +0200
1"""
2Loads loaders based on Python version.
3"""
5import typing
6from pathlib import Path
8from ._types import T_config
10# tomli used for every Python version now.
11from .loaders_shared import dotenv, ini, json, toml, yaml
13__all__ = ["get", "toml", "json", "yaml", "dotenv", "ini"]
15T_loader = typing.Callable[[typing.BinaryIO, Path], T_config]
17LOADERS: dict[str, T_loader] = {
18 "toml": toml,
19 "json": json,
20 "yml": yaml,
21 "yaml": yaml,
22 "env": dotenv,
23 "ini": ini,
24}
27def get(extension: str) -> T_loader:
28 """
29 Get the right loader for a specific extension.
30 """
31 extension = extension.removeprefix(".")
32 if loader := LOADERS.get(extension):
33 return loader
34 else:
35 raise ValueError(f"Invalid extension {extension}")