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