from typing import Optional
from lxml import objectify, etree
from dataclasses import dataclass, field
from q2_sdk.models.tip.schemas.base import TIPModel, TIPRequest
from q2_sdk.models.tip.schemas import descriptions
from q2_sdk.models.tip.exceptions import (
TIPModelValidationFromLxmlObjectifyException,
TIPModelParsingException,
)
from q2_sdk.models.tip.variables import TransactionTypeEnum
[docs]
@dataclass
class DomesticWireTransactionDetails(TIPModel):
"""
DomesticWireTransactionDetails TIPModel
"""
originating_account_id: int = field(
metadata={
"description": descriptions.DW_ORIGINATING_ACCOUNT_ID_DESCRIPTION,
}
)
originating_account: Optional[str] = field(
metadata={
"description": descriptions.DW_ORIGINATING_ACCOUNT_DESCRIPTION,
}
)
to_account: Optional[str] = field(
metadata={
"description": descriptions.DW_TO_ACCOUNT_DESCRIPTION,
}
)
to_account_aba: Optional[str] = field(
metadata={
"description": descriptions.DW_TO_ACCOUNT_ABA_DESCRIPTION,
}
)
[docs]
@classmethod
def model_validate_from_elem(
cls, data: etree.Element
) -> "DomesticWireTransactionDetails":
"""
Create a DomesticWireTransactionDetails instance from XML element data.
:param data: etree Element containing domestic wire transaction details
:return: DomesticWireTransactionDetails instance
:raises TIPModelValidationFromLxmlObjectifyException: If data is not an ObjectifiedElement
"""
if isinstance(data, objectify.ObjectifiedElement):
try:
try:
originating_account = data.OriginatingAccount.text
except AttributeError:
originating_account = None
try:
to_account = data.ToAccount.text
except AttributeError:
to_account = None
try:
to_account_aba = data.ToAccountABA.text
except AttributeError:
to_account_aba = None
return cls(
originating_account_id=TIPModel.parse_int(
data.OriginatingAccountID
),
originating_account=TIPModel.parse_str_optional(
originating_account
),
to_account=TIPModel.parse_str_optional(to_account),
to_account_aba=TIPModel.parse_str_optional(to_account_aba),
)
except AttributeError as e:
raise TIPModelParsingException(
f"Missing required attribute in obj_elem: {str(e)}"
)
raise TIPModelValidationFromLxmlObjectifyException(cls.__name__, type(data))
[docs]
@dataclass
class DomesticWireTIPRequest(TIPRequest):
"""
DomesticWireTIPRequest TIPRequest. TIPRequests are converted to this class when TransactionType is DomesticWire.
"""
domestic_wire: DomesticWireTransactionDetails
[docs]
@classmethod
def model_validate_from_elem(cls, data: etree.Element) -> "DomesticWireTIPRequest":
"""
Create a DomesticWireTIPRequest instance from XML element data.
:param data: etree Element containing domestic wire TIP request data
:return: DomesticWireTIPRequest instance
:raises TIPModelValidationFromLxmlObjectifyException: If data is not an ObjectifiedElement
"""
if isinstance(data, objectify.ObjectifiedElement):
tip_request_dc = TIPRequest.model_validate_from_elem(data)
return cls(
domestic_wire=DomesticWireTransactionDetails.model_validate_from_elem(
TIPModel.try_getattr_from_elem(
data, TransactionTypeEnum.DomesticWire.value
)
),
**(tip_request_dc.to_kwargs()),
)
raise TIPModelValidationFromLxmlObjectifyException(cls.__name__, type(data))