from configparser import ConfigParser class Config: # Attributes filename = "settings.cfg" defaults = { 'serial': { 'device': '/dev/ttyACM0', 'baudrate': '9600', 'parity': 'N', 'databits': '8', 'stopbits': '1', }, 'xively': { 'feedid': '', 'apikey': '', 'maxrate': '6', } } # Constructor def __init__(self): self.parser = ConfigParser() self.parser.add_section('serial') self.parser.add_section('xively') self.load() # Methods def load(self): def get(sect, name): if self.parser.has_option(sect, name): return self.parser.get(sect, name) else: return self.defaults[sect][name] self.parser.read(self.filename) self.device = get('serial', 'device') self.baudrate = int(get('serial', 'baudrate')) self.parity = get('serial', 'parity') self.databits = int(get('serial', 'databits')) self.stopbits = int(get('serial', 'stopbits')) self.feedid = get('xively', 'feedid') self.apikey = get('xively', 'apikey') self.maxrate = int(get('xively', 'maxrate')) def save(self): self.parser.set('serial', 'device', self.device) self.parser.set('serial', 'baudrate', str(int(self.baudrate))) self.parser.set('serial', 'parity', self.parity) self.parser.set('serial', 'databits', str(int(self.databits))) self.parser.set('serial', 'stopbits', str(int(self.stopbits))) self.parser.set('xively', 'feedid', self.feedid) self.parser.set('xively', 'apikey', self.apikey) self.parser.set('xively', 'maxrate', str(int(self.maxrate))) with open(self.filename, 'w') as fd: self.parser.write(fd)