Mercurial > templog
diff py/params.py @ 259:26eee8591f61
long polling works
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Tue, 09 Jun 2015 23:27:44 +0800 |
parents | 0a1b642e3086 |
children | ef3a75128116 |
line wrap: on
line diff
--- a/py/params.py Mon Jun 08 22:33:04 2015 +0800 +++ b/py/params.py Tue Jun 09 23:27:44 2015 +0800 @@ -2,8 +2,9 @@ import collections import json import signal -import io import tempfile +import os +import binascii import config from utils import W,L,E,EX @@ -26,7 +27,7 @@ def __init__(self): self.update(_FIELD_DEFAULTS) - self._epoch = None + self._set_epoch(None) def __getattr__(self, k): return self[k] @@ -36,9 +37,13 @@ self[k] self[k] = v + def _set_epoch(self, epoch): + # since __setattr__ is overridden + object.__setattr__(self, '_epoch', epoch) + def _do_load(self, f): try: - u = json.load(f) + u = utils.json_load_round_float(f.read()) except Exception as e: raise self.Error(e) @@ -48,7 +53,8 @@ if k not in self: raise self.Error("Unknown parameter %s=%s in file '%s'" % (str(k), str(u[k]), getattr(f, 'name', '???'))) self.update(u) - self._epoch = utils.hexnonce() + # new epoch, 120 random bits + self._set_epoch(binascii.hexlify(os.urandom(15)).decode()) L("Loaded parameters") L(self.save_string()) @@ -87,12 +93,12 @@ return ta == tb - if self.keys() != new_params.keys(): - diff = self.keys() ^ new_params.keys() + if self.keys() != params.keys(): + diff = self.keys() ^ params.keys() E("Mismatching params, %s" % str(diff)) return False - for k, v in new_params.items(): + for k, v in params.items(): if not same_type(v, self[k]): E("Bad type for %s" % k) return False @@ -100,17 +106,19 @@ dir = os.path.dirname(config.PARAMS_FILE) try: t = tempfile.NamedTemporaryFile(prefix='config', + mode='w+t', dir = dir, delete = False) - t.write(json.dumps(new_params, sort_keys=True, indent=4)+'\n') + out = json.dumps(params, sort_keys=True, indent=4)+'\n' + t.write(out) name = t.name t.close() os.rename(name, config.PARAMS_FILE) return True except Exception as e: - E("Problem: %s" % e) + EX("Problem: %s" % e) return False def save_string(self):