import datetime from typing import Any, TypeVar, Union, cast 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.payer_type_enum import PayerTypeEnum from ..models.state_enum import StateEnum from ..types import UNSET, Unset T = TypeVar("T", bound="UserTransaction") @_attrs_define class UserTransaction: """ Attributes: uuid (UUID): payee_id (UUID): payee_type (UUID): created_at (Union[None, datetime.datetime]): state (StateEnum): * `1` - created * `2` - delayed * `3` - pending * `4` - incomplete * `5` - success * `6` - failed * `7` - expected_failure amount (int): updated_at (Union[None, datetime.datetime]): details (Any): role (int): payer_id (Union[None, UUID, Unset]): payer_type (Union[None, PayerTypeEnum, Unset]): delay (Union[Unset, int]): """ uuid: UUID payee_id: UUID payee_type: UUID created_at: Union[None, datetime.datetime] state: StateEnum amount: int updated_at: Union[None, datetime.datetime] details: Any role: int payer_id: Union[None, UUID, Unset] = UNSET payer_type: Union[None, PayerTypeEnum, Unset] = UNSET 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) payee_id = str(self.payee_id) payee_type = str(self.payee_type) created_at: Union[None, str] if isinstance(self.created_at, datetime.datetime): created_at = self.created_at.isoformat() else: created_at = self.created_at state = self.state.value amount = self.amount updated_at: Union[None, str] if isinstance(self.updated_at, datetime.datetime): updated_at = self.updated_at.isoformat() else: updated_at = self.updated_at details = self.details role = self.role payer_id: Union[None, Unset, str] if isinstance(self.payer_id, Unset): payer_id = UNSET elif isinstance(self.payer_id, UUID): payer_id = str(self.payer_id) else: payer_id = self.payer_id payer_type: Union[None, Unset, int] if isinstance(self.payer_type, Unset): payer_type = UNSET elif isinstance(self.payer_type, PayerTypeEnum): payer_type = self.payer_type.value else: payer_type = self.payer_type delay = self.delay field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) field_dict.update( { "uuid": uuid, "payee_id": payee_id, "payee_type": payee_type, "created_at": created_at, "state": state, "amount": amount, "updated_at": updated_at, "details": details, "role": role, } ) if payer_id is not UNSET: field_dict["payer_id"] = payer_id if payer_type is not UNSET: field_dict["payer_type"] = payer_type if delay is not UNSET: field_dict["delay"] = delay return field_dict @classmethod def from_dict(cls: type[T], src_dict: dict[str, Any]) -> T: d = src_dict.copy() uuid = UUID(d.pop("uuid")) payee_id = UUID(d.pop("payee_id")) payee_type = UUID(d.pop("payee_type")) def _parse_created_at(data: object) -> Union[None, datetime.datetime]: if data is None: return data try: if not isinstance(data, str): raise TypeError() created_at_type_0 = isoparse(data) return created_at_type_0 except: # noqa: E722 pass return cast(Union[None, datetime.datetime], data) created_at = _parse_created_at(d.pop("created_at")) state = StateEnum(d.pop("state")) amount = d.pop("amount") def _parse_updated_at(data: object) -> Union[None, datetime.datetime]: if data is None: return data try: if not isinstance(data, str): raise TypeError() updated_at_type_0 = isoparse(data) return updated_at_type_0 except: # noqa: E722 pass return cast(Union[None, datetime.datetime], data) updated_at = _parse_updated_at(d.pop("updated_at")) details = d.pop("details") role = d.pop("role") def _parse_payer_id(data: object) -> Union[None, UUID, Unset]: if data is None: return data if isinstance(data, Unset): return data try: if not isinstance(data, str): raise TypeError() payer_id_type_0 = UUID(data) return payer_id_type_0 except: # noqa: E722 pass return cast(Union[None, UUID, Unset], data) payer_id = _parse_payer_id(d.pop("payer_id", UNSET)) def _parse_payer_type(data: object) -> Union[None, PayerTypeEnum, Unset]: if data is None: return data if isinstance(data, Unset): return data try: if not isinstance(data, int): raise TypeError() payer_type_type_0 = PayerTypeEnum(data) return payer_type_type_0 except: # noqa: E722 pass return cast(Union[None, PayerTypeEnum, Unset], data) payer_type = _parse_payer_type(d.pop("payer_type", UNSET)) delay = d.pop("delay", UNSET) user_transaction = cls( uuid=uuid, payee_id=payee_id, payee_type=payee_type, created_at=created_at, state=state, amount=amount, updated_at=updated_at, details=details, role=role, payer_id=payer_id, payer_type=payer_type, delay=delay, ) user_transaction.additional_properties = d return user_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