import datetime from typing import ( TYPE_CHECKING, Any, BinaryIO, Dict, List, Optional, TextIO, Tuple, Type, TypeVar, Union, cast, ) import attr from dateutil.parser import isoparse from ..models.asset_status import AssetStatus from ..types import UNSET, Unset if TYPE_CHECKING: from ..models.asset_error import AssetError from ..models.asset_meta import AssetMeta T = TypeVar("T", bound="Asset") @attr.s(auto_attribs=True) class Asset: """ Attributes: id (str): status (AssetStatus): An enumeration. filename (str): meta (AssetMeta): created_at (datetime.datetime): updated_at (datetime.datetime): url (Union[Unset, None, str]): thumbnail_url (Union[Unset, None, str]): size (Union[Unset, None, int]): filetype (Union[Unset, None, str]): content_type (Union[Unset, None, str]): errors (Union[Unset, None, List['AssetError']]): uploaded_at (Union[Unset, None, datetime.datetime]): """ id: str status: AssetStatus filename: str meta: "AssetMeta" created_at: datetime.datetime updated_at: datetime.datetime url: Union[Unset, None, str] = UNSET thumbnail_url: Union[Unset, None, str] = UNSET size: Union[Unset, None, int] = UNSET filetype: Union[Unset, None, str] = UNSET content_type: Union[Unset, None, str] = UNSET errors: Union[Unset, None, List["AssetError"]] = UNSET uploaded_at: Union[Unset, None, datetime.datetime] = UNSET additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict) def to_dict(self) -> Dict[str, Any]: from ..models.asset_error import AssetError from ..models.asset_meta import AssetMeta id = self.id status = self.status.value filename = self.filename meta = self.meta.to_dict() created_at = self.created_at.isoformat() updated_at = self.updated_at.isoformat() url = self.url thumbnail_url = self.thumbnail_url size = self.size filetype = self.filetype content_type = self.content_type errors: Union[Unset, None, List[Dict[str, Any]]] = UNSET if not isinstance(self.errors, Unset): if self.errors is None: errors = None else: errors = [] for errors_item_data in self.errors: errors_item = errors_item_data.to_dict() errors.append(errors_item) uploaded_at: Union[Unset, None, str] = UNSET if not isinstance(self.uploaded_at, Unset): uploaded_at = self.uploaded_at.isoformat() if self.uploaded_at else None field_dict: Dict[str, Any] = {} field_dict.update(self.additional_properties) field_dict.update( { "id": id, "status": status, "filename": filename, "meta": meta, "createdAt": created_at, "updatedAt": updated_at, } ) if url is not UNSET: field_dict["url"] = url if thumbnail_url is not UNSET: field_dict["thumbnailUrl"] = thumbnail_url if size is not UNSET: field_dict["size"] = size if filetype is not UNSET: field_dict["filetype"] = filetype if content_type is not UNSET: field_dict["contentType"] = content_type if errors is not UNSET: field_dict["errors"] = errors if uploaded_at is not UNSET: field_dict["uploadedAt"] = uploaded_at return field_dict @classmethod def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: from ..models.asset_error import AssetError from ..models.asset_meta import AssetMeta d = src_dict.copy() id = d.pop("id") status = AssetStatus(d.pop("status")) filename = d.pop("filename") meta = AssetMeta.from_dict(d.pop("meta")) created_at = isoparse(d.pop("createdAt")) updated_at = isoparse(d.pop("updatedAt")) url = d.pop("url", UNSET) thumbnail_url = d.pop("thumbnailUrl", UNSET) size = d.pop("size", UNSET) filetype = d.pop("filetype", UNSET) content_type = d.pop("contentType", UNSET) errors = [] _errors = d.pop("errors", UNSET) for errors_item_data in _errors or []: errors_item = AssetError.from_dict(errors_item_data) errors.append(errors_item) _uploaded_at = d.pop("uploadedAt", UNSET) uploaded_at: Union[Unset, None, datetime.datetime] if _uploaded_at is None: uploaded_at = None elif isinstance(_uploaded_at, Unset): uploaded_at = UNSET else: uploaded_at = isoparse(_uploaded_at) asset = cls( id=id, status=status, filename=filename, meta=meta, created_at=created_at, updated_at=updated_at, url=url, thumbnail_url=thumbnail_url, size=size, filetype=filetype, content_type=content_type, errors=errors, uploaded_at=uploaded_at, ) asset.additional_properties = d return asset @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