diff options
author | Gregor Kleen <gkleen@yggdrasil.li> | 2023-10-05 22:13:09 +0200 |
---|---|---|
committer | Gregor Kleen <gkleen@yggdrasil.li> | 2023-10-05 22:13:09 +0200 |
commit | 8da343920ba5084c0eae864c63f349d4e33c9561 (patch) | |
tree | 869f9d4a40e76dc7dae27ac4e96c80aa6d824424 | |
parent | a434564007af0679bcafffb2d3f0633d21d9c8ad (diff) | |
download | nixos-8da343920ba5084c0eae864c63f349d4e33c9561.tar nixos-8da343920ba5084c0eae864c63f349d4e33c9561.tar.gz nixos-8da343920ba5084c0eae864c63f349d4e33c9561.tar.bz2 nixos-8da343920ba5084c0eae864c63f349d4e33c9561.tar.xz nixos-8da343920ba5084c0eae864c63f349d4e33c9561.zip |
...
-rw-r--r-- | accounts/gkleen@sif/taffybar/src/taffybar.hs | 4 | ||||
-rwxr-xr-x | overlays/worktime/worktime/__main__.py | 22 |
2 files changed, 15 insertions, 11 deletions
diff --git a/accounts/gkleen@sif/taffybar/src/taffybar.hs b/accounts/gkleen@sif/taffybar/src/taffybar.hs index 2f89b5e2..67ee942d 100644 --- a/accounts/gkleen@sif/taffybar/src/taffybar.hs +++ b/accounts/gkleen@sif/taffybar/src/taffybar.hs | |||
@@ -64,8 +64,8 @@ taffybarConfig = | |||
64 | { getMenuLabel = truncatedGetMenuLabel 80 | 64 | { getMenuLabel = truncatedGetMenuLabel 80 |
65 | , getActiveLabel = truncatedGetActiveLabel 80 | 65 | , getActiveLabel = truncatedGetActiveLabel 80 |
66 | } | 66 | } |
67 | worktime = commandRunnerNew 15 "worktime" [] "worktime" | 67 | worktime = commandRunnerNew 60 "worktime" [] "worktime" |
68 | worktimeToday = commandRunnerNew 15 "worktime" ["today"] "worktime today" | 68 | worktimeToday = commandRunnerNew 60 "worktime" ["today"] "worktime today" |
69 | -- See https://github.com/taffybar/gtk-sni-tray#statusnotifierwatcher | 69 | -- See https://github.com/taffybar/gtk-sni-tray#statusnotifierwatcher |
70 | -- for a better way to set up the sni tray | 70 | -- for a better way to set up the sni tray |
71 | -- tray = sniTrayThatStartsWatcherEvenThoughThisIsABadWayToDoIt | 71 | -- tray = sniTrayThatStartsWatcherEvenThoughThisIsABadWayToDoIt |
diff --git a/overlays/worktime/worktime/__main__.py b/overlays/worktime/worktime/__main__.py index 2caf7604..35aef8f7 100755 --- a/overlays/worktime/worktime/__main__.py +++ b/overlays/worktime/worktime/__main__.py | |||
@@ -34,12 +34,9 @@ from pathlib import Path | |||
34 | 34 | ||
35 | from collections import defaultdict | 35 | from collections import defaultdict |
36 | 36 | ||
37 | import shelve | ||
38 | import jsonpickle | 37 | import jsonpickle |
39 | from hashlib import blake2s | 38 | from hashlib import blake2s |
40 | 39 | ||
41 | shelve_d = shelve.open(str(Path(BaseDirectory.save_cache_path('worktime')) / 'entry_durations')) | ||
42 | |||
43 | class TogglAPISection(Enum): | 40 | class TogglAPISection(Enum): |
44 | TOGGL = '/api/v8' | 41 | TOGGL = '/api/v8' |
45 | REPORTS = '/reports/api/v2' | 42 | REPORTS = '/reports/api/v2' |
@@ -99,6 +96,7 @@ class TogglAPI(object): | |||
99 | if client_ids is not None and not client_ids: | 96 | if client_ids is not None and not client_ids: |
100 | return | 97 | return |
101 | 98 | ||
99 | cache_dir = Path(BaseDirectory.save_cache_path('worktime')) / 'entry_durations' | ||
102 | step = timedelta(days = 120) | 100 | step = timedelta(days = 120) |
103 | for req_start in (start_date + step * i for i in count()): | 101 | for req_start in (start_date + step * i for i in count()): |
104 | req_start = min(req_start, end_date) | 102 | req_start = min(req_start, end_date) |
@@ -110,7 +108,7 @@ class TogglAPI(object): | |||
110 | # elif req_start > start_date: | 108 | # elif req_start > start_date: |
111 | # req_start = datetime.combine(req_start.astimezone(timezone.utc).date(), time(tzinfo=timezone.utc)) + timedelta(days = 1) | 109 | # req_start = datetime.combine(req_start.astimezone(timezone.utc).date(), time(tzinfo=timezone.utc)) + timedelta(days = 1) |
112 | 110 | ||
113 | cache_key = None | 111 | cache_path = None |
114 | if req_end + timedelta(days=60) < datetime.now().astimezone(timezone.utc): | 112 | if req_end + timedelta(days=60) < datetime.now().astimezone(timezone.utc): |
115 | cache_key = blake2s(jsonpickle.encode({ | 113 | cache_key = blake2s(jsonpickle.encode({ |
116 | 'start': req_start, | 114 | 'start': req_start, |
@@ -120,9 +118,13 @@ class TogglAPI(object): | |||
120 | 'workspace': self._workspace_id, | 118 | 'workspace': self._workspace_id, |
121 | 'workspace_clients': self._client_ids | 119 | 'workspace_clients': self._client_ids |
122 | }).encode('utf-8'), key = self._api_token.encode('utf-8')).hexdigest() | 120 | }).encode('utf-8'), key = self._api_token.encode('utf-8')).hexdigest() |
123 | if cache_key in shelve_d: | 121 | cache_path = cache_dir / cache_key[:2] / cache_key[2:4] / f'{cache_key[4:]}.json' |
124 | yield from shelve_d[cache_key] | 122 | try: |
125 | continue | 123 | with cache_path.open('r', encoding='utf-8') as ch: |
124 | yield from jsonpickle.decode(ch.read()) | ||
125 | continue | ||
126 | except FileNotFoundError: | ||
127 | pass | ||
126 | 128 | ||
127 | entries = list() | 129 | entries = list() |
128 | params = { 'since': (req_start - timedelta(days=1)).astimezone(timezone.utc).isoformat(), | 130 | params = { 'since': (req_start - timedelta(days=1)).astimezone(timezone.utc).isoformat(), |
@@ -152,8 +154,10 @@ class TogglAPI(object): | |||
152 | if not report['data']: | 154 | if not report['data']: |
153 | break | 155 | break |
154 | 156 | ||
155 | if cache_key: | 157 | if cache_path: |
156 | shelve_d[cache_key] = entries | 158 | cache_path.parent.mkdir(parents=True, exist_ok=True) |
159 | with cache_path.open('w', encoding='utf-8') as ch: | ||
160 | ch.write(jsonpickle.encode(entries)) | ||
157 | # res = timedelta(milliseconds=report['total_billable']) if report['total_billable'] else timedelta(milliseconds=0) | 161 | # res = timedelta(milliseconds=report['total_billable']) if report['total_billable'] else timedelta(milliseconds=0) |
158 | # return res | 162 | # return res |
159 | 163 | ||