More cleanup.
[python_utils.git] / arper.py
index a665137c1c71fd90637add9cba91e125e44a31a4..2ef2676ab88ce42223b5c80ffc3fcbd038cb15fa 100644 (file)
--- a/arper.py
+++ b/arper.py
@@ -55,6 +55,17 @@ cfg.add_argument(
 
 @persistent.persistent_autoloaded_singleton()  # type: ignore
 class Arper(persistent.Persistent):
+    """A caching layer around the kernel's network mapping between IPs and
+    MACs.  This class restores persisted state that expires
+    periodically (see --arper_cache_max_staleness) at program startup
+    time.  If it's unable to use the file's contents, it queries the
+    kernel (via arp) and uses an auxillary utility called arp-scan to
+    query the network.  If it has to do this there's a latency hit but
+    it persists the collected data in the cache file.  Either way, the
+    class behaves as a global singleton hosting this data thereafter.
+
+    """
+
     def __init__(
         self,
         cached_local_state: Optional[BiDict] = None,
@@ -118,10 +129,10 @@ class Arper(persistent.Persistent):
 
     @classmethod
     def load_state(
-            cls,
-            cache_file: str,
-            freshness_threshold_sec: int,
-            state: BiDict,
+        cls,
+        cache_file: str,
+        freshness_threshold_sec: int,
+        state: BiDict,
     ):
         if not file_utils.file_is_readable(cache_file):
             logger.debug('Can\'t read %s', cache_file)