from typing import List, Union import configparser class Config(configparser.ConfigParser): __slots__ = ('name', '_db') def __init__(self, name): super().__init__() self._db = super() self._db.read(name) def find(self, value: str, **kwargs) \ -> Union[ List[configparser.SectionProxy], configparser.SectionProxy ]: key = kwargs.get('key', None) first = kwargs.get('first', False) results = [] for name, section in self._db.items(): if key is None: for k in section.keys(): if section.get(k) == value: results.append(section) if first and len(results) == 1: return results[0] else: if section.get(key) == value: results.append(section) if first and len(results) == 1: return results[0] return results