borgend/dreamtime.py

changeset 106
a7bdc239ef62
parent 101
3068b0de12ee
child 111
c3bc27cf5ece
equal deleted inserted replaced
105:55043f86c0b5 106:a7bdc239ef62
9 import threading 9 import threading
10 import weakref 10 import weakref
11 import datetime 11 import datetime
12 import logging 12 import logging
13 import math 13 import math
14
15 from .exprotect import protect_noreturn
14 16
15 logger=logging.getLogger(__name__) 17 logger=logging.getLogger(__name__)
16 18
17 _dreamtime_monitor=None 19 _dreamtime_monitor=None
18 20
220 self.__lock=threading.Lock() 222 self.__lock=threading.Lock()
221 self.__callbacks=weakref.WeakKeyDictionary() 223 self.__callbacks=weakref.WeakKeyDictionary()
222 224
223 return self 225 return self
224 226
227 @protect_noreturn
225 def handleSleepNotification_(self, aNotification): 228 def handleSleepNotification_(self, aNotification):
226 logger.info("System going to sleep") 229 logger.info("System going to sleep")
227 try: 230 now=time.monotonic()
228 now=time.monotonic() 231 with self.__lock:
229 with self.__lock: 232 self.__sleeptime=now
230 self.__sleeptime=now 233 callbacks=self.__callbacks.copy()
231 callbacks=self.__callbacks.copy() 234 do_callbacks(callbacks, False)
232 do_callbacks(callbacks, False) 235
233 except: 236 @protect_noreturn
234 logger.exception("Bug in sleep handler")
235
236 def handleWakeNotification_(self, aNotification): 237 def handleWakeNotification_(self, aNotification):
237 logger.info("System waking up from sleep") 238 logger.info("System waking up from sleep")
238 try: 239 now=time.monotonic()
239 now=time.monotonic() 240 with self.__lock:
240 with self.__lock: 241 if self.__sleeptime:
241 if self.__sleeptime: 242 slept=max(0, now-self.__sleeptime)
242 slept=max(0, now-self.__sleeptime) 243 logger.info("Slept %f seconds" % slept)
243 logger.info("Slept %f seconds" % slept) 244 self.__slept=self.__slept+slept
244 self.__slept=self.__slept+slept 245 self.__sleeptime=None
245 self.__sleeptime=None 246 callbacks=self.__callbacks.copy()
246 callbacks=self.__callbacks.copy() 247 do_callbacks(callbacks, True)
247 do_callbacks(callbacks, True)
248 except:
249 logger.exception("Bug in wakeup handler")
250 248
251 # Return dreamtime 249 # Return dreamtime
252 def dreamtime_sleeping(self, snapshot=Snapshot()): 250 def dreamtime_sleeping(self, snapshot=Snapshot()):
253 sleeping=False 251 sleeping=False
254 with self.__lock: 252 with self.__lock:

mercurial