Guest User

Untitled

a guest
Jun 22nd, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.23 KB | None | 0 0
  1. import os, ConfigParser
  2.  
  3. class Config(dict):
  4.  
  5. DIRNAME = os.path.expanduser('~/.config/Soulution')
  6. FILENAME = os.path.join(DIRNAME, 'Soulution.cfg')
  7. USERDATA = 'Soulution'
  8. TIMEOUT = 4
  9.  
  10. _instance = None
  11. _initdone = False
  12. _special_types = \
  13. {
  14. 'user': lambda u: os.getenv('USER') if not u else u,
  15. 'remember_me': lambda o: True if o == 'True' else False,
  16. 'auto_connect': lambda o: True if o == 'True' else False,
  17. 'port': int,
  18. 'contactlist': lambda l: l.split(':')
  19. }
  20. _default_values = \
  21. {
  22. 'user': os.getenv('USER'),
  23. 'passwd': '',
  24. 'host': 'ns-server.epitech.net',
  25. 'port': 4242,
  26. 'location': 'Dans la soulution',
  27. 'remember_me': True,
  28. 'auto_connect': False,
  29. 'contactlist': []
  30. }
  31.  
  32. def __new__(cls):
  33. if cls._instance is None:
  34. cls._instance = dict.__new__(cls)
  35. return cls._instance
  36.  
  37. def __init__(self):
  38. if self._initdone:
  39. return
  40. self._parser = ConfigParser.RawConfigParser()
  41. self.load()
  42. self._initdone = True
  43.  
  44. def load(self):
  45. self._parser.read(Config.FILENAME)
  46. st = Config._special_types
  47. for (key, value) in self._parser.defaults().iteritems():
  48. self[key] = value if key not in st else st[key](value)
  49. must_save = False
  50. for (key, value) in Config._default_values.iteritems():
  51. if key not in self.keys():
  52. self[key] = value
  53. must_save = True
  54. if must_save:
  55. self.save()
  56.  
  57. def save(self):
  58. try:
  59. if not os.path.exists(Config.DIRNAME):
  60. os.makedirs(Config.DIRNAME, 0700)
  61. except:
  62. raise Exception('Unable to create configuration directory %s' % Config.DIRNAME)
  63. for (key, value) in self.iteritems():
  64. value = str(value) if key != 'contactlist' else ':'.join(value)
  65. self._parser.set('DEFAULT', key, value)
  66. try:
  67. f = open(Config.FILENAME, 'w')
  68. self._parser.write(f)
  69. f.close()
  70. except:
  71. raise Exception('Unable to write file %s' % Config.FILENAME)
Add Comment
Please, Sign In to add comment