57 lines
1.5 KiB
Python
57 lines
1.5 KiB
Python
"""Helpers for AsusWRT integration."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any, TypeVar
|
|
|
|
T = TypeVar("T", dict[str, Any], list[Any], None)
|
|
|
|
TRANSLATION_MAP = {
|
|
"wan_rx": "sensor_rx_bytes",
|
|
"wan_tx": "sensor_tx_bytes",
|
|
"total_usage": "cpu_total_usage",
|
|
"usage": "mem_usage_perc",
|
|
"free": "mem_free",
|
|
"used": "mem_used",
|
|
"wan_rx_speed": "sensor_rx_rates",
|
|
"wan_tx_speed": "sensor_tx_rates",
|
|
"2ghz": "2.4GHz",
|
|
"5ghz": "5.0GHz",
|
|
"5ghz2": "5.0GHz_2",
|
|
"6ghz": "6.0GHz",
|
|
"cpu": "CPU",
|
|
"datetime": "sensor_last_boot",
|
|
"uptime": "sensor_uptime",
|
|
**{f"{num}_usage": f"cpu{num}_usage" for num in range(1, 9)},
|
|
**{f"load_avg_{load}": f"sensor_load_avg{load}" for load in ("1", "5", "15")},
|
|
}
|
|
|
|
|
|
def clean_dict(raw: dict[str, Any]) -> dict[str, Any]:
|
|
"""Cleans dictionary from None values.
|
|
|
|
The `state` key is always preserved regardless of its value.
|
|
"""
|
|
|
|
return {k: v for k, v in raw.items() if v is not None or k.endswith("state")}
|
|
|
|
|
|
def translate_to_legacy(raw: T) -> T:
|
|
"""Translate raw data to legacy format for dicts and lists."""
|
|
|
|
if raw is None:
|
|
return None
|
|
|
|
if isinstance(raw, dict):
|
|
return {TRANSLATION_MAP.get(k, k): v for k, v in raw.items()}
|
|
|
|
if isinstance(raw, list):
|
|
return [
|
|
TRANSLATION_MAP[item]
|
|
if isinstance(item, str) and item in TRANSLATION_MAP
|
|
else item
|
|
for item in raw
|
|
]
|
|
|
|
return raw
|