diff options
Diffstat (limited to 'src/ee/fact/__init__.py')
-rw-r--r-- | src/ee/fact/__init__.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/ee/fact/__init__.py b/src/ee/fact/__init__.py new file mode 100644 index 0000000..5c6d789 --- /dev/null +++ b/src/ee/fact/__init__.py @@ -0,0 +1,49 @@ +class Fact(object): + def __init__(self, kind): + self._kind = kind + self._domains = {} + + @property + def kind() -> str: + return self._kind + + def attr(self, domain: str, key: str): + try: + return self._domains[domain][key] + except KeyError: + pass + + def set(self, domain: str, key: str, value: str): + _kv(domain)[key] = value + + def _kv(self, domain: str): + try: + kv = self._domains[domain] + except KeyError: + kv = {} + self._domains[domain] = kv + + return kv + + def view(self, domain: str): + return FactKv(self, domain, self._kv(domain)) + + def write(self, output): + import configparser + ini = configparser.ConfigParser(interpolation = None) + for domain, kv in self._domains.items(): + ini.add_section(domain) + for key, value in kv.items(): + ini.set(domain, key, value) + + ini.write(output) + + +class FactKv(object): + def __init__(self, fact, domain, kv): + self._fact = fact + self._domain = domain + self._kv = kv + + def set(self, key, value): + self._kv[key] = value |