fix it to retrieve sleeps again

This commit is contained in:
Dima Gerasimov 2019-04-11 11:46:51 +01:00
parent 5831dc26db
commit b471a337aa

View file

@ -1,20 +1,27 @@
#!/usr/bin/env python3.6
from kython import *
#!/usr/bin/env python3
from typing import Dict, Any, List
import json
from datetime import datetime, date, time
from pathlib import Path
from backup_config import SLEEPS_FILE, GRAPHS_DIR, PHASES_FILE
BDIR = Path('/L/backups/jawbone')
PHASES_FILE = BDIR / 'phases.json'
SLEEPS_FILE = BDIR / 'sleeps.json'
GRAPHS_DIR = BDIR / 'graphs'
from datetime import datetime, date, time
fromtimestamp = datetime.fromtimestamp
import os.path
fromtimestamp = datetime.fromtimestamp # TODO careful
XID = str # TODO how to shared with backup thing?
Phases = Dict[XID, Any]
phases: Phases
with open(PHASES_FILE, 'r') as fo:
phases = json_load(fo)
phases: Phases = json.loads(PHASES_FILE.read_text())
# TODO namedtuple, cproperty?
# TODO cache?
class SleepEntry:
def __init__(self, js) -> None:
self.js = js
@ -51,8 +58,8 @@ class SleepEntry:
return fromtimestamp(self._details()['asleep_time'])
@property
def graph(self) -> str:
return os.path.join(GRAPHS_DIR, self.xid + ".png")
def graph(self) -> Path:
return GRAPHS_DIR / (self.xid + ".png")
@property
def phases(self) -> List[datetime]:
@ -65,15 +72,17 @@ class SleepEntry:
return str(self)
def load_sleeps() -> List[SleepEntry]:
with open(SLEEPS_FILE, 'r') as fo:
sleeps = json_load(fo)
return [SleepEntry(js) for js in sleeps]
sleeps = json.loads(SLEEPS_FILE.read_text())
return [SleepEntry(js) for js in sleeps]
import numpy as np # type: ignore
import matplotlib.pyplot as plt # type: ignore
from matplotlib.figure import Figure # type: ignore
from matplotlib.axes import Axes # type: ignore
# pip install imageio
from imageio import imread # type: ignore
# from imageio import imread # type: ignore
from scipy.misc import imresize # type: ignore
@ -152,21 +161,22 @@ def plot_one(sleep: SleepEntry, fig: Figure, axes: Axes, xlims=None, showtext=Tr
axes.text(xlims[1] - timedelta(hours=1.5), 20, str(sleep),)
# plt.text(sleep.asleep(), 0, hhmm(sleep.asleep()))
sleeps = load_sleeps()
sleeps = [s for s in sleeps if os.path.lexists(s.graph)]
sleeps_by_date = {s.date_: s for s in sleeps}
from kython import make_dict
def sleeps_by_date() -> Dict[date, SleepEntry]:
sleeps = load_sleeps()
sleeps = [s for s in sleeps if s.graph.exists()] # TODO careful..
return make_dict(sleeps, key=SleepEntry.date_)
# sleeps_count = 35 # len(sleeps) # apparently MPL fails at 298 with outofmemory or something
# start = 40
# 65 is arount 1 july
# sleeps = sleeps[start: start + sleeps_count]
# sleeps = sleeps[:sleeps_count]
import melatonin
dt = melatonin.get_data()
# dt = {k: v for k, v in dt.items() if v is not None}
sleeps = list(sleeps_by_date.values()) # [sleeps_by_date[d] for d in dt if d in sleeps_by_date]
# TODO ??
# import melatonin
# dt = melatonin.get_data()
def predicate(sleep: SleepEntry):
"""
@ -178,38 +188,40 @@ def predicate(sleep: SleepEntry):
return True
return False
sleeps = lfilter(predicate, sleeps)
sleeps_count = len(sleeps)
print(sleeps_count)
def plot():
# TODO ??
sleeps = lfilter(predicate, sleeps)
sleeps_count = len(sleeps)
print(sleeps_count)
fig: Figure = plt.figure(figsize=(15, sleeps_count * 1))
axarr = fig.subplots(nrows=len(sleeps))
for i, (sleep, axes) in enumerate(zip(sleeps, axarr)):
plot_one(sleep, fig, axes, showtext=True)
used = dt.get(sleep.date_, None)
sused: str
color: str
# used = True if used is None else False # TODO?
if used is True:
sused = "YES"
color = 'green'
elif used is False:
sused = "NO"
color = 'red'
else:
sused = "??"
color = 'white'
axes.text(axes.get_xlim()[0], 20, sused)
axes.patch.set_alpha(0.5)
axes.set_facecolor(color)
fig: Figure = plt.figure(figsize=(15, sleeps_count * 1))
axarr = fig.subplots(nrows=len(sleeps))
for i, (sleep, axes) in enumerate(zip(sleeps, axarr)):
plot_one(sleep, fig, axes, showtext=True)
used = dt.get(sleep.date_, None)
sused: str
color: str
# used = True if used is None else False # TODO?
if used is True:
sused = "YES"
color = 'green'
elif used is False:
sused = "NO"
color = 'red'
else:
sused = "??"
color = 'white'
axes.text(axes.get_xlim()[0], 20, sused)
axes.patch.set_alpha(0.5)
axes.set_facecolor(color)
plt.tight_layout()
plt.subplots_adjust(hspace=0.0)
# er... this saves with a different aspect ratio for some reason.
# tap 'ctrl-s' on mpl plot window to save..
# plt.savefig('res.png', asp)
plt.show()
plt.tight_layout()
plt.subplots_adjust(hspace=0.0)
# er... this saves with a different aspect ratio for some reason.
# tap 'ctrl-s' on mpl plot window to save..
# plt.savefig('res.png', asp)
plt.show()