"""A caching layer around the kernel's network mapping between IPs and MACs"""
+
import datetime
import logging
import os
-from typing import Any, Optional
import warnings
+from typing import Any, Optional
from overrides import overrides
import argparse_utils
-from collect.bidict import BiDict
import config
import exec_utils
import file_utils
import persistent
-import string_utils
import site_config
+import string_utils
+from collect.bidict import BiDict
logger = logging.getLogger(__name__)
)
class Arper(persistent.Persistent):
def __init__(self, cached_state: Optional[BiDict] = None) -> None:
self.state = BiDict()
mac = mac.lower()
ip = ip.strip()
cached_state[mac] = ip
- if (
- len(cached_state)
- > config.config['arper_min_entries_to_be_valid']
- ):
+ if len(cached_state) > config.config['arper_min_entries_to_be_valid']:
return cls(cached_state)
else:
msg = f'{cache_file} is invalid: only {len(cached_state)} entries. Deleting it.'
@overrides
def save(self) -> bool:
if len(self.state) > config.config['arper_min_entries_to_be_valid']:
- logger.debug(
- f'Persisting state to {config.config["arper_cache_location"]}'
- )
- with file_utils.FileWriter(
- config.config['arper_cache_location']
- ) as wf:
+ logger.debug(f'Persisting state to {config.config["arper_cache_location"]}')
+ with file_utils.FileWriter(config.config['arper_cache_location']) as wf:
for (mac, ip) in self.state.items():
mac = mac.lower()
print(f'{mac}, {ip}', file=wf)