import datetime from collections.abc import Mapping from typing import Any, TypeVar, Union from uuid import UUID from attrs import define as _attrs_define from attrs import field as _attrs_field from dateutil.parser import isoparse from ..models.state_enum import StateEnum from ..types import UNSET, Unset T = TypeVar("T", bound="ApplicationWithdraw") @_attrs_define class ApplicationWithdraw: """ Attributes: payer (UUID): payer_type (int): payer_wallet (UUID): payee (str): payee_type (str): payee_wallet (UUID): created_at (datetime.datetime): state (StateEnum): * `1` - created * `2` - delayed * `3` - pending * `4` - incomplete * `5` - success * `6` - failed * `7` - expected_failure amount (int): updated_at (datetime.datetime): uuid (Union[Unset, UUID]): details (Union[Unset, Any]): """ payer: UUID payer_type: int payer_wallet: UUID payee: str payee_type: str payee_wallet: UUID created_at: datetime.datetime state: StateEnum amount: int updated_at: datetime.datetime uuid: Union[Unset, UUID] = UNSET details: Union[Unset, Any] = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: payer = str(self.payer) payer_type = self.payer_type payer_wallet = str(self.payer_wallet) payee = self.payee payee_type = self.payee_type payee_wallet = str(self.payee_wallet) created_at = self.created_at.isoformat() state = self.state.value amount = self.amount updated_at = self.updated_at.isoformat() uuid: Union[Unset, str] = UNSET if not isinstance(self.uuid, Unset): uuid = str(self.uuid) details = self.details field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) field_dict.update( { "payer": payer, "payer_type": payer_type, "payer_wallet": payer_wallet, "payee": payee, "payee_type": payee_type, "payee_wallet": payee_wallet, "created_at": created_at, "state": state, "amount": amount, "updated_at": updated_at, } ) if uuid is not UNSET: field_dict["uuid"] = uuid if details is not UNSET: field_dict["details"] = details return field_dict @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) payer = UUID(d.pop("payer")) payer_type = d.pop("payer_type") payer_wallet = UUID(d.pop("payer_wallet")) payee = d.pop("payee") payee_type = d.pop("payee_type") payee_wallet = UUID(d.pop("payee_wallet")) created_at = isoparse(d.pop("created_at")) state = StateEnum(d.pop("state")) amount = d.pop("amount") updated_at = isoparse(d.pop("updated_at")) _uuid = d.pop("uuid", UNSET) uuid: Union[Unset, UUID] if isinstance(_uuid, Unset): uuid = UNSET else: uuid = UUID(_uuid) details = d.pop("details", UNSET) application_withdraw = cls( payer=payer, payer_type=payer_type, payer_wallet=payer_wallet, payee=payee, payee_type=payee_type, payee_wallet=payee_wallet, created_at=created_at, state=state, amount=amount, updated_at=updated_at, uuid=uuid, details=details, ) application_withdraw.additional_properties = d return application_withdraw @property def additional_keys(self) -> list[str]: return list(self.additional_properties.keys()) def __getitem__(self, key: str) -> Any: return self.additional_properties[key] def __setitem__(self, key: str, value: Any) -> None: self.additional_properties[key] = value def __delitem__(self, key: str) -> None: del self.additional_properties[key] def __contains__(self, key: str) -> bool: return key in self.additional_properties