import sys if sys.version_info<(3,0,0): from ConfigParser import ConfigParser else: from configparser import ConfigParser class Config: # Attributes filename = "settings.cfg" defaults = { 'serial': { 'device': '/dev/ttyACM0', 'baudrate': '921600', 'parity': 'N', 'databits': '8', 'stopbits': '1', }, 'xively': { 'feedid': '', 'apikey': '', 'maxrate': '10', }, 'enable': { 'acc': True, 'mag': True, 'lgt': True, 'tch': True, 'a2d': True, }, 'rate': { 'acc': 1, 'mag': 1, 'lgt': 1, 'tch': 1, 'a2d': 1, }, } # Constructor def __init__(self): self.enable = {} self.rate = {} self.parser = ConfigParser() self.parser.add_section('serial') self.parser.add_section('xively') self.parser.add_section('enable') self.parser.add_section('rate') 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] def bin(val): return val == True or val == 'True' 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 = float(get('xively', 'maxrate')) for key in list(self.defaults['enable'].keys()): self.enable[key] = bin(get('enable', key)) self.rate[key] = float(get('rate', key)) 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(float(self.maxrate))) for key in self.defaults['enable'].keys(): self.parser.set('enable', key, str( bool(self.enable[key]))) self.parser.set('rate', key, str(float(self.rate[key]))) with open(self.filename, 'w') as fd: self.parser.write(fd)