diff --git a/TODO.org b/TODO.org index 2899dd4..238e5bd 100644 --- a/TODO.org +++ b/TODO.org @@ -6,10 +6,10 @@ https://github.com/oshev/colifer/blob/592cc6b4d1ac9005c52fccdfb4e207513812baaa/c https://github.com/oshev/colifer/blob/592cc6b4d1ac9005c52fccdfb4e207513812baaa/reportextenders/jawbone/jawbone_sleep.py https://github.com/GlenCrawford/ruby_jawbone -* TODO extract sleep intervals -https://jawbone.com/up/developer/endpoints/sleeps -sleep phases here - - * https://nyquist212.wordpress.com/2015/06/22/visualizing-jawbone-up-data-with-d3-js/ + +* jawbone sleeps meta: +** time_created: apparently starto of sleep (leftmost point of plot) +** time_updated: rightmost point of plot +** details -> asleep_time, awake_time diff --git a/analyse.py b/analyse.py new file mode 100755 index 0000000..aea34ff --- /dev/null +++ b/analyse.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3.6 +from kython import * + +from backup_config import SLEEPS_FILE + +from datetime import datetime +from datetime import date + +XID = str # TODO how to shared with backup thing? + +class SleepEntry: + def __init__(self, js) -> None: + self.js = js + + # TODO @memoize decorator? + def date_(self) -> date: + dates = str(self.js['date']) + return datetime.strptime(dates, "%Y%m%d").date() + + def title(self) -> str: + return self.js['title'] + + def xid(self) -> XID: + return self.js['xid'] + + def _details(self): + return self.js['details'] + + # TODO take timezones into account? + def created(self) -> datetime: + return datetime.fromtimestamp(self.js['time_created']) + + def completed(self) -> datetime: + return datetime.fromtimestamp(self.js['time_completed']) + + def __str__(self) -> str: + return f"{self.date_()} {self.title()}" + + def __repr__(self) -> str: + 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 = load_sleeps() +pprint(sleeps[:2])