Used isort to sort imports. Also added to the git pre-commit hook.
[python_utils.git] / persistent.py
index 2751572553ac7c20c7663974c13e17b13f0ab037..8832572e7b032ae71a7898ca6b21743cf7ce45bf 100644 (file)
@@ -1,13 +1,12 @@
 #!/usr/bin/env python3
 
-from abc import ABC, abstractmethod
 import atexit
 import datetime
 import enum
 import functools
 import logging
+from abc import ABC, abstractmethod
 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:
         """
@@ -64,17 +64,14 @@ def was_file_written_today(filename: str) -> bool:
         return False
 
     mtime = file_utils.get_file_mtime_as_datetime(filename)
+    assert mtime
     now = datetime.datetime.now()
-    return (
-        mtime.month == now.month and
-        mtime.day == now.day and
-        mtime.year == now.year
-    )
+    return 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.
@@ -84,6 +81,7 @@ def was_file_written_within_n_seconds(
         return False
 
     mtime = file_utils.get_file_mtime_as_datetime(filename)
+    assert mtime
     now = datetime.datetime.now()
     return (now - mtime).total_seconds() <= limit_seconds
 
@@ -94,9 +92,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,15 +118,17 @@ 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
 
     def __call__(self, cls: Persistent):
-        @functools.wraps(cls)
+        @functools.wraps(cls)  # type: ignore
         def _load(*args, **kwargs):
 
             # If class has already been loaded, act like a singleton
@@ -146,23 +147,24 @@ class persistent_autoloaded_singleton(object):
             if not self.instance:
                 msg = 'Loading from cache failed.'
                 logger.warning(msg)
-                warnings.warn(msg)
                 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