diff options
author | Andrew Cady <d@jerkface.net> | 2017-01-27 14:25:53 +0000 |
---|---|---|
committer | Andrew Cady <d@jerkface.net> | 2017-01-27 14:25:53 +0000 |
commit | b1d4d04ad16d2783c25e2d2536bf7ea3fb26b1b8 (patch) | |
tree | 029d3a6661704973d2dab3836da3ac10f2e21a11 | |
parent | 8108af95b1f698986415a941c4d9b1db2488da51 (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.py | 97 |
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 | ||
89 | def read_recent_egv_data(): | 89 | def 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 | ||
106 | def time_fmt(t): | 97 | def 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 | ||
171 | def poll(): | 162 | def poll(): |
172 | if HOST: | ||
173 | poll_remote() | ||
174 | else: | ||
175 | poll_stdout() | ||
176 | |||
177 | def 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 | |||
210 | def 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) | 182 | def 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 | |||
197 | def 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 | ||
227 | def since(when, rectype): | 208 | def 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 |