first commit
This commit is contained in:
164
sagemcom_api/models.py
Normal file
164
sagemcom_api/models.py
Normal 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
|
||||
Reference in New Issue
Block a user