add blood provider
This commit is contained in:
commit
23e6c91758
1 changed files with 54 additions and 0 deletions
54
body/blood.py
Executable file
54
body/blood.py
Executable 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()
|
Loading…
Add table
Reference in a new issue