Improve Proxmox VE type hints (#90359)

* Improves some type hints in Proxmox VE

* update

* update]

* fix isort

* Fix vm_id type

* Fix vm_id type

* Update homeassistant/components/proxmoxve/__init__.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/proxmoxve/__init__.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Change initialization of _proxmox

* Move definition of _proxmox to class level

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
This commit is contained in:
dougiteixeira 2023-03-28 05:17:33 -03:00 committed by GitHub
parent c51ed4b328
commit 190393c6bb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 50 additions and 26 deletions

View File

@ -2,6 +2,7 @@
from __future__ import annotations
from datetime import timedelta
from typing import Any
from proxmoxer import AuthenticationError, ProxmoxAPI
from proxmoxer.core import ResourceException
@ -185,14 +186,19 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
def create_coordinator_container_vm(
hass, proxmox, host_name, node_name, vm_id, vm_type
):
hass: HomeAssistant,
proxmox: ProxmoxAPI,
host_name: str,
node_name: str,
vm_id: int,
vm_type: int,
) -> DataUpdateCoordinator[dict[str, Any] | None]:
"""Create and return a DataUpdateCoordinator for a vm/container."""
async def async_update_data():
async def async_update_data() -> dict[str, Any] | None:
"""Call the api and handle the response."""
def poll_api():
def poll_api() -> dict[str, Any] | None:
"""Call the api."""
vm_status = call_api_container_vm(proxmox, node_name, vm_id, vm_type)
return vm_status
@ -216,7 +222,7 @@ def create_coordinator_container_vm(
)
def parse_api_container_vm(status):
def parse_api_container_vm(status: dict[str, Any]) -> dict[str, Any]:
"""Get the container or vm api data and return it formatted in a dictionary.
It is implemented in this way to allow for more data to be added for sensors
@ -226,7 +232,12 @@ def parse_api_container_vm(status):
return {"status": status["status"], "name": status["name"]}
def call_api_container_vm(proxmox, node_name, vm_id, machine_type):
def call_api_container_vm(
proxmox: ProxmoxAPI,
node_name: str,
vm_id: int,
machine_type: int,
) -> dict[str, Any] | None:
"""Make proper api calls."""
status = None
@ -247,12 +258,12 @@ class ProxmoxEntity(CoordinatorEntity):
def __init__(
self,
coordinator: DataUpdateCoordinator,
unique_id,
name,
icon,
host_name,
node_name,
vm_id=None,
unique_id: str,
name: str,
icon: str,
host_name: str,
node_name: str,
vm_id: int | None = None,
) -> None:
"""Initialize the Proxmox entity."""
super().__init__(coordinator)
@ -292,7 +303,17 @@ class ProxmoxEntity(CoordinatorEntity):
class ProxmoxClient:
"""A wrapper for the proxmoxer ProxmoxAPI client."""
def __init__(self, host, port, user, realm, password, verify_ssl):
_proxmox: ProxmoxAPI
def __init__(
self,
host: str,
port: int,
user: str,
realm: str,
password: str,
verify_ssl: bool,
) -> None:
"""Initialize the ProxmoxClient."""
self._host = host
@ -302,10 +323,7 @@ class ProxmoxClient:
self._password = password
self._verify_ssl = verify_ssl
self._proxmox = None
self._connection_start_time = None
def build_client(self):
def build_client(self) -> None:
"""Construct the ProxmoxAPI client.
Allows inserting the realm within the `user` value.
@ -324,6 +342,6 @@ class ProxmoxClient:
verify_ssl=self._verify_ssl,
)
def get_api_client(self):
def get_api_client(self) -> ProxmoxAPI:
"""Return the ProxmoxAPI client."""
return self._proxmox

View File

@ -51,7 +51,13 @@ async def async_setup_platform(
add_entities(sensors)
def create_binary_sensor(coordinator, host_name, node_name, vm_id, name):
def create_binary_sensor(
coordinator,
host_name: str,
node_name: str,
vm_id: int,
name: str,
) -> ProxmoxBinarySensor:
"""Create a binary sensor based on the given data."""
return ProxmoxBinarySensor(
coordinator=coordinator,
@ -72,12 +78,12 @@ class ProxmoxBinarySensor(ProxmoxEntity, BinarySensorEntity):
def __init__(
self,
coordinator: DataUpdateCoordinator,
unique_id,
name,
icon,
host_name,
node_name,
vm_id,
unique_id: str,
name: str,
icon: str,
host_name: str,
node_name: str,
vm_id: int,
) -> None:
"""Create the binary sensor for vms or containers."""
super().__init__(
@ -85,7 +91,7 @@ class ProxmoxBinarySensor(ProxmoxEntity, BinarySensorEntity):
)
@property
def is_on(self):
def is_on(self) -> bool | None:
"""Return the state of the binary sensor."""
if (data := self.coordinator.data) is None:
return None