????
Current Path : /usr/lib/python2.6/site-packages/clcommon/ |
Current File : //usr/lib/python2.6/site-packages/clcommon/clconfpars.py |
#!/usr/bin/env python # -*- coding: utf-8 -*- import ConfigParser import os SECHEAD = 'asection' class FakeSecHead(object): def __init__(self, fp): self.fp = fp self.sechead = '['+SECHEAD+']\n' def readline(self): if self.sechead: try: return self.sechead finally: self.sechead = None else: return self.fp.readline() def load(path, case_sensitive=False): config = ConfigParser.ConfigParser() if case_sensitive: config.optionxform = str config.readfp(fp=FakeSecHead(open(path)), filename=path) return dict(config.items(section=SECHEAD)) cache = {} def load_once(path, ignore_errors = False): """ Read ini file once (cached) and return its content as dict """ try: res = cache[path] except KeyError: try: res = cache[path] = load(path) except (IOError, ConfigParser.Error): if not ignore_errors: raise res = cache[path] = {} return res def change_settings(dict, path, tmp_path=None): if not tmp_path: tmp_path = path+".tmp" fin = open(path, 'r') fout = open(tmp_path, 'w') used_keys = [] for line in fin: l = line.strip() if l and not l.startswith('#'): key, value = l.split('=', 1) key = key.strip() if key in dict: fout.write(key+'='+str(dict[key])+'\n') used_keys.append(key) continue fout.write(line) fin.close() for key in dict.keys(): if key not in used_keys: fout.write(key+'='+str(dict[key])+'\n') fout.close() os.rename(tmp_path, path)