test #2
@@ -67,6 +67,19 @@ class BaseDevice(ABC):
|
|||||||
"""
|
"""
|
||||||
return self.raw.get("system", None)
|
return self.raw.get("system", None)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _as_list(data) -> list:
|
||||||
|
"""Normalize a TTP group result to a list.
|
||||||
|
|
||||||
|
TTP returns a single dict when a group matches exactly one entry and a
|
||||||
|
list when it matches several. Callers always expect a list.
|
||||||
|
"""
|
||||||
|
if data is None:
|
||||||
|
return []
|
||||||
|
if isinstance(data, dict):
|
||||||
|
return [data]
|
||||||
|
return data
|
||||||
|
|
||||||
def _validate_contract(self) -> dict:
|
def _validate_contract(self) -> dict:
|
||||||
if self.raw is None:
|
if self.raw is None:
|
||||||
msg = (
|
msg = (
|
||||||
@@ -76,7 +89,7 @@ class BaseDevice(ABC):
|
|||||||
)
|
)
|
||||||
raise OxiAPIError(msg, status_code=404)
|
raise OxiAPIError(msg, status_code=404)
|
||||||
system_data = self.system()
|
system_data = self.system()
|
||||||
interfaces_data = self.interfaces() or []
|
interfaces_data = self._as_list(self.interfaces())
|
||||||
result = {
|
result = {
|
||||||
"system": System(**system_data),
|
"system": System(**system_data),
|
||||||
"interfaces": [Interfaces(**item) for item in interfaces_data],
|
"interfaces": [Interfaces(**item) for item in interfaces_data],
|
||||||
@@ -89,7 +102,7 @@ class BaseDevice(ABC):
|
|||||||
f"{self.__class__.__name__}: template '{self.template}' declares optional group "
|
f"{self.__class__.__name__}: template '{self.template}' declares optional group "
|
||||||
f"'vlans', but TTP did not return it."
|
f"'vlans', but TTP did not return it."
|
||||||
)
|
)
|
||||||
vlans_data = self.vlans() or []
|
vlans_data = self._as_list(self.vlans())
|
||||||
result["vlans"] = [Vlans(**item) for item in vlans_data]
|
result["vlans"] = [Vlans(**item) for item in vlans_data]
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user