Mercurial > templog
comparison py/params.py @ 157:6d799bee3508
reload config on SIGHUP
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Thu, 03 Jan 2013 20:12:07 +0800 |
parents | d03157c7ad60 |
children | 256505f98c4d |
comparison
equal
deleted
inserted
replaced
156:bed65c321b46 | 157:6d799bee3508 |
---|---|
1 # -*- coding: utf-8 -*- | 1 # -*- coding: utf-8 -*- |
2 import collections | 2 import collections |
3 import json | 3 import json |
4 import signal | |
5 | |
6 import gevent | |
7 | |
4 import config | 8 import config |
5 from utils import W,L,E,EX | 9 from utils import W,L,E,EX |
6 | 10 |
7 _FIELD_DEFAULTS = { | 11 _FIELD_DEFAULTS = { |
8 'fridge_setpoint': 16, | 12 'fridge_setpoint': 16, |
15 class Error(Exception): | 19 class Error(Exception): |
16 pass | 20 pass |
17 | 21 |
18 def __init__(self): | 22 def __init__(self): |
19 self.update(_FIELD_DEFAULTS) | 23 self.update(_FIELD_DEFAULTS) |
24 gevent.signal(signal.SIGHUP, self.reload_signal) | |
20 | 25 |
21 def __getattr__(self, k): | 26 def __getattr__(self, k): |
22 return self[k] | 27 return self[k] |
23 | 28 |
24 def __setattr__(self, k, v): | 29 def __setattr__(self, k, v): |
31 try: | 36 try: |
32 f = file(config.PARAMS_FILE, 'r') | 37 f = file(config.PARAMS_FILE, 'r') |
33 except IOError, e: | 38 except IOError, e: |
34 W("Missing parameter file, using defaults. %s", e) | 39 W("Missing parameter file, using defaults. %s", e) |
35 return | 40 return |
36 u = json.load(f) | 41 try: |
42 u = json.load(f) | |
43 except Exception, e: | |
44 raise self.Error(e) | |
45 | |
37 for k in u: | 46 for k in u: |
38 if k not in self: | 47 if k not in self: |
39 raise self.Error("Unknown parameter %s=%s in file '%s'" % (str(k), str(u[k]), getattr(f, 'name', '???'))) | 48 raise self.Error("Unknown parameter %s=%s in file '%s'" % (str(k), str(u[k]), getattr(f, 'name', '???'))) |
40 self.update(u) | 49 self.update(u) |
41 | 50 |
43 if not f: | 52 if not f: |
44 f = file(config.PARAMS_FILE, 'w') | 53 f = file(config.PARAMS_FILE, 'w') |
45 json.dump(self, f, sort_keys=True, indent=4) | 54 json.dump(self, f, sort_keys=True, indent=4) |
46 f.write('\n') | 55 f.write('\n') |
47 f.flush() | 56 f.flush() |
57 | |
58 def reload_signal(self): | |
59 try: | |
60 self.load() | |
61 L("Reloaded params") | |
62 except self.Error, e: | |
63 W("Problem reloading: %s" % str(e)) |