summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Cady <d@jerkface.net>2017-01-27 14:25:53 +0000
committerAndrew Cady <d@jerkface.net>2017-01-27 14:25:53 +0000
commitb1d4d04ad16d2783c25e2d2536bf7ea3fb26b1b8 (patch)
tree029d3a6661704973d2dab3836da3ac10f2e21a11
parent8108af95b1f698986415a941c4d9b1db2488da51 (diff)
dexcom_dumper: logic improvements
Moved exception-handling out of the individual poll functions so the code could be shared. Clarified logic.
-rw-r--r--dexcom_reader/dexcom_dumper.py97
1 files 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):
87 stderr.write('%s%s' % (str(s), '\n' if newline else '')) 87 stderr.write('%s%s' % (str(s), '\n' if newline else ''))
88 88
89def read_recent_egv_data(): 89def read_recent_egv_data():
90 global dr 90 now = dr.ReadSystemTime()
91 try: 91 r = dr.ReadRecords('EGV_DATA', 1)[-1]
92 now = dr.ReadSystemTime() 92 if recent(r) and not r.is_special and not r.display_only:
93 r = dr.ReadRecords('EGV_DATA', 1)[-1] 93 return (r, now)
94 if recent(r) and not r.is_special and not r.display_only: 94 else:
95 return (r, now) 95 return (None, now)
96 else:
97 return (None, now)
98 except ValueError as v:
99 if (v.args[0] != 'Attempting to use a port that is not open'):
100 print_verbose(v)
101 dr = get_dexcom_reader()
102 except:
103 print_verbose(sys.exc_info())
104 return (None, None)
105 96
106def time_fmt(t): 97def time_fmt(t):
107 global HUMAN 98 global HUMAN
@@ -169,60 +160,50 @@ def dexcom_reconnect():
169 dr = get_dexcom_reader() 160 dr = get_dexcom_reader()
170 161
171def poll(): 162def poll():
172 if HOST:
173 poll_remote()
174 else:
175 poll_stdout()
176
177def poll_remote():
178 print_localtime('dexcom_dumper started') 163 print_localtime('dexcom_dumper started')
179 connected = False
180 while True: 164 while True:
181 try: 165 try:
182 (n, r) = remote_update('EGV_DATA') 166 poll_remote() if HOST else poll_stdout()
183 if n is None: 167
184 sleep_verbose(10)
185 continue
186
187 now = dr.ReadSystemTime()
188 if n == 0:
189 send_ping(now)
190 if r:
191 next_reading = (r.system_time - now + timedelta(minutes=5, seconds=2)).total_seconds()
192 sleep_verbose(max(10, next_reading))
193 else:
194 sleep_verbose(10)
195 connected = True
196 except ValueError as v: 168 except ValueError as v:
197 if connected: 169 if (v.args[0] == 'Attempting to use a port that is not open'):
198 print_verbose('Dexcom is disconnected.') 170 connected(False)
199 connected = False
200 sleep(10)
201 if (v.args[0] != 'Attempting to use a port that is not open'):
202 dexcom_reconnect() 171 dexcom_reconnect()
172 else:
173 print_verbose('Caught error: %s' % v.args[0])
174 sleep_verbose(10)
203 except KeyboardInterrupt: 175 except KeyboardInterrupt:
204 print_verbose('Exiting.') 176 print_verbose('Exiting.')
205 return 177 return
206 except: 178 except:
207 print_verbose(sys.exc_info()) 179 print_verbose('Caught error: %s' % sys.exc_info())
208 sleep(10)
209
210def poll_stdout():
211 print_localtime('dexcom_dumper started')
212 while True:
213 (r, now) = read_recent_egv_data()
214 if now is None:
215 connected(False)
216 sleep_verbose(10)
217 elif r is None:
218 connected(True)
219 sleep_verbose(10) 180 sleep_verbose(10)
220 else: 181
221 connected(True) 182def poll_remote():
222 print_cgm_bg(now, r) 183 (n, r) = remote_update('EGV_DATA')
184 connected(True)
185 if n is None:
186 sleep_verbose(10)
187 else:
188 now = dr.ReadSystemTime()
189 if n == 0:
190 send_ping(now)
191 if r:
223 next_reading = (r.system_time - now + timedelta(minutes=5, seconds=2)).total_seconds() 192 next_reading = (r.system_time - now + timedelta(minutes=5, seconds=2)).total_seconds()
224 if (next_reading > 0): 193 sleep_verbose(max(10, next_reading))
225 sleep_verbose(next_reading) 194 else:
195 sleep_verbose(10)
196
197def poll_stdout():
198 (r, now) = read_recent_egv_data()
199 connected(True)
200 if r is None:
201 sleep_verbose(10)
202 else:
203 print_cgm_bg(now, r)
204 next_reading = (r.system_time - now + timedelta(minutes=5, seconds=2)).total_seconds()
205 if (next_reading > 0):
206 sleep_verbose(next_reading)
226 207
227def since(when, rectype): 208def since(when, rectype):
228 filt = lambda r: (r.system_time > when) if when else True 209 filt = lambda r: (r.system_time > when) if when else True