From b1d4d04ad16d2783c25e2d2536bf7ea3fb26b1b8 Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Fri, 27 Jan 2017 14:25:53 +0000 Subject: dexcom_dumper: logic improvements Moved exception-handling out of the individual poll functions so the code could be shared. Clarified logic. --- dexcom_reader/dexcom_dumper.py | 97 +++++++++++++++++------------------------- 1 file changed, 39 insertions(+), 58 deletions(-) diff --git a/dexcom_reader/dexcom_dumper.py b/dexcom_reader/dexcom_dumper.py index 95d1bee..872a4f7 100644 --- a/dexcom_reader/dexcom_dumper.py +++ b/dexcom_reader/dexcom_dumper.py @@ -87,21 +87,12 @@ def print_verbose(s, newline=True): stderr.write('%s%s' % (str(s), '\n' if newline else '')) def read_recent_egv_data(): - global dr - try: - now = dr.ReadSystemTime() - r = dr.ReadRecords('EGV_DATA', 1)[-1] - if recent(r) and not r.is_special and not r.display_only: - return (r, now) - else: - return (None, now) - except ValueError as v: - if (v.args[0] != 'Attempting to use a port that is not open'): - print_verbose(v) - dr = get_dexcom_reader() - except: - print_verbose(sys.exc_info()) - return (None, None) + now = dr.ReadSystemTime() + r = dr.ReadRecords('EGV_DATA', 1)[-1] + if recent(r) and not r.is_special and not r.display_only: + return (r, now) + else: + return (None, now) def time_fmt(t): global HUMAN @@ -169,60 +160,50 @@ def dexcom_reconnect(): dr = get_dexcom_reader() def poll(): - if HOST: - poll_remote() - else: - poll_stdout() - -def poll_remote(): print_localtime('dexcom_dumper started') - connected = False while True: try: - (n, r) = remote_update('EGV_DATA') - if n is None: - sleep_verbose(10) - continue - - now = dr.ReadSystemTime() - if n == 0: - send_ping(now) - if r: - next_reading = (r.system_time - now + timedelta(minutes=5, seconds=2)).total_seconds() - sleep_verbose(max(10, next_reading)) - else: - sleep_verbose(10) - connected = True + poll_remote() if HOST else poll_stdout() + except ValueError as v: - if connected: - print_verbose('Dexcom is disconnected.') - connected = False - sleep(10) - if (v.args[0] != 'Attempting to use a port that is not open'): + if (v.args[0] == 'Attempting to use a port that is not open'): + connected(False) dexcom_reconnect() + else: + print_verbose('Caught error: %s' % v.args[0]) + sleep_verbose(10) except KeyboardInterrupt: print_verbose('Exiting.') return except: - print_verbose(sys.exc_info()) - sleep(10) - -def poll_stdout(): - print_localtime('dexcom_dumper started') - while True: - (r, now) = read_recent_egv_data() - if now is None: - connected(False) - sleep_verbose(10) - elif r is None: - connected(True) + print_verbose('Caught error: %s' % sys.exc_info()) sleep_verbose(10) - else: - connected(True) - print_cgm_bg(now, r) + +def poll_remote(): + (n, r) = remote_update('EGV_DATA') + connected(True) + if n is None: + sleep_verbose(10) + else: + now = dr.ReadSystemTime() + if n == 0: + send_ping(now) + if r: next_reading = (r.system_time - now + timedelta(minutes=5, seconds=2)).total_seconds() - if (next_reading > 0): - sleep_verbose(next_reading) + sleep_verbose(max(10, next_reading)) + else: + sleep_verbose(10) + +def poll_stdout(): + (r, now) = read_recent_egv_data() + connected(True) + if r is None: + sleep_verbose(10) + else: + print_cgm_bg(now, r) + next_reading = (r.system_time - now + timedelta(minutes=5, seconds=2)).total_seconds() + if (next_reading > 0): + sleep_verbose(next_reading) def since(when, rectype): filt = lambda r: (r.system_time > when) if when else True -- cgit v1.2.3