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_position_group import AssetPositionGroup from ..models.asset_status import AssetStatus from ..types import UNSET, Unset if TYPE_CHECKING: from ..models.asset_error import AssetError T = TypeVar("T", bound="MetaCampaignImage") @attr.s(auto_attribs=True) class MetaCampaignImage: """ Attributes: id (str): asset_id (str): position_group (AssetPositionGroup): An enumeration. filename (str): status (AssetStatus): An enumeration. created_at (datetime.datetime): updated_at (datetime.datetime): url (Union[Unset, None, str]): thumbnail_url (Union[Unset, None, str]): size (Union[Unset, None, int]): errors (Union[Unset, List['AssetError']]): uploaded_at (Union[Unset, None, datetime.datetime]): """ id: str asset_id: str position_group: AssetPositionGroup filename: str status: AssetStatus 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 errors: Union[Unset, 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 id = self.id asset_id = self.asset_id position_group = self.position_group.value filename = self.filename status = self.status.value created_at = self.created_at.isoformat() updated_at = self.updated_at.isoformat() url = self.url thumbnail_url = self.thumbnail_url size = self.size errors: Union[Unset, List[Dict[str, Any]]] = UNSET if not isinstance(self.errors, Unset): 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, "assetId": asset_id, "positionGroup": position_group, "filename": filename, "status": status, "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 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 d = src_dict.copy() id = d.pop("id") asset_id = d.pop("assetId") position_group = AssetPositionGroup(d.pop("positionGroup")) filename = d.pop("filename") status = AssetStatus(d.pop("status")) 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) 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) meta_campaign_image = cls( id=id, asset_id=asset_id, position_group=position_group, filename=filename, status=status, created_at=created_at, updated_at=updated_at, url=url, thumbnail_url=thumbnail_url, size=size, errors=errors, uploaded_at=uploaded_at, ) meta_campaign_image.additional_properties = d return meta_campaign_image @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