Source code for pkgcore.config.cparser

"""
ini based configuration format
"""

__all__ = ("config_from_file",)

import configparser
import typing

from snakeoil import mappings

from . import basics, errors


class CaseSensitiveConfigParser(configparser.ConfigParser):
    """Parse to enforce case sensitivity for configparser"""

    def optionxform(self, optionstr: str) -> str:
        """preserve case sensitivity"""
        return optionstr


[docs] def config_from_file(file_obj: typing.Iterable[str]) -> mappings.LazyValDict: """ generate a config dict :param file_obj: file protocol instance :return: :obj:`snakeoil.mappings.LazyValDict` instance """ cparser = CaseSensitiveConfigParser() try: cparser.read_file(file_obj) except configparser.ParsingError as e: raise errors.ParsingError(f"while parsing {file_obj}", e) from e def get_section(section): return basics.ConfigSectionFromStringDict(dict(cparser.items(section))) return mappings.LazyValDict(cparser.sections, get_section)