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: Optional[int] = find_with_default(element, "HADE_ID", data_type=int)
self.name: Optional[str] = find_with_default(element, "HADEName", data_type=str)
self.description: Optional[str] = find_with_default(element, "HADEDesc")
self.type: Optional[str] = find_with_default(element, "HADEDataType")
self.display_order: Optional[int] = find_with_default(
element, "DisplayOrder", data_type=int
)
self.additional_description: Optional[str] = find_with_default(
element, "AdditionalHadeDesc"
)
self._value = None
@property
def value(self) -> Any:
if not self._value:
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)