diff --git a/pyipptool/__init__.py b/pyipptool/__init__.py index 52bf94e..a736fda 100644 --- a/pyipptool/__init__.py +++ b/pyipptool/__init__.py @@ -1,38 +1,8 @@ -import ConfigParser -import os - +from .config import get_config from .core import IPPToolWrapper -def read_config(paths=('/etc/opt/pyipptool/pyipptool.cfg', - os.path.join(os.path.expanduser('~'), - '.pyipptool.cfg'))): - config = {} - fs_config = ConfigParser.ConfigParser() - fs_config.read(paths) - config['ipptool_path'] = fs_config.get('main', 'ipptool_path') - try: - config['login'] = fs_config.get('main', 'login') - except ConfigParser.NoOptionError: - pass - try: - config['password'] = fs_config.get('main', 'password') - except ConfigParser.NoOptionError: - pass - try: - config['graceful_shutdown_time'] = fs_config.getint( - 'main', - 'graceful_shutdown_time') - except ConfigParser.NoOptionError: - config['graceful_shutdown_time'] = 2 - try: - config['timeout'] = fs_config.getint('main', 'timeout') - except ConfigParser.NoOptionError: - config['timeout'] = 10 - return config - - -config = read_config() +config = get_config() wrapper = IPPToolWrapper(config) create_job_subscriptions = wrapper.create_job_subscriptions diff --git a/pyipptool/config.py b/pyipptool/config.py new file mode 100644 index 0000000..afd73dd --- /dev/null +++ b/pyipptool/config.py @@ -0,0 +1,46 @@ +import ConfigParser +import os + + +def read_config(paths=()): + config = {} + fs_config = ConfigParser.ConfigParser() + fs_config.read(paths) + config['ipptool_path'] = fs_config.get('main', 'ipptool_path') + try: + config['login'] = fs_config.get('main', 'login') + except ConfigParser.NoOptionError: + pass + try: + config['password'] = fs_config.get('main', 'password') + except ConfigParser.NoOptionError: + pass + try: + config['graceful_shutdown_time'] = fs_config.getint( + 'main', + 'graceful_shutdown_time') + except ConfigParser.NoOptionError: + config['graceful_shutdown_time'] = 2 + try: + config['timeout'] = fs_config.getint('main', 'timeout') + except ConfigParser.NoOptionError: + config['timeout'] = 10 + return config + + +class LazyConfig(dict): + def __init__(self, paths): + self.paths = paths + self.loaded = False + + def __getitem__(self, key): + if not self.loaded: + self.update(read_config(self.paths)) + self.loaded = True + return super(LazyConfig, self).__getitem__(key) + + +def get_config(paths=('/etc/opt/pyipptool/pyipptool.cfg', + os.path.join(os.path.expanduser('~'), + '.pyipptool.cfg'))): + return LazyConfig(paths) diff --git a/tests/test_highlevel.py b/tests/test_highlevel.py index 402b797..ab1c41a 100644 --- a/tests/test_highlevel.py +++ b/tests/test_highlevel.py @@ -109,7 +109,7 @@ class Handler(BaseHTTPServer.BaseHTTPRequestHandler): """ def do_POST(self): - time.sleep(.5) + time.sleep(.2) assassin = threading.Thread(target=self.server.shutdown) assassin.daemon = True assassin.start()