]> jfr.im git - erebus.git/blame - config.py
update comments
[erebus.git] / config.py
CommitLineData
931c88a4 1# Erebus IRC bot - Author: John Runyon
4477123d 2# vim: fileencoding=utf-8
931c88a4 3# "Config" class (reading/providing access to bot.config)
4
a28e2ae9 5from __future__ import print_function
460fefe4 6import sys, os
a28e2ae9 7
8if sys.version_info.major < 3:
9 import ConfigParser
10else:
11 import configparser as ConfigParser
b25d4368 12
13class Config(object):
b25d4368 14 def __init__(self, filename, writeout=True):
aaa8eb8d 15 self.__dict__['config'] = ConfigParser.RawConfigParser(delimiters=('=',))
b25d4368 16 self.__dict__['filename'] = filename
17 self.__dict__['writeout'] = writeout
18 self.config.read(filename)
19
20 def __getattr__(self, key):
21 return self.config.get('erebus', key)
22
23 def __setattr__(self, key, value):
24 self.config.set('erebus', key, value)
25
93a06339 26 def __getitem__(self, section): #!! READ-ONLY !!
27 return {item: self.config.get(section, item) for item in self.config.options(section)}
28
b2a896c8 29 def level(self, cmd):
30 return self.config.get('levels', cmd)
31
32 def setlevel(self, cmd, level):
33 self.config.set('levels', cmd, level)
34
db50981b 35 def items(self, section='erebus'):
36 return self.config.items(section)
b25d4368 37
c715235b 38 def get(self, section, key, default=None):
39 try:
40 return self.config.get(section, key)
41 except:
42 return default
79baacdf 43 def getint(self, section, key, default=0):
44 try:
45 return int(self.config.get(section, key))
46 except:
47 return default
48 def getboolean(self, section, key, default=False):
49 val = self.get(section, key, default)
c8a27fdb
JR
50 if type(val) is bool:
51 return val
52 elif val == "0" or val.lower() == "false":
93a06339 53 return False
54 else:
55 return True
c0eee1b4 56
57 def set(self, section, key, value):
79baacdf 58 if not self.config.has_section(section):
59 self.config.add_section(section)
460fefe4 60 self.config.set(section, key, str(value))
b376c825 61 if self.writeout: self.write()
c0eee1b4 62
fba961fd
JR
63 def delete(self, section, key):
64 if self.config.has_section(section):
65 self.config.remove_option(section, key)
66 if self.writeout: self.write()
67
b25d4368 68 def write(self):
70d52c48 69 with open(self.filename+'.tmp', 'w') as configfile:
b25d4368 70 self.config.write(configfile)
460fefe4 71 os.rename(configfile.name, self.filename)
a4eacae2 72
b25d4368 73 def __del__(self):
74 if self.writeout: self.write()
75
b25d4368 76if __name__ == '__main__':
77 import sys
b376c825 78 if len(sys.argv) > 1:
79 cfg = Config(sys.argv[1], False)
80 else:
81 cfg = Config('bot.config', False)
b25d4368 82
0f8352dd 83 for s in cfg.config.sections():
84 for k, v in cfg.items(s):
a28e2ae9 85 print("[%r][%r] = %r" % (s, k, v))