From 5ec4b75d18e2ebcbb22ed3a93042fe66eb067b73 Mon Sep 17 00:00:00 2001 From: tim Date: Thu, 15 Mar 2018 22:27:16 +0200 Subject: [PATCH] Changes to skip ketone measurements; optionally skip manual readings; and support decimal figures in insulin and food doses. --- glucometer_graphs.py | 74 +++++++++++++++++++++++++++----------------- 1 file changed, 46 insertions(+), 28 deletions(-) diff --git a/glucometer_graphs.py b/glucometer_graphs.py index 907582f..4672f46 100755 --- a/glucometer_graphs.py +++ b/glucometer_graphs.py @@ -79,6 +79,21 @@ def main(): with open(args.input_file, 'r', newline='') as f: rows = from_csv(f) + ''' Skip ketone entries ''' + rketones = re.compile('Ketone', flags=re.IGNORECASE); + for row in rows: + if rketones.search(row.get('measure_method')): + rows.remove(row); + elif rketones.search(row.get('comment')): + rows.remove(row); + + ''' Skip finger stick test entries ''' + rfinger = re.compile('Blood', flags=re.IGNORECASE); + if not args.fingerstick: + for row in rows: + if rfinger.search(row.get('comment')): + rows.remove(row); + for row in rows: row = parse_entry(row, args.icons) @@ -531,39 +546,39 @@ def parse_entry(data, icons, fmt='%Y-%m-%d %H:%M:%S'): rrelevant = re.compile('(Food|Rapid-acting insulin|Long-acting insulin)(?: \((.*?)\))', flags=re.IGNORECASE) rduplicate = re.compile('^(I\$\^\{\d+\S?)(\}.*)$') commentparts = {} - for part in data.get('comment').split('; '): - relevant = rrelevant.search(part) - if relevant is not None: - ctype = relevant.group(1) - cvalue = relevant.group(2) + if data.get('comment') is not None: + for part in data.get('comment').split('; '): + relevant = rrelevant.search(part) + if relevant is not None: + ctype = relevant.group(1) + cvalue = relevant.group(2) - ''' Convert floating point-style strings (2.0) to integer-style strings (2) ''' - try: - cvalue = int(float(cvalue)) -# if int(float(cvalue)) == float(cvalue) -# cvalue = int(float(cvalue)) -# else -# cvalue = float(cvalue) - except: - pass - cvalue = str(cvalue) + ''' Convert floating point-style strings (2.0) to integer-style strings (2) ''' + try: + if int(float(cvalue)) == float(cvalue): + cvalue = int(float(cvalue)) + else: + cvalue = float(cvalue) + except: + pass + cvalue = str(cvalue) - if re.search('Rapid', ctype) is not None: - cvalue += 'R' - if re.search('Long', ctype) is not None: - cvalue += 'L' + if re.search('Rapid', ctype) is not None: + cvalue += 'R' + if re.search('Long', ctype) is not None: + cvalue += 'L' - ctype = re.sub('Rapid-acting insulin', 'Insulin', ctype, flags=re.IGNORECASE) - ctype = re.sub('Long-acting insulin', 'Insulin', ctype, flags=re.IGNORECASE) + ctype = re.sub('Rapid-acting insulin', 'Insulin', ctype, flags=re.IGNORECASE) + ctype = re.sub('Long-acting insulin', 'Insulin', ctype, flags=re.IGNORECASE) - if ctype in commentparts: - commentparts[ctype] = commentparts[ctype] + '/' + cvalue - else: - commentparts[ctype] = cvalue + if ctype in commentparts: + commentparts[ctype] = commentparts[ctype] + '/' + cvalue + else: + commentparts[ctype] = cvalue - data['comment'] = commentparts - else: - data['comment'] = {} + data['comment'] = commentparts + else: + data['comment'] = {} ''' Convert timestamp to ISO8601 (by default, at least), and store datetime object ''' try: @@ -788,6 +803,9 @@ def parse_arguments(): parser.add_argument( '--icons', action='store_true', required=False, default=True, help=('Print food and injection indicators (default: true).')) + parser.add_argument( + '--fingerstick', action='store_true', required=False, default=True, + help=('Include manual finger stick results (default: true).')) parser.add_argument( '--units', action='store', required=False, type=str,