@classmethod
def from_cp_dict(cls, mgmt_name: str, domain_name: str, data: dict[str, Any]) -> Asset:
"""Construct an `Asset` from a raw Check Point gateway/server dictionary."""
uid = str(data.get("uid") or "")
name = str(data.get("name") or "")
asset_type = str(data.get("type") or "gateway")
interfaces_raw = data.get("interfaces")
interfaces: list[dict[str, Any]] = []
if isinstance(interfaces_raw, list):
interfaces = [item for item in interfaces_raw if isinstance(item, dict)]
elif isinstance(interfaces_raw, dict):
objs = interfaces_raw.get("objects")
if isinstance(objs, list):
interfaces = [item for item in objs if isinstance(item, dict)]
return cls(
id=f"{mgmt_name}:{domain_name}:{uid}",
asset_id=f"{mgmt_name}:{domain_name}:{name}",
uid=uid,
name=name,
type=asset_type,
mgmt_name=mgmt_name,
domain_name=domain_name,
ipv4_address=data.get("ipv4-address") or data.get("ipv4_address"),
ipv6_address=data.get("ipv6-address") or data.get("ipv6_address"),
version=data.get("version"),
os_name=data.get("os-name") or data.get("os_name"),
hardware=data.get("hardware"),
sic_status=data.get("sic-status") or data.get("sic_status"),
parent_uid=data.get("parent_uid"),
parent_name=data.get("parent_name"),
parent_id=data.get("parent_id"),
parent_asset_id=data.get("parent_asset_id"),
member_uids=list(data.get("member_uids") or []),
member_asset_ids=list(data.get("member_asset_ids") or []),
virtual_system_uids=list(data.get("virtual_system_uids") or []),
virtual_system_asset_ids=list(data.get("virtual_system_asset_ids") or []),
interfaces=interfaces,
network_security_blades=data.get("network-security-blades") or data.get("network_security_blades") or {},
comments=str(data.get("comments") or ""),
color=data.get("color"),
raw_data=dict(data),
)