first commit

This commit is contained in:
alexpolo1
2023-06-27 09:24:33 +02:00
commit 06486ba860
33 changed files with 2615 additions and 0 deletions

164
sagemcom_api/models.py Normal file
View File

@@ -0,0 +1,164 @@
"""Models for the Sagemcom F@st client."""
import dataclasses
from dataclasses import dataclass
from typing import Any, List, Optional
@dataclass
class Device:
"""Device connected to a router."""
uid: Optional[int] = None
alias: Optional[str] = None
phys_address: Optional[str] = None
ip_address: Optional[str] = None
address_source: Optional[str] = None
dhcp_client: Optional[str] = None
lease_time_remaining: Optional[int] = None
associated_device: Optional[Any] = None
layer1_interface: Optional[Any] = None
layer3_interface: Optional[Any] = None
vendor_class_id: Optional[Any] = None
client_id: Optional[Any] = None
user_class_id: Optional[Any] = None
host_name: Optional[Any] = None
active: Optional[bool] = None
lease_start: Optional[int] = None
lease_duration: Optional[int] = None
interface_type: Optional[str] = None # enum!
detected_device_type: Optional[str] = None
active_last_change: Optional[Any] = None
user_friendly_name: Optional[str] = None
user_host_name: Optional[str] = None
user_device_type: Optional[Any] = None # enum!
icon: Optional[Any] = None
room: Optional[Any] = None
blacklist_enable: Optional[bool] = None
blacklisted: Optional[bool] = None
unblock_hours_count: Optional[int] = None
blacklist_status: Optional[bool] = None
blacklisted_according_to_schedule: Optional[bool] = None
blacklisted_schedule: Optional[List] = None
hidden: Optional[bool] = None
options: Optional[List] = None
vendor_class_idv6: Optional[Any] = None
ipv4_addresses: Optional[List] = None
ipv6_addresses: Optional[List] = None
device_type_association: Optional[Any] = None
# TODO Remove extra kwargs before init
def __init__(self, **kwargs):
"""Override to accept more args than specified."""
names = {f.name for f in dataclasses.fields(self)}
for k, v in kwargs.items():
if k in names:
setattr(self, k, v)
@property
def id(self):
"""Return unique ID for device."""
return self.phys_address.upper()
@property
def name(self):
"""Return name of the device."""
return self.user_host_name or self.host_name
@dataclass
class DeviceInfo:
"""Sagemcom Router representation."""
mac_address: str
serial_number: Optional[str] = None
manufacturer: Optional[Any] = None
model_name: Optional[Any] = None
model_number: Optional[Any] = None
software_version: Optional[str] = None
hardware_version: Optional[str] = None
up_time: Optional[Any] = None
reboot_count: Optional[Any] = None
router_name: Optional[Any] = None
bootloader_version: Optional[Any] = None
device_category: Optional[Any] = None
manufacturer_oui: Optional[Any] = None
product_class: Optional[str] = None
description: Optional[str] = None
additional_hardware_version: Optional[str] = None
additional_software_version: Optional[str] = None
external_firmware_version: Optional[str] = None
internal_firmware_version: Optional[str] = None
gui_firmware_version: Optional[str] = None
guiapi_version: Optional[float] = None
provisioning_code: Optional[str] = None
up_time: Optional[int] = None
first_use_date: Optional[str] = None
mac_address: Optional[str] = None
mode: Optional[str] = None
country: Optional[str] = None
reboot_count: Optional[int] = None
nodes_to_restore: Optional[str] = None
router_name: Optional[str] = None
reboot_status: Optional[float] = None
reset_status: Optional[float] = None
update_status: Optional[float] = None
SNMP: Optional[bool] = None
first_connection: Optional[bool] = None
build_date: Optional[str] = None
spec_version: Optional[str] = None
CLID: Optional[str] = None
flush_device_log: Optional[bool] = None
locations: Optional[str] = None
api_version: Optional[str] = None
# TODO Remove extra kwargs before init
def __init__(self, **kwargs):
"""Override to accept more args than specified."""
names = {f.name for f in dataclasses.fields(self)}
for k, v in kwargs.items():
if k in names:
setattr(self, k, v)
@property
def id(self):
"""Return unique ID for gateway."""
return self.mac_address
@dataclass
class PortMapping:
"""Port Mapping representation."""
uid: int
enable: bool
status: Optional[str] = None # Enum
alias: Optional[str] = None
external_interface: Optional[str] = None
all_external_interfaces: Optional[bool] = None
lease_duration: Optional[int] = None
external_port: Optional[int] = None
external_port_end_range: Optional[int] = None
internal_interface: Optional[str] = None
internal_port: Optional[int] = None
protocol: Optional[str] = None
service: Optional[str] = None
internal_client: Optional[str] = None
public_ip: Optional[str] = None
description: Optional[str] = None
creator: Optional[str] = None
target: Optional[str] = None
lease_start: Optional[str] = None # Date?
# TODO Remove extra kwargs before init
def __init__(self, **kwargs):
"""Override to accept more args than specified."""
names = {f.name for f in dataclasses.fields(self)}
for k, v in kwargs.items():
if k in names:
setattr(self, k, v)
@property
def id(self):
"""Return unique ID for port mapping."""
return self.uid