X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=state_tracker.py;h=12b94aec39c37b084495d92bbc07b386d0574610;hb=31c81f6539969a5eba864d3305f9fb7bf716a367;hp=9ce61e3ac7a51c7cacdc2cc7e34dea02985078de;hpb=11ac393075637caf3455708a82ee8ebbca675486;p=python_utils.git diff --git a/state_tracker.py b/state_tracker.py index 9ce61e3..12b94ae 100644 --- a/state_tracker.py +++ b/state_tracker.py @@ -1,10 +1,10 @@ #!/usr/bin/env python3 -from abc import ABC, abstractmethod import datetime import logging -import time import threading +import time +from abc import ABC, abstractmethod from typing import Dict, Optional import pytz @@ -22,6 +22,7 @@ class StateTracker(ABC): provided to the c'tor. """ + def __init__(self, update_ids_to_update_secs: Dict[str, float]) -> None: """The update_ids_to_update_secs dict parameter describes one or more update types (unique update_ids) and the periodicity(ies), in @@ -72,21 +73,15 @@ class StateTracker(ABC): for update_id in sorted(self.last_reminder_ts.keys()): if force_all_updates_to_run: logger.debug('Forcing all updates to run') - self.update( - update_id, self.now, self.last_reminder_ts[update_id] - ) + self.update(update_id, self.now, self.last_reminder_ts[update_id]) self.last_reminder_ts[update_id] = self.now return refresh_secs = self.update_ids_to_update_secs[update_id] last_run = self.last_reminder_ts[update_id] if last_run is None: # Never run before - logger.debug( - f'id {update_id} has never been run; running it now' - ) - self.update( - update_id, self.now, self.last_reminder_ts[update_id] - ) + logger.debug(f'id {update_id} has never been run; running it now') + self.update(update_id, self.now, self.last_reminder_ts[update_id]) self.last_reminder_ts[update_id] = self.now else: delta = self.now - last_run @@ -106,6 +101,7 @@ class AutomaticStateTracker(StateTracker): terminate the updates. """ + @background_thread def pace_maker(self, should_terminate) -> None: """Entry point for a background thread to own calling heartbeat() @@ -128,6 +124,7 @@ class AutomaticStateTracker(StateTracker): override_sleep_delay: Optional[float] = None, ) -> None: import math_utils + super().__init__(update_ids_to_update_secs) if override_sleep_delay is not None: logger.debug(f'Overriding sleep delay to {override_sleep_delay}') @@ -145,9 +142,7 @@ class AutomaticStateTracker(StateTracker): This may block for as long as self.sleep_delay. """ - logger.debug( - 'Setting shutdown event and waiting for background thread.' - ) + logger.debug('Setting shutdown event and waiting for background thread.') self.should_terminate.set() self.updater_thread.join() logger.debug('Background thread terminated.') @@ -174,15 +169,17 @@ class WaitableAutomaticStateTracker(AutomaticStateTracker): # else before looping up into wait again. """ + def __init__( - self, - update_ids_to_update_secs: Dict[str, float], - *, - override_sleep_delay: Optional[float] = None, + self, + update_ids_to_update_secs: Dict[str, float], + *, + override_sleep_delay: Optional[float] = None, ) -> None: self._something_changed = threading.Event() - super().__init__(update_ids_to_update_secs, - override_sleep_delay=override_sleep_delay) + super().__init__( + update_ids_to_update_secs, override_sleep_delay=override_sleep_delay + ) def something_changed(self): self._something_changed.set() @@ -193,9 +190,5 @@ class WaitableAutomaticStateTracker(AutomaticStateTracker): def reset(self): self._something_changed.clear() - def wait(self, - *, - timeout=None): - return self._something_changed.wait( - timeout=timeout - ) + def wait(self, *, timeout=None): + return self._something_changed.wait(timeout=timeout)