add blood provider

This commit is contained in:
Dima Gerasimov 2019-08-07 08:15:25 +01:00
commit 23e6c91758

54
body/blood.py Executable file
View file

@ -0,0 +1,54 @@
#!/usr/bin/env python3
from datetime import datetime
from typing import Iterable, NamedTuple, Optional
import porg
from kython import listify
from kython.org import parse_org_date
from ..paths import LOGS
blood_log = LOGS / 'blood.org'
class Entry(NamedTuple):
dt: datetime
ket: Optional[float]
glu: Optional[float]
extra: str
def iter_data() -> Iterable[Entry]:
o = porg.Org.from_file(blood_log)
tbl = o.xpath('//table')
for l in tbl.lines:
kets = l['ket'].strip()
glus = l['glu'].strip()
extra = l['notes']
dt = parse_org_date(l['datetime'])
assert isinstance(dt, datetime)
ket = None if len(kets) == 0 else float(kets)
glu = None if len(glus) == 0 else float(glus)
yield Entry(
dt=dt,
ket=ket,
glu=glu,
extra=extra,
)
def data():
datas = list(iter_data())
return list(sorted(datas, key=lambda d: d.dt))
def dataframe():
import pandas as pd
return pd.DataFrame(map(lambda e: e._asdict(), data()))
def main():
print(data())
if __name__ == '__main__':
main()