from typing import Optional, Any
from lxml import etree
from .xml_helper import find_with_default
from ...tools.utils import to_bool
TYPES_TO_BOOLIFY = ("Bool", "Boolean")
TYPES_TO_PYVAL = ("Bool", "Boolean", "Currency", "Date", "Int", "Integer", "Number")
[docs]
class HADE:
"""
Object representation of an Account HADE (Host Account Data Element)
"""
def __init__(self, element: etree.Element):
self.element = element
self.host_acct_id: Optional[int] = find_with_default(
element, "HostAccountID", data_type=int
)
self._id = None
self._name = None
self._description = None
self._type = None
self._display_order = None
self._additional_description = None
self._value = None
@property
def id(self) -> Optional[int]:
if self._id is None:
self._id = find_with_default(self.element, "HADE_ID", data_type=int)
return self._id
@property
def name(self) -> Optional[str]:
if self._name is None:
self._name = find_with_default(self.element, "HADEName", data_type=str)
return self._name
@property
def description(self) -> Optional[str]:
if self._description is None:
self._description = find_with_default(self.element, "HADEDesc")
return self._description
@property
def type(self) -> Optional[str]:
if self._type is None:
self._type = find_with_default(self.element, "HADEDataType")
return self._type
@property
def display_order(self) -> Optional[int]:
if self._display_order is None:
self._display_order = find_with_default(
self.element, "DisplayOrder", data_type=int
)
return self._display_order
@property
def additional_description(self) -> Optional[str]:
if self._additional_description is None:
self._additional_description = find_with_default(
self.element, "AdditionalHadeDesc"
)
return self._additional_description
@property
def value(self) -> Any:
if self._value is None:
text_only = Any if self.type in TYPES_TO_PYVAL else str
self._value = find_with_default(
self.element, "DataValue", data_type=text_only
)
if self.type in TYPES_TO_BOOLIFY:
self._value = to_bool(str(self._value))
return self._value
def __repr__(self):
return "<Object HADE: {}-{}>".format(self.host_acct_id, self.id)