fix it to retrieve sleeps again
This commit is contained in:
parent
5831dc26db
commit
b471a337aa
1 changed files with 66 additions and 54 deletions
|
@ -1,20 +1,27 @@
|
||||||
#!/usr/bin/env python3.6
|
#!/usr/bin/env python3
|
||||||
from kython import *
|
from typing import Dict, Any, List
|
||||||
|
import json
|
||||||
from backup_config import SLEEPS_FILE, GRAPHS_DIR, PHASES_FILE
|
|
||||||
|
|
||||||
from datetime import datetime, date, time
|
from datetime import datetime, date, time
|
||||||
fromtimestamp = datetime.fromtimestamp
|
from pathlib import Path
|
||||||
|
|
||||||
import os.path
|
BDIR = Path('/L/backups/jawbone')
|
||||||
|
PHASES_FILE = BDIR / 'phases.json'
|
||||||
|
SLEEPS_FILE = BDIR / 'sleeps.json'
|
||||||
|
GRAPHS_DIR = BDIR / 'graphs'
|
||||||
|
|
||||||
|
|
||||||
|
fromtimestamp = datetime.fromtimestamp # TODO careful
|
||||||
|
|
||||||
XID = str # TODO how to shared with backup thing?
|
XID = str # TODO how to shared with backup thing?
|
||||||
|
|
||||||
|
|
||||||
Phases = Dict[XID, Any]
|
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:
|
class SleepEntry:
|
||||||
def __init__(self, js) -> None:
|
def __init__(self, js) -> None:
|
||||||
self.js = js
|
self.js = js
|
||||||
|
@ -51,8 +58,8 @@ class SleepEntry:
|
||||||
return fromtimestamp(self._details()['asleep_time'])
|
return fromtimestamp(self._details()['asleep_time'])
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def graph(self) -> str:
|
def graph(self) -> Path:
|
||||||
return os.path.join(GRAPHS_DIR, self.xid + ".png")
|
return GRAPHS_DIR / (self.xid + ".png")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def phases(self) -> List[datetime]:
|
def phases(self) -> List[datetime]:
|
||||||
|
@ -65,15 +72,17 @@ class SleepEntry:
|
||||||
return str(self)
|
return str(self)
|
||||||
|
|
||||||
def load_sleeps() -> List[SleepEntry]:
|
def load_sleeps() -> List[SleepEntry]:
|
||||||
with open(SLEEPS_FILE, 'r') as fo:
|
sleeps = json.loads(SLEEPS_FILE.read_text())
|
||||||
sleeps = json_load(fo)
|
|
||||||
return [SleepEntry(js) for js in sleeps]
|
return [SleepEntry(js) for js in sleeps]
|
||||||
|
|
||||||
|
|
||||||
import numpy as np # type: ignore
|
import numpy as np # type: ignore
|
||||||
import matplotlib.pyplot as plt # type: ignore
|
import matplotlib.pyplot as plt # type: ignore
|
||||||
from matplotlib.figure import Figure # type: ignore
|
from matplotlib.figure import Figure # type: ignore
|
||||||
from matplotlib.axes import Axes # type: ignore
|
from matplotlib.axes import Axes # type: ignore
|
||||||
|
|
||||||
# pip install imageio
|
# pip install imageio
|
||||||
from imageio import imread # type: ignore
|
# from imageio import imread # type: ignore
|
||||||
from scipy.misc import imresize # 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),)
|
axes.text(xlims[1] - timedelta(hours=1.5), 20, str(sleep),)
|
||||||
# plt.text(sleep.asleep(), 0, hhmm(sleep.asleep()))
|
# plt.text(sleep.asleep(), 0, hhmm(sleep.asleep()))
|
||||||
|
|
||||||
|
from kython import make_dict
|
||||||
|
def sleeps_by_date() -> Dict[date, SleepEntry]:
|
||||||
sleeps = load_sleeps()
|
sleeps = load_sleeps()
|
||||||
|
sleeps = [s for s in sleeps if s.graph.exists()] # TODO careful..
|
||||||
sleeps = [s for s in sleeps if os.path.lexists(s.graph)]
|
return make_dict(sleeps, key=SleepEntry.date_)
|
||||||
sleeps_by_date = {s.date_: s for s in sleeps}
|
|
||||||
|
|
||||||
# sleeps_count = 35 # len(sleeps) # apparently MPL fails at 298 with outofmemory or something
|
# sleeps_count = 35 # len(sleeps) # apparently MPL fails at 298 with outofmemory or something
|
||||||
# start = 40
|
# start = 40
|
||||||
# 65 is arount 1 july
|
# 65 is arount 1 july
|
||||||
# sleeps = sleeps[start: start + sleeps_count]
|
# sleeps = sleeps[start: start + sleeps_count]
|
||||||
# sleeps = sleeps[: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}
|
# 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):
|
def predicate(sleep: SleepEntry):
|
||||||
"""
|
"""
|
||||||
|
@ -178,11 +188,13 @@ def predicate(sleep: SleepEntry):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def plot():
|
||||||
|
# TODO ??
|
||||||
sleeps = lfilter(predicate, sleeps)
|
sleeps = lfilter(predicate, sleeps)
|
||||||
sleeps_count = len(sleeps)
|
sleeps_count = len(sleeps)
|
||||||
print(sleeps_count)
|
print(sleeps_count)
|
||||||
|
|
||||||
|
|
||||||
fig: Figure = plt.figure(figsize=(15, sleeps_count * 1))
|
fig: Figure = plt.figure(figsize=(15, sleeps_count * 1))
|
||||||
|
|
||||||
axarr = fig.subplots(nrows=len(sleeps))
|
axarr = fig.subplots(nrows=len(sleeps))
|
||||||
|
|
Loading…
Add table
Reference in a new issue