X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=arper.py;h=bdd97ac2c93b8109fcfb187f5bc7b455fad7a009;hb=90dc74b2ff8f36dd2495632a8150ce37dab61f1c;hp=39aecf90bd438af92d69cffae6f4a3d44ea6aa0e;hpb=36fea7f15ed17150691b5b3ead75450e575229ef;p=python_utils.git diff --git a/arper.py b/arper.py index 39aecf9..bdd97ac 100644 --- a/arper.py +++ b/arper.py @@ -2,22 +2,23 @@ """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__) @@ -46,7 +47,7 @@ cfg.add_argument( ) -@persistent.persistent_autoloaded_singleton() +@persistent.persistent_autoloaded_singleton() # type: ignore class Arper(persistent.Persistent): def __init__(self, cached_state: Optional[BiDict] = None) -> None: self.state = BiDict() @@ -58,9 +59,7 @@ class Arper(persistent.Persistent): self.update_from_arp_scan() self.update_from_arp() if len(self.state) < config.config['arper_min_entries_to_be_valid']: - raise Exception( - f'Arper didn\'t find enough entries; only got {len(self.state)}.' - ) + raise Exception(f'Arper didn\'t find enough entries; only got {len(self.state)}.') def update_from_arp_scan(self): network_spec = site_config.get_config().network @@ -75,12 +74,7 @@ class Arper(persistent.Persistent): for line in output.split('\n'): ip = string_utils.extract_ip_v4(line) mac = string_utils.extract_mac_address(line) - if ( - ip is not None - and mac is not None - and mac != 'UNKNOWN' - and ip != 'UNKNOWN' - ): + if ip is not None and mac is not None and mac != 'UNKNOWN' and ip != 'UNKNOWN': mac = mac.lower() logger.debug(f'ARPER: {mac} => {ip}') self.state[mac] = ip @@ -94,12 +88,7 @@ class Arper(persistent.Persistent): for line in output.split('\n'): ip = string_utils.extract_ip_v4(line) mac = string_utils.extract_mac_address(line) - if ( - ip is not None - and mac is not None - and mac != 'UNKNOWN' - and ip != 'UNKNOWN' - ): + if ip is not None and mac is not None and mac != 'UNKNOWN' and ip != 'UNKNOWN': mac = mac.lower() logger.debug(f'ARPER: {mac} => {ip}') self.state[mac] = ip @@ -131,10 +120,7 @@ class Arper(persistent.Persistent): 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.' @@ -147,12 +133,8 @@ class Arper(persistent.Persistent): @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)