Source code for q2_sdk.models.tip.schemas.international_wire

from lxml import objectify, etree
from typing import Optional
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 InternationalWireTransactionDetails(TIPModel): """ InternationalWireTransactionDetails """ to_account: str = field( metadata={ "description": descriptions.IW_TO_ACCOUNT_DESCRIPTION, } ) intermed_swift_or_bic: Optional[str] = field( metadata={ "description": descriptions.IW_INTERMED_SWIFT_OR_BIC_DESCRIPTION, }, default=None, ) swift_code_or_bic: Optional[str] = field( metadata={ "description": descriptions.IW_SWIFT_CODE_OR_BIC_DESCRIPTION, }, default=None, ) iban: Optional[str] = field( metadata={ "description": descriptions.IW_IBAN_DESCRIPTION, }, default=None, ) intermed_iban: Optional[str] = field( metadata={ "description": descriptions.IW_INTERMED_IBAN_DESCRIPTION, }, default=None, ) recip_address_3: Optional[str] = field( metadata={ "description": descriptions.IW_RECIP_ADDRESS_3_DESCRIPTION, }, default=None, ) address_1: Optional[str] = field( metadata={ "description": descriptions.IW_ADDRESS_1_DESCRIPTION, }, default=None, ) address_2: Optional[str] = field( metadata={ "description": descriptions.IW_ADDRESS_2_DESCRIPTION, }, default=None, ) address_3: Optional[str] = field( metadata={ "description": descriptions.IW_ADDRESS_3_DESCRIPTION, }, default=None, ) intermed_address_1: Optional[str] = field( metadata={ "description": descriptions.IW_INTERMED_ADDRESS_1_DESCRIPTION, }, default=None, ) intermed_address_2: Optional[str] = field( metadata={ "description": descriptions.IW_INTERMED_ADDRESS_2_DESCRIPTION, }, default=None, ) intermed_address_3: Optional[str] = field( metadata={ "description": descriptions.IW_INTERMED_ADDRESS_3_DESCRIPTION, }, default=None, )
[docs] @classmethod def model_validate_from_elem( cls, data: etree.Element ) -> "InternationalWireTransactionDetails": """ Create an InternationalWireTransactionDetails instance from XML element data. :param data: etree Element containing international wire transaction details :return: InternationalWireTransactionDetails instance :raises TIPModelValidationFromLxmlObjectifyException: If data is not an ObjectifiedElement """ if isinstance(data, objectify.ObjectifiedElement): try: # we do this because if the field is missing from the xml, the ObjectifiedElement # parsed by lxml will not have the attribute at all. The TIPModel.parse_{dtype}_optional # covers the case where the field is present in the xml but is None or empty str. try: intermed_swift_or_bic = data.IntermedSwiftOrBic.text except AttributeError: intermed_swift_or_bic = None try: swift_code_or_bic = data.SwiftCodeOrBic.text except AttributeError: swift_code_or_bic = None try: iban = data.IBAN.text except AttributeError: iban = None try: intermed_iban = data.IntermedIBAN.text except AttributeError: intermed_iban = None try: recip_address_3 = data.RecipAddress3.text except AttributeError: recip_address_3 = None try: address_1 = data.Address1.text except AttributeError: address_1 = None try: address_2 = data.Address2.text except AttributeError: address_2 = None try: address_3 = data.Address3.text except AttributeError: address_3 = None try: intermed_address_1 = data.IntermedAddress1.text except AttributeError: intermed_address_1 = None try: intermed_address_2 = data.IntermedAddress2.text except AttributeError: intermed_address_2 = None try: intermed_address_3 = data.IntermedAddress3.text except AttributeError: intermed_address_3 = None return cls( to_account=TIPModel.parse_str(data.ToAccount.text), intermed_swift_or_bic=TIPModel.parse_str_optional( intermed_swift_or_bic ), swift_code_or_bic=TIPModel.parse_str_optional(swift_code_or_bic), iban=TIPModel.parse_str_optional(iban), intermed_iban=TIPModel.parse_str_optional(intermed_iban), recip_address_3=TIPModel.parse_str_optional(recip_address_3), address_1=TIPModel.parse_str_optional(address_1), address_2=TIPModel.parse_str_optional(address_2), address_3=TIPModel.parse_str_optional(address_3), intermed_address_1=TIPModel.parse_str_optional(intermed_address_1), intermed_address_2=TIPModel.parse_str_optional(intermed_address_2), intermed_address_3=TIPModel.parse_str_optional(intermed_address_3), ) except AttributeError as e: raise TIPModelParsingException( f"Missing required attribute in obj_elem: {str(e)}" ) raise TIPModelValidationFromLxmlObjectifyException(cls.__name__, type(data))
[docs] @dataclass class InternationalWireTIPRequest(TIPRequest): """ InternationalWireTIPRequest TIPRequest. TIPRequests are converted to this class when TransactionType is InternationalWire. """ international_wire: InternationalWireTransactionDetails
[docs] @classmethod def model_validate_from_elem( cls, data: etree.Element ) -> "InternationalWireTIPRequest": """ Create an InternationalWireTIPRequest instance from XML element data. :param data: etree Element containing international wire TIP request data :return: InternationalWireTIPRequest 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( international_wire=InternationalWireTransactionDetails.model_validate_from_elem( TIPModel.try_getattr_from_elem( data, TransactionTypeEnum.InternationalWire.value ) ), **(tip_request_dc.to_kwargs()), ) raise TIPModelValidationFromLxmlObjectifyException(cls.__name__, type(data))