Source code for lnk.config.manager

#!/usr/bin/env python
#! -*- coding: utf-8 -*-

import os
import json

import lnk.errors

[docs]def get(which, key): """ Convenience method to retrieve only one key without having to instantiate a Manager object. """ return Manager(which)[key]
[docs]class Manager(object): def __init__(self, which=None, write=False): path = os.path.abspath(__file__) parent = os.path.dirname(os.path.dirname(os.path.dirname(path))) self.path = os.path.join(parent, 'config') self.write_upon_exit = write self.which = which self.file = None self.config = self.open(which) if which else None
[docs] def open(self, which): self.file = os.path.join(self.path, '{0}.json'.format(which)) with open(self.file) as source: self.config = json.load(source) return self.config
[docs] def close(self): self.assert_open() self.file = self.config = None
[docs] def write(self): self.assert_open() with open(self.file, 'wt') as destination: json.dump(self.config, destination, indent=4)
[docs] def assert_open(self): if not self.file: what = 'No configuration file was ever opened!' raise lnk.errors.InternalError(what)
@property def keys(self): return self.config.keys() @property def values(self): return self.config.values() @property def items(self): return self.config.items() def __getitem__(self, key): if key not in self.config: raise lnk.errors.InvalidKeyError("Key '{0}' not found.".format(key)) return self.config[key] def __setitem__(self, key, value): if key not in self.config: raise lnk.errors.InvalidKeyError("Key '{0}' not found.".format(key)) self.config[key] = value def __enter__(self): return self def __exit__(self, type, value, traceback): if self.write_upon_exit: self.write() self.close()