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="Transaction") @_attrs_define class Transaction: """ Attributes: uuid (UUID): payer (str): payer_type (str): payer_wallet (str): payee (UUID): payee_type (int): payee_wallet (str): 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): details (Any): role (int): delay (Union[Unset, int]): """ uuid: UUID payer: str payer_type: str payer_wallet: str payee: UUID payee_type: int payee_wallet: str created_at: datetime.datetime state: StateEnum amount: int updated_at: datetime.datetime details: Any role: int delay: Union[Unset, int] = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: uuid = str(self.uuid) payer = self.payer payer_type = self.payer_type payer_wallet = self.payer_wallet payee = str(self.payee) payee_type = self.payee_type payee_wallet = self.payee_wallet created_at = self.created_at.isoformat() state = self.state.value amount = self.amount updated_at = self.updated_at.isoformat() details = self.details role = self.role delay = self.delay field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) field_dict.update( { "uuid": uuid, "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, "details": details, "role": role, } ) if delay is not UNSET: field_dict["delay"] = delay return field_dict @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) uuid = UUID(d.pop("uuid")) payer = d.pop("payer") payer_type = d.pop("payer_type") payer_wallet = d.pop("payer_wallet") payee = UUID(d.pop("payee")) payee_type = d.pop("payee_type") payee_wallet = 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")) details = d.pop("details") role = d.pop("role") delay = d.pop("delay", UNSET) transaction = cls( uuid=uuid, 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, details=details, role=role, delay=delay, ) transaction.additional_properties = d return transaction @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