Форматирование всего серверного кода по стандартам (black)
This commit is contained in:
parent
e61ffd793c
commit
06a5a758a3
28 changed files with 611 additions and 305 deletions
|
|
@ -9,9 +9,12 @@ import pywifi
|
|||
from pywifi import Profile
|
||||
from models.wifi import WifiAccessPoint, WifiScanResult
|
||||
|
||||
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s")
|
||||
logging.basicConfig(
|
||||
level=logging.DEBUG, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
|
||||
)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class WifiService:
|
||||
"""Сервис для сканирования текущих Wi-Fi точек доступа"""
|
||||
|
||||
|
|
@ -28,11 +31,15 @@ class WifiService:
|
|||
logger.error("Не найдено сетевых интерфейсов")
|
||||
return None
|
||||
|
||||
logger.debug(f"Доступные интерфейсы: {[iface.name() for iface in interfaces]}")
|
||||
logger.debug(
|
||||
f"Доступные интерфейсы: {[iface.name() for iface in interfaces]}"
|
||||
)
|
||||
|
||||
for iface in interfaces:
|
||||
iface_name = iface.name()
|
||||
if 'p2p' in iface_name.lower(): # Исключаю сетевые интерфейсы типа p2p из выбора, возможно сделать решение получше нежели исключать интерфейсы
|
||||
if (
|
||||
"p2p" in iface_name.lower()
|
||||
): # Исключаю сетевые интерфейсы типа p2p из выбора, возможно сделать решение получше нежели исключать интерфейсы
|
||||
logger.debug(f"Пропущен интерфейс {iface_name} (P2P)")
|
||||
continue
|
||||
try:
|
||||
|
|
@ -42,7 +49,9 @@ class WifiService:
|
|||
if results:
|
||||
logger.info(f"Выбран Wi-Fi-интерфейс: {iface_name}")
|
||||
return iface
|
||||
logger.debug(f"Интерфейс {iface_name} не вернул результатов сканирования")
|
||||
logger.debug(
|
||||
f"Интерфейс {iface_name} не вернул результатов сканирования"
|
||||
)
|
||||
except Exception as e:
|
||||
logger.debug(f"Интерфейс {iface_name} неактивен: {str(e)}")
|
||||
|
||||
|
|
@ -57,7 +66,9 @@ class WifiService:
|
|||
try:
|
||||
return self.mac_lookup.lookup(mac)
|
||||
except Exception as e:
|
||||
logger.warning(f"Не удалось определить производителя для MAC {mac}: {str(e)}")
|
||||
logger.warning(
|
||||
f"Не удалось определить производителя для MAC {mac}: {str(e)}"
|
||||
)
|
||||
return "Unknown"
|
||||
|
||||
def _get_encryption_from_iw(self, ap_info: Dict) -> str:
|
||||
|
|
@ -86,7 +97,9 @@ class WifiService:
|
|||
logger.debug(f"Частота {frequency} вне диапазона 2.4/5 GHz")
|
||||
return None
|
||||
except Exception as e:
|
||||
logger.debug(f"Ошибка при определении канала для частоты {frequency}: {str(e)}")
|
||||
logger.debug(
|
||||
f"Ошибка при определении канала для частоты {frequency}: {str(e)}"
|
||||
)
|
||||
return None
|
||||
|
||||
def _get_frequency(self, frequency: Optional[int]) -> Optional[str]:
|
||||
|
|
@ -101,7 +114,9 @@ class WifiService:
|
|||
logger.debug(f"Частота {frequency} вне диапазона 2.4/5 GHz")
|
||||
return None
|
||||
except Exception as e:
|
||||
logger.debug(f"Ошибка при определении диапазона для частоты {frequency}: {str(e)}")
|
||||
logger.debug(
|
||||
f"Ошибка при определении диапазона для частоты {frequency}: {str(e)}"
|
||||
)
|
||||
return None
|
||||
|
||||
def _get_iw_scan_data(self) -> List[Dict]:
|
||||
|
|
@ -137,7 +152,9 @@ class WifiService:
|
|||
current_ap = {"bssid": bssid_match.group(1).lower(), "security": ""}
|
||||
elif current_ap:
|
||||
if ssid_match := ssid_pattern.match(line):
|
||||
current_ap["ssid"] = ssid_match.group(1) if ssid_match.group(1).strip() else ""
|
||||
current_ap["ssid"] = (
|
||||
ssid_match.group(1) if ssid_match.group(1).strip() else ""
|
||||
)
|
||||
elif freq_match := freq_pattern.match(line):
|
||||
current_ap["frequency"] = int(freq_match.group(1))
|
||||
elif signal_match := signal_pattern.match(line):
|
||||
|
|
@ -152,7 +169,9 @@ class WifiService:
|
|||
if current_ap:
|
||||
aps.append(current_ap)
|
||||
|
||||
logger.debug(f"Найдено {len(aps)} точек через iw: {[ap['bssid'] for ap in aps]}")
|
||||
logger.debug(
|
||||
f"Найдено {len(aps)} точек через iw: {[ap['bssid'] for ap in aps]}"
|
||||
)
|
||||
for ap in aps:
|
||||
logger.debug(f"Данные точки {ap['bssid']}: {ap}")
|
||||
return aps
|
||||
|
|
@ -176,16 +195,22 @@ class WifiService:
|
|||
return WifiScanResult(access_points=aps)
|
||||
|
||||
try:
|
||||
logger.info(f"Начало сканирования Wi-Fi на интерфейсе {self.interface.name()}")
|
||||
logger.info(
|
||||
f"Начало сканирования Wi-Fi на интерфейсе {self.interface.name()}"
|
||||
)
|
||||
self.interface.scan()
|
||||
time.sleep(10) # Нативное значение для wifi интерфейса предназначенное на сканирование и сбор результата. Оптимальное решение от 5 до 15 секунд
|
||||
time.sleep(
|
||||
10
|
||||
) # Нативное значение для wifi интерфейса предназначенное на сканирование и сбор результата. Оптимальное решение от 5 до 15 секунд
|
||||
py_results = self.interface.scan_results()
|
||||
logger.debug(f"Найдено {len(py_results)} точек через pywifi")
|
||||
|
||||
iw_results = self._get_iw_scan_data()
|
||||
iw_by_bssid = {ap['bssid']: ap for ap in iw_results if ap.get('bssid')}
|
||||
iw_by_bssid = {ap["bssid"]: ap for ap in iw_results if ap.get("bssid")}
|
||||
|
||||
best_aps_by_ssid: Dict[str, WifiAccessPoint] = {} # Сделал словарь, чтобы агрегировать точки доступа у сетей для выявления лучшего
|
||||
best_aps_by_ssid: Dict[str, WifiAccessPoint] = (
|
||||
{}
|
||||
) # Сделал словарь, чтобы агрегировать точки доступа у сетей для выявления лучшего
|
||||
for ap in py_results:
|
||||
bssid = ap.bssid.lower() if ap.bssid else None
|
||||
if not bssid:
|
||||
|
|
@ -203,7 +228,8 @@ class WifiService:
|
|||
vendor = self.get_vendor(bssid)
|
||||
|
||||
logger.debug(
|
||||
f"Точка {bssid}: freq={frequency}, channel={channel}, encryption={encryption}, signal={signal}")
|
||||
f"Точка {bssid}: freq={frequency}, channel={channel}, encryption={encryption}, signal={signal}"
|
||||
)
|
||||
|
||||
current_ap = WifiAccessPoint(
|
||||
ssid=ssid,
|
||||
|
|
@ -213,10 +239,14 @@ class WifiService:
|
|||
encryption=encryption,
|
||||
frequency=freq_band,
|
||||
vendor=vendor,
|
||||
hidden=hidden
|
||||
hidden=hidden,
|
||||
)
|
||||
|
||||
if ssid not in best_aps_by_ssid or (current_ap.signal and best_aps_by_ssid[ssid].signal and current_ap.signal > best_aps_by_ssid[ssid].signal):
|
||||
if ssid not in best_aps_by_ssid or (
|
||||
current_ap.signal
|
||||
and best_aps_by_ssid[ssid].signal
|
||||
and current_ap.signal > best_aps_by_ssid[ssid].signal
|
||||
):
|
||||
best_aps_by_ssid[ssid] = current_ap
|
||||
|
||||
aps = list(best_aps_by_ssid.values())
|
||||
|
|
@ -229,4 +259,4 @@ class WifiService:
|
|||
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка при сканировании Wi-Fi: {str(e)}")
|
||||
return WifiScanResult(access_points=aps)
|
||||
return WifiScanResult(access_points=aps)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue