Mon, 20 Apr 2020 18:14:12 -0500
Improve installation instructions
68
72f821e17123
Added basic sleep/wake detection code for MacOS
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff
changeset
|
1 | # |
89
51cc2e25af38
Added author information headers and content information to source files
Tuomo Valkonen <tuomov@iki.fi>
parents:
86
diff
changeset
|
2 | # Borgend by Tuomo Valkonen, 2018 |
51cc2e25af38
Added author information headers and content information to source files
Tuomo Valkonen <tuomov@iki.fi>
parents:
86
diff
changeset
|
3 | # |
51cc2e25af38
Added author information headers and content information to source files
Tuomo Valkonen <tuomov@iki.fi>
parents:
86
diff
changeset
|
4 | # This file implements system wake/sleep detection for scheduling adjustments. |
68
72f821e17123
Added basic sleep/wake detection code for MacOS
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff
changeset
|
5 | # |
72f821e17123
Added basic sleep/wake detection code for MacOS
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff
changeset
|
6 | |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
7 | import platform |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
8 | import time |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
9 | import threading |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
10 | import weakref |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
11 | import datetime |
86
2fe66644c50d
Can use logging.getLogger directly now after proper packageisation
Tuomo Valkonen <tuomov@iki.fi>
parents:
80
diff
changeset
|
12 | import logging |
101
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
13 | import math |
80
a409242121d5
Better package-like organisation
Tuomo Valkonen <tuomov@iki.fi>
parents:
79
diff
changeset
|
14 | |
106
a7bdc239ef62
Added exeption protection decorators to callbacks.
Tuomo Valkonen <tuomov@iki.fi>
parents:
101
diff
changeset
|
15 | from .exprotect import protect_noreturn |
a7bdc239ef62
Added exeption protection decorators to callbacks.
Tuomo Valkonen <tuomov@iki.fi>
parents:
101
diff
changeset
|
16 | |
86
2fe66644c50d
Can use logging.getLogger directly now after proper packageisation
Tuomo Valkonen <tuomov@iki.fi>
parents:
80
diff
changeset
|
17 | logger=logging.getLogger(__name__) |
68
72f821e17123
Added basic sleep/wake detection code for MacOS
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff
changeset
|
18 | |
77
e8773133bf79
DreamTime.monotonic() no longer needs to call time.monotonic()
Tuomo Valkonen <tuomov@iki.fi>
parents:
76
diff
changeset
|
19 | _dreamtime_monitor=None |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
20 | |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
21 | # |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
22 | # Support classes for dealing with different times |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
23 | # |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
24 | |
100
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
25 | # Time snapshotting to helps to create stable comparisons of different |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
26 | # subclasses of Time. |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
27 | class Snapshot: |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
28 | def __init__(self): |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
29 | self._monotonic=None |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
30 | self._realtime=None |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
31 | self._dreamtime=None |
101
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
32 | self._sleeping=None |
100
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
33 | |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
34 | def monotonic(self): |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
35 | if self._monotonic is None: |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
36 | self._monotonic=time.monotonic() |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
37 | return self._monotonic |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
38 | |
100
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
39 | def realtime(self): |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
40 | if self._realtime is None: |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
41 | self._realtime=time.time() |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
42 | return self._realtime |
77
e8773133bf79
DreamTime.monotonic() no longer needs to call time.monotonic()
Tuomo Valkonen <tuomov@iki.fi>
parents:
76
diff
changeset
|
43 | |
101
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
44 | def dreamtime_sleeping(self): |
100
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
45 | if self._dreamtime is None: |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
46 | if _dreamtime_monitor: |
101
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
47 | self._dreamtime, self._sleeping=_dreamtime_monitor.dreamtime_sleeping(snapshot=self) |
100
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
48 | else: |
101
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
49 | self._dreamtime, self._sleeping=self.monotonic(), False |
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
50 | return self._dreamtime, self._sleeping |
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
51 | |
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
52 | def dreamtime(self): |
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
53 | time, _=self.dreamtime_sleeping() |
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
54 | return time |
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
55 | |
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
56 | def sleeping(self): |
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
57 | _, sleeping=self.dreamtime_sleeping() |
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
58 | return sleeping |
100
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
59 | |
113 | 60 | # Python's default arguments are purely idiotic (aka. pythonic): generated |
61 | # only once. This makes sense in a purely functional language, which Python | |
62 | # lightyears away from, but severely limits their usefulness in an imperative | |
63 | # language. Decorators also seem clumsy for this, as one would have to tell | |
64 | # the number of positional arguments for things to work nice, being able to | |
65 | # pass the snapshot both positionally and as keyword. No luck. | |
66 | # So have to do things the old-fashioned hard way. | |
67 | def ensure_snapshot(snapshot): | |
68 | if not snapshot: | |
69 | return Snapshot() | |
70 | else: | |
71 | return snapshot | |
72 | ||
100
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
73 | # The main Time class, for time advancing in various paces |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
74 | class Time: |
97 | 75 | def __init__(self, when): |
76 | self._value=when | |
77 | ||
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
78 | @staticmethod |
100
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
79 | def _now(snapshot): |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
80 | raise NotImplementedError |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
81 | |
113 | 82 | def remaining(self, snapshot=None): |
83 | snapshot=ensure_snapshot(snapshot) | |
84 | return self._value-self._now(snapshot) | |
85 | ||
86 | # Mostly equal to remaining() but can be ∞ (math.inf) for DreamTime. | |
87 | def horizon(self, snapshot=None): | |
88 | snapshot=ensure_snapshot(snapshot) | |
89 | return self.remaining(snapshot) | |
90 | ||
91 | def realtime(self, snapshot=None): | |
92 | snapshot=ensure_snapshot(snapshot) | |
93 | return snapshot.realtime()+self.remaining(snapshot) | |
94 | ||
95 | def monotonic(self, snapshot=None): | |
96 | snapshot=ensure_snapshot(snapshot) | |
97 | return snapshot.monotonic()+self.remaining(snapshot) | |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
98 | |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
99 | @classmethod |
113 | 100 | def now(cls, snapshot=None): |
101 | snapshot=ensure_snapshot(snapshot) | |
102 | return cls(cls._now(snapshot)) | |
103 | ||
104 | @classmethod | |
105 | def from_realtime(cls, realtime, snapshot=None): | |
106 | snapshot=ensure_snapshot(snapshot) | |
100
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
107 | return cls(realtime-snapshot.realtime()+cls._now(snapshot)) |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
108 | |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
109 | @classmethod |
113 | 110 | def from_monotonic(cls, monotonic, snapshot=None): |
111 | snapshot=ensure_snapshot(snapshot) | |
100
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
112 | return cls(monotonic-snapshot.monotonic()+cls._now(snapshot)) |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
113 | |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
114 | @classmethod |
113 | 115 | def after(cls, seconds, snapshot=None): |
116 | snapshot=ensure_snapshot(snapshot) | |
100
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
117 | return cls(cls._now(snapshot)+seconds) |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
118 | |
97 | 119 | @classmethod |
113 | 120 | def after_other(cls, other, seconds, snapshot=None): |
121 | snapshot=ensure_snapshot(snapshot) | |
97 | 122 | if isinstance(other, cls): |
123 | return cls(other._value+seconds) | |
124 | else: | |
113 | 125 | return cls.from_monotonic(other.monotonic(snapshot)+seconds, |
100
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
126 | snapshot) |
97 | 127 | |
113 | 128 | def datetime(self, snapshot=None): |
129 | snapshot=ensure_snapshot(snapshot) | |
130 | return datetime.datetime.fromtimestamp(self.realtime(snapshot)) | |
97 | 131 | |
113 | 132 | def isoformat(self, snapshot=None): |
133 | snapshot=ensure_snapshot(snapshot) | |
134 | return self.datetime(snapshot).isoformat() | |
100
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
135 | |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
136 | def __compare(self, other, fn): |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
137 | if isinstance(other, self.__class__): |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
138 | return fn(self._value, other._value) |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
139 | else: |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
140 | snapshot=Snapshot() |
113 | 141 | return fn(self.monotonic(snapshot), other.monotonic(snapshot)) |
100
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
142 | |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
143 | def __lt__(self, other): |
100
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
144 | return self.__compare(other, lambda x, y: x < y) |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
145 | |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
146 | def __gt__(self, other): |
100
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
147 | return self.__compare(other, lambda x, y: x > y) |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
148 | |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
149 | def __le__(self, other): |
100
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
150 | return self.__compare(other, lambda x, y: x <= y) |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
151 | |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
152 | def __ge__(self, other): |
100
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
153 | return self.__compare(other, lambda x, y: x >= y) |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
154 | |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
155 | def __eq__(self, other): |
100
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
156 | return self.__compare(other, lambda x, y: x == y) |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
157 | |
113 | 158 | |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
159 | class RealTime(Time): |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
160 | @staticmethod |
100
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
161 | def _now(snapshot): |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
162 | return snapshot.realtime() |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
163 | |
113 | 164 | def realtime(self, snapshot=None): |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
165 | return self._value |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
166 | |
113 | 167 | |
168 | class MonotonicTime(Time): | |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
169 | @staticmethod |
100
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
170 | def _now(snapshot): |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
171 | return snapshot.monotonic() |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
172 | |
113 | 173 | def monotonic(self, snapshot=None): |
174 | return self._value | |
175 | ||
101
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
176 | |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
177 | class DreamTime(Time): |
113 | 178 | @staticmethod |
179 | def _now(snapshot): | |
180 | return snapshot.dreamtime() | |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
181 | |
113 | 182 | def horizon(self, snapshot=None): |
183 | snapshot=ensure_snapshot(snapshot) | |
101
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
184 | if snapshot.sleeping(): |
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
185 | return math.inf |
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
186 | else: |
113 | 187 | return self.remaining(snapshot) |
101
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
188 | |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
189 | |
97 | 190 | |
94
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
191 | if platform.system()=='Darwin': |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
192 | |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
193 | import Foundation |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
194 | import AppKit |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
195 | |
101
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
196 | def do_callbacks(callbacks, woke): |
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
197 | for callback in callbacks.values(): |
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
198 | try: |
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
199 | callback(woke) |
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
200 | except Exception: |
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
201 | logger.exception("Error in sleep/wake notification callback") |
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
202 | |
94
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
203 | # |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
204 | # Wake up / sleep handling |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
205 | # |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
206 | |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
207 | class SleepHandler(Foundation.NSObject): |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
208 | """ Handle wake/sleep notifications """ |
68
72f821e17123
Added basic sleep/wake detection code for MacOS
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff
changeset
|
209 | |
111
c3bc27cf5ece
Changed dreamtime calculation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
106
diff
changeset
|
210 | # We need to use the actual time.time() to monitor sleep, as |
c3bc27cf5ece
Changed dreamtime calculation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
106
diff
changeset
|
211 | # time.monotonic() many not run during sleep. But time.time() |
c3bc27cf5ece
Changed dreamtime calculation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
106
diff
changeset
|
212 | # may encounter adjustments, so we also use time.monotonic() to |
c3bc27cf5ece
Changed dreamtime calculation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
106
diff
changeset
|
213 | # monitor wake periods. |
c3bc27cf5ece
Changed dreamtime calculation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
106
diff
changeset
|
214 | |
94
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
215 | def init(self): |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
216 | self.__sleeptime=None |
111
c3bc27cf5ece
Changed dreamtime calculation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
106
diff
changeset
|
217 | self.__dreamtime_last_sleep=0 |
c3bc27cf5ece
Changed dreamtime calculation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
106
diff
changeset
|
218 | self.__monotonic_last_wakeup=time.monotonic() |
c3bc27cf5ece
Changed dreamtime calculation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
106
diff
changeset
|
219 | self.__slept=0 # Only used to store the statistic |
94
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
220 | self.__lock=threading.Lock() |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
221 | self.__callbacks=weakref.WeakKeyDictionary() |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
222 | |
94
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
223 | return self |
68
72f821e17123
Added basic sleep/wake detection code for MacOS
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff
changeset
|
224 | |
106
a7bdc239ef62
Added exeption protection decorators to callbacks.
Tuomo Valkonen <tuomov@iki.fi>
parents:
101
diff
changeset
|
225 | @protect_noreturn |
94
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
226 | def handleSleepNotification_(self, aNotification): |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
227 | logger.info("System going to sleep") |
106
a7bdc239ef62
Added exeption protection decorators to callbacks.
Tuomo Valkonen <tuomov@iki.fi>
parents:
101
diff
changeset
|
228 | with self.__lock: |
111
c3bc27cf5ece
Changed dreamtime calculation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
106
diff
changeset
|
229 | self.__sleeptime=time.time() |
c3bc27cf5ece
Changed dreamtime calculation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
106
diff
changeset
|
230 | now_m=time.monotonic() |
c3bc27cf5ece
Changed dreamtime calculation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
106
diff
changeset
|
231 | self.__dreamtime_last_sleep=(self.__dreamtime_last_sleep+now_m |
c3bc27cf5ece
Changed dreamtime calculation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
106
diff
changeset
|
232 | -self.__monotonic_last_wakeup) |
113 | 233 | #logger.debug("Sleeping; monotonic time now: %f; dreamtime_last_sleep: %f" % (now_m, self.__dreamtime_last_sleep)) |
106
a7bdc239ef62
Added exeption protection decorators to callbacks.
Tuomo Valkonen <tuomov@iki.fi>
parents:
101
diff
changeset
|
234 | callbacks=self.__callbacks.copy() |
a7bdc239ef62
Added exeption protection decorators to callbacks.
Tuomo Valkonen <tuomov@iki.fi>
parents:
101
diff
changeset
|
235 | do_callbacks(callbacks, False) |
68
72f821e17123
Added basic sleep/wake detection code for MacOS
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff
changeset
|
236 | |
106
a7bdc239ef62
Added exeption protection decorators to callbacks.
Tuomo Valkonen <tuomov@iki.fi>
parents:
101
diff
changeset
|
237 | @protect_noreturn |
94
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
238 | def handleWakeNotification_(self, aNotification): |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
239 | logger.info("System waking up from sleep") |
106
a7bdc239ef62
Added exeption protection decorators to callbacks.
Tuomo Valkonen <tuomov@iki.fi>
parents:
101
diff
changeset
|
240 | with self.__lock: |
a7bdc239ef62
Added exeption protection decorators to callbacks.
Tuomo Valkonen <tuomov@iki.fi>
parents:
101
diff
changeset
|
241 | if self.__sleeptime: |
111
c3bc27cf5ece
Changed dreamtime calculation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
106
diff
changeset
|
242 | self.__monotonic_last_wakeup=time.monotonic() |
c3bc27cf5ece
Changed dreamtime calculation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
106
diff
changeset
|
243 | now=time.time() |
106
a7bdc239ef62
Added exeption protection decorators to callbacks.
Tuomo Valkonen <tuomov@iki.fi>
parents:
101
diff
changeset
|
244 | slept=max(0, now-self.__sleeptime) |
a7bdc239ef62
Added exeption protection decorators to callbacks.
Tuomo Valkonen <tuomov@iki.fi>
parents:
101
diff
changeset
|
245 | self.__slept=self.__slept+slept |
a7bdc239ef62
Added exeption protection decorators to callbacks.
Tuomo Valkonen <tuomov@iki.fi>
parents:
101
diff
changeset
|
246 | self.__sleeptime=None |
113 | 247 | logger.info("Slept %f seconds", slept) |
248 | #logger.debug("Slept %f seconds; total: %f; monotonic time now: %f" % (slept, self.__slept, self.__monotonic_last_wakeup)) | |
106
a7bdc239ef62
Added exeption protection decorators to callbacks.
Tuomo Valkonen <tuomov@iki.fi>
parents:
101
diff
changeset
|
249 | callbacks=self.__callbacks.copy() |
a7bdc239ef62
Added exeption protection decorators to callbacks.
Tuomo Valkonen <tuomov@iki.fi>
parents:
101
diff
changeset
|
250 | do_callbacks(callbacks, True) |
94
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
251 | |
100
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
252 | # Return dreamtime |
101
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
253 | def dreamtime_sleeping(self, snapshot=Snapshot()): |
94
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
254 | with self.__lock: |
100
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
255 | # macOS "sleep" signals / status are complete bollocks: at least |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
256 | # when plugged in, the system is actually sometimes running all |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
257 | # night with the lid closed and sleepNotification delivered. |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
258 | # Therefore, we need our timers to work in a sane manner when |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
259 | # we should be sleeping! |
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
260 | if self.__sleeptime is not None: |
101
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
261 | sleeping=True |
111
c3bc27cf5ece
Changed dreamtime calculation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
106
diff
changeset
|
262 | now_dreamtime=self.__dreamtime_last_sleep |
100
b141bed9e718
macOS "sleep" signals / status are complete bollocks:
Tuomo Valkonen <tuomov@iki.fi>
parents:
97
diff
changeset
|
263 | else: |
111
c3bc27cf5ece
Changed dreamtime calculation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
106
diff
changeset
|
264 | sleeping=False |
c3bc27cf5ece
Changed dreamtime calculation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
106
diff
changeset
|
265 | now=snapshot.monotonic() |
c3bc27cf5ece
Changed dreamtime calculation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
106
diff
changeset
|
266 | now_dreamtime=(self.__dreamtime_last_sleep |
113 | 267 | +now-self.__monotonic_last_wakeup) |
268 | #logger.debug("Dreamtime request: last_sleep: %f now: %f; last wakeup: %f => now %f dreamtime " | |
269 | # % (self.__dreamtime_last_sleep, now, self.__monotonic_last_wakeup, now_dreamtime)) | |
101
3068b0de12ee
Part 2 of handling macOS sleep/wake signal brokenness.
Tuomo Valkonen <tuomov@iki.fi>
parents:
100
diff
changeset
|
270 | return now_dreamtime, sleeping |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
271 | |
94
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
272 | # Weirdo (Py)ObjC naming to stop it form choking up |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
273 | def addForObj_aCallback_(self, obj, callback): |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
274 | with self.__lock: |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
275 | self.__callbacks[obj]=callback |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
276 | |
94
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
277 | # obj is to use a a key in a weak key dictionary |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
278 | def add_callback(obj, callback): |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
279 | global _dreamtime_monitor |
77
e8773133bf79
DreamTime.monotonic() no longer needs to call time.monotonic()
Tuomo Valkonen <tuomov@iki.fi>
parents:
76
diff
changeset
|
280 | |
94
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
281 | monitor=_dreamtime_monitor |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
282 | if not monitor: |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
283 | raise Exception("Dreamtime monitor not started") |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
284 | else: |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
285 | monitor.addForObj_aCallback_(obj, callback) |
68
72f821e17123
Added basic sleep/wake detection code for MacOS
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff
changeset
|
286 | |
94
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
287 | def start_monitoring(): |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
288 | global _dreamtime_monitor |
77
e8773133bf79
DreamTime.monotonic() no longer needs to call time.monotonic()
Tuomo Valkonen <tuomov@iki.fi>
parents:
76
diff
changeset
|
289 | |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
290 | logger.debug("Starting to monitor system sleep") |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
291 | workspace = AppKit.NSWorkspace.sharedWorkspace() |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
292 | notification_center = workspace.notificationCenter() |
77
e8773133bf79
DreamTime.monotonic() no longer needs to call time.monotonic()
Tuomo Valkonen <tuomov@iki.fi>
parents:
76
diff
changeset
|
293 | _dreamtime_monitor = SleepHandler.new() |
68
72f821e17123
Added basic sleep/wake detection code for MacOS
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff
changeset
|
294 | |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
295 | notification_center.addObserver_selector_name_object_( |
77
e8773133bf79
DreamTime.monotonic() no longer needs to call time.monotonic()
Tuomo Valkonen <tuomov@iki.fi>
parents:
76
diff
changeset
|
296 | _dreamtime_monitor, |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
297 | "handleSleepNotification:", |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
298 | AppKit.NSWorkspaceWillSleepNotification, |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
299 | None) |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
300 | |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
301 | notification_center.addObserver_selector_name_object_( |
77
e8773133bf79
DreamTime.monotonic() no longer needs to call time.monotonic()
Tuomo Valkonen <tuomov@iki.fi>
parents:
76
diff
changeset
|
302 | _dreamtime_monitor, |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
303 | "handleWakeNotification:", |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
304 | AppKit.NSWorkspaceDidWakeNotification, |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
305 | None) |
94
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
306 | |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
307 | else: # Not on macOS |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
308 | |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
309 | def add_callback(obj, callback): |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
310 | pass |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
311 | |
2a11fd29c192
Make dreamtime module not throw up on non-macOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents:
89
diff
changeset
|
312 | def start_monitoring(): |
76
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
313 | logger.warning(("No system sleep monitor implemented for '%s'" |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
314 | % platform.system())) |
4b08fca3ce34
Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents:
69
diff
changeset
|
315 |