import datetime from collections.abc import Mapping 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.state_enum import StateEnum T = TypeVar("T", bound="Charge") @_attrs_define class Charge: """ Attributes: uuid (UUID): user (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 (Union[None, int]): updated_at (Union[None, datetime.datetime]): """ uuid: UUID user: UUID created_at: Union[None, datetime.datetime] state: StateEnum amount: Union[None, int] updated_at: Union[None, datetime.datetime] additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: uuid = str(self.uuid) user = str(self.user) 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: Union[None, int] 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 field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) field_dict.update( { "uuid": uuid, "user": user, "created_at": created_at, "state": state, "amount": amount, "updated_at": updated_at, } ) 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")) user = UUID(d.pop("user")) 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")) def _parse_amount(data: object) -> Union[None, int]: if data is None: return data return cast(Union[None, int], data) amount = _parse_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")) charge = cls( uuid=uuid, user=user, created_at=created_at, state=state, amount=amount, updated_at=updated_at, ) charge.additional_properties = d return charge @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