]> Pileus Git - ~andy/csm213a-hw/blob - vis/config.py
be79e485c0a8a64ce752730c0f9cb608360fdcb8
[~andy/csm213a-hw] / vis / config.py
1 import sys
2
3 if sys.version_info<(3,0,0):
4         from ConfigParser import ConfigParser
5 else:
6         from configparser import ConfigParser
7
8 class Config:
9         # Attributes
10         filename = "settings.cfg"
11
12         defaults = {
13                 'serial': {
14                         'device':   '/dev/ttyACM0',
15                         'baudrate': '921600',
16                         'parity':   'N',
17                         'databits': '8',
18                         'stopbits': '1',
19                 },
20                 'xively': {
21                         'feedid':   '<feedid>',
22                         'apikey':   '<apikey>',
23                         'maxrate':  '10',
24                 },
25                 'enable': {
26                         'acc':      True,
27                         'mag':      True,
28                         'touch':    True,
29                         'light':    True,
30                         'a2d':      True,
31                 },
32                 'rate': {
33                         'acc':      1,
34                         'mag':      1,
35                         'touch':    1,
36                         'light':    1,
37                         'a2d':      1,
38                 },
39         }
40
41         # Constructor
42         def __init__(self):
43                 self.enable = {}
44                 self.rate   = {}
45                 self.parser = ConfigParser()
46                 self.parser.add_section('serial')
47                 self.parser.add_section('xively')
48                 self.parser.add_section('enable')
49                 self.parser.add_section('rate')
50                 self.load()
51
52         # Methods
53         def load(self):
54                 def get(sect, name):
55                         if self.parser.has_option(sect, name):
56                                 return self.parser.get(sect, name)
57                         else:
58                                 return self.defaults[sect][name]
59                 def bin(val):
60                         return val == True or val == 'True'
61
62                 self.parser.read(self.filename)
63
64                 self.device   =     get('serial', 'device')
65                 self.baudrate = int(get('serial', 'baudrate'))
66                 self.parity   =     get('serial', 'parity')
67                 self.databits = int(get('serial', 'databits'))
68                 self.stopbits = int(get('serial', 'stopbits'))
69                                                                 
70                 self.feedid   =     get('xively', 'feedid')
71                 self.apikey   =     get('xively', 'apikey')
72                 self.maxrate  = int(get('xively', 'maxrate'))
73
74                 for key in list(self.defaults['enable'].keys()):
75                         self.enable[key] = bin(get('enable', key))
76                         self.rate[key]   = int(get('rate',   key))
77
78         def save(self):
79                 self.parser.set('serial', 'device',           self.device)
80                 self.parser.set('serial', 'baudrate', str(int(self.baudrate)))
81                 self.parser.set('serial', 'parity',           self.parity)
82                 self.parser.set('serial', 'databits', str(int(self.databits)))
83                 self.parser.set('serial', 'stopbits', str(int(self.stopbits)))
84
85                 self.parser.set('xively', 'feedid',           self.feedid)
86                 self.parser.set('xively', 'apikey',           self.apikey)
87                 self.parser.set('xively', 'maxrate',  str(int(self.maxrate)))
88
89                 for key in self.defaults['enable'].keys():
90                         self.parser.set('enable', key, str(bool(self.enable[key])))
91                         self.parser.set('rate',   key, str( int(self.rate[key])))
92
93                 with open(self.filename, 'w') as fd:
94                         self.parser.write(fd)