X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=persistent.py;h=5c2b132448ebce64271c0165a8848337db5e69c8;hb=36fea7f15ed17150691b5b3ead75450e575229ef;hp=2751572553ac7c20c7663974c13e17b13f0ab037;hpb=b454ad295eb3024a238d32bf2aef1ebc3c496b44;p=python_utils.git diff --git a/persistent.py b/persistent.py index 2751572..5c2b132 100644 --- a/persistent.py +++ b/persistent.py @@ -7,7 +7,6 @@ import enum import functools import logging from typing import Any -import warnings import file_utils @@ -21,6 +20,7 @@ class Persistent(ABC): and implement their save() and load() methods. """ + @abstractmethod def save(self) -> bool: """ @@ -66,15 +66,15 @@ def was_file_written_today(filename: str) -> bool: mtime = file_utils.get_file_mtime_as_datetime(filename) now = datetime.datetime.now() return ( - mtime.month == now.month and - mtime.day == now.day and - mtime.year == now.year + mtime.month == now.month + and mtime.day == now.day + and mtime.year == now.year ) def was_file_written_within_n_seconds( - filename: str, - limit_seconds: int, + filename: str, + limit_seconds: int, ) -> bool: """Returns True if filename was written within the pas limit_seconds seconds. @@ -94,9 +94,10 @@ class PersistAtShutdown(enum.Enum): to disk. See details below. """ - NEVER = 0, - IF_NOT_LOADED = 1, - ALWAYS = 2, + + NEVER = (0,) + IF_NOT_LOADED = (1,) + ALWAYS = (2,) class persistent_autoloaded_singleton(object): @@ -119,10 +120,12 @@ class persistent_autoloaded_singleton(object): implementation. """ + def __init__( - self, - *, - persist_at_shutdown: PersistAtShutdown = PersistAtShutdown.IF_NOT_LOADED): + self, + *, + persist_at_shutdown: PersistAtShutdown = PersistAtShutdown.IF_NOT_LOADED, + ): self.persist_at_shutdown = persist_at_shutdown self.instance = None @@ -141,28 +144,33 @@ class persistent_autoloaded_singleton(object): # Otherwise, try to load it from persisted state. was_loaded = False - logger.debug(f'Attempting to load {cls.__name__} from persisted state.') + logger.debug( + f'Attempting to load {cls.__name__} from persisted state.' + ) self.instance = cls.load() if not self.instance: msg = 'Loading from cache failed.' logger.warning(msg) - warnings.warn(msg) - logger.debug(f'Attempting to instantiate {cls.__name__} directly.') + logger.debug( + f'Attempting to instantiate {cls.__name__} directly.' + ) self.instance = cls(*args, **kwargs) else: - logger.debug(f'Class {cls.__name__} was loaded from persisted state successfully.') + logger.debug( + f'Class {cls.__name__} was loaded from persisted state successfully.' + ) was_loaded = True assert self.instance is not None - if ( - self.persist_at_shutdown is PersistAtShutdown.ALWAYS or - ( - not was_loaded and - self.persist_at_shutdown is PersistAtShutdown.IF_NOT_LOADED - ) + if self.persist_at_shutdown is PersistAtShutdown.ALWAYS or ( + not was_loaded + and self.persist_at_shutdown is PersistAtShutdown.IF_NOT_LOADED ): - logger.debug('Scheduling a deferred called to save at process shutdown time.') + logger.debug( + 'Scheduling a deferred called to save at process shutdown time.' + ) atexit.register(self.instance.save) return self.instance + return _load