Changes to skip ketone measurements; optionally skip manual readings; and support decimal figures in insulin and food doses.
This commit is contained in:
parent
b46b8b1eae
commit
5ec4b75d18
@ -79,6 +79,21 @@ def main():
|
|||||||
with open(args.input_file, 'r', newline='') as f:
|
with open(args.input_file, 'r', newline='') as f:
|
||||||
rows = from_csv(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:
|
for row in rows:
|
||||||
row = parse_entry(row, args.icons)
|
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)
|
rrelevant = re.compile('(Food|Rapid-acting insulin|Long-acting insulin)(?: \((.*?)\))', flags=re.IGNORECASE)
|
||||||
rduplicate = re.compile('^(I\$\^\{\d+\S?)(\}.*)$')
|
rduplicate = re.compile('^(I\$\^\{\d+\S?)(\}.*)$')
|
||||||
commentparts = {}
|
commentparts = {}
|
||||||
for part in data.get('comment').split('; '):
|
if data.get('comment') is not None:
|
||||||
relevant = rrelevant.search(part)
|
for part in data.get('comment').split('; '):
|
||||||
if relevant is not None:
|
relevant = rrelevant.search(part)
|
||||||
ctype = relevant.group(1)
|
if relevant is not None:
|
||||||
cvalue = relevant.group(2)
|
ctype = relevant.group(1)
|
||||||
|
cvalue = relevant.group(2)
|
||||||
|
|
||||||
''' Convert floating point-style strings (2.0) to integer-style strings (2) '''
|
''' Convert floating point-style strings (2.0) to integer-style strings (2) '''
|
||||||
try:
|
try:
|
||||||
cvalue = int(float(cvalue))
|
if int(float(cvalue)) == float(cvalue):
|
||||||
# if int(float(cvalue)) == float(cvalue)
|
cvalue = int(float(cvalue))
|
||||||
# cvalue = int(float(cvalue))
|
else:
|
||||||
# else
|
cvalue = float(cvalue)
|
||||||
# cvalue = float(cvalue)
|
except:
|
||||||
except:
|
pass
|
||||||
pass
|
cvalue = str(cvalue)
|
||||||
cvalue = str(cvalue)
|
|
||||||
|
|
||||||
if re.search('Rapid', ctype) is not None:
|
if re.search('Rapid', ctype) is not None:
|
||||||
cvalue += 'R'
|
cvalue += 'R'
|
||||||
if re.search('Long', ctype) is not None:
|
if re.search('Long', ctype) is not None:
|
||||||
cvalue += 'L'
|
cvalue += 'L'
|
||||||
|
|
||||||
ctype = re.sub('Rapid-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)
|
ctype = re.sub('Long-acting insulin', 'Insulin', ctype, flags=re.IGNORECASE)
|
||||||
|
|
||||||
if ctype in commentparts:
|
if ctype in commentparts:
|
||||||
commentparts[ctype] = commentparts[ctype] + '/' + cvalue
|
commentparts[ctype] = commentparts[ctype] + '/' + cvalue
|
||||||
else:
|
else:
|
||||||
commentparts[ctype] = cvalue
|
commentparts[ctype] = cvalue
|
||||||
|
|
||||||
data['comment'] = commentparts
|
data['comment'] = commentparts
|
||||||
else:
|
else:
|
||||||
data['comment'] = {}
|
data['comment'] = {}
|
||||||
|
|
||||||
''' Convert timestamp to ISO8601 (by default, at least), and store datetime object '''
|
''' Convert timestamp to ISO8601 (by default, at least), and store datetime object '''
|
||||||
try:
|
try:
|
||||||
@ -788,6 +803,9 @@ def parse_arguments():
|
|||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--icons', action='store_true', required=False, default=True,
|
'--icons', action='store_true', required=False, default=True,
|
||||||
help=('Print food and injection indicators (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(
|
parser.add_argument(
|
||||||
'--units', action='store', required=False, type=str,
|
'--units', action='store', required=False, type=str,
|
||||||
|
Loading…
Reference in New Issue
Block a user