Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os, ConfigParser
- class Config(dict):
- DIRNAME = os.path.expanduser('~/.config/Soulution')
- FILENAME = os.path.join(DIRNAME, 'Soulution.cfg')
- USERDATA = 'Soulution'
- TIMEOUT = 4
- _instance = None
- _initdone = False
- _special_types = \
- {
- 'user': lambda u: os.getenv('USER') if not u else u,
- 'remember_me': lambda o: True if o == 'True' else False,
- 'auto_connect': lambda o: True if o == 'True' else False,
- 'port': int,
- 'contactlist': lambda l: l.split(':')
- }
- _default_values = \
- {
- 'user': os.getenv('USER'),
- 'passwd': '',
- 'host': 'ns-server.epitech.net',
- 'port': 4242,
- 'location': 'Dans la soulution',
- 'remember_me': True,
- 'auto_connect': False,
- 'contactlist': []
- }
- def __new__(cls):
- if cls._instance is None:
- cls._instance = dict.__new__(cls)
- return cls._instance
- def __init__(self):
- if self._initdone:
- return
- self._parser = ConfigParser.RawConfigParser()
- self.load()
- self._initdone = True
- def load(self):
- self._parser.read(Config.FILENAME)
- st = Config._special_types
- for (key, value) in self._parser.defaults().iteritems():
- self[key] = value if key not in st else st[key](value)
- must_save = False
- for (key, value) in Config._default_values.iteritems():
- if key not in self.keys():
- self[key] = value
- must_save = True
- if must_save:
- self.save()
- def save(self):
- try:
- if not os.path.exists(Config.DIRNAME):
- os.makedirs(Config.DIRNAME, 0700)
- except:
- raise Exception('Unable to create configuration directory %s' % Config.DIRNAME)
- for (key, value) in self.iteritems():
- value = str(value) if key != 'contactlist' else ':'.join(value)
- self._parser.set('DEFAULT', key, value)
- try:
- f = open(Config.FILENAME, 'w')
- self._parser.write(f)
- f.close()
- except:
- raise Exception('Unable to write file %s' % Config.FILENAME)
Add Comment
Please, Sign In to add comment