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.update_asset_input_meta import UpdateAssetInputMeta T = TypeVar("T", bound="UpdateAssetInput") @attr.s(auto_attribs=True) class UpdateAssetInput: """ Attributes: status (Union[Unset, None, AssetStatus]): An enumeration. size (Union[Unset, None, int]): filetype (Union[Unset, None, str]): content_type (Union[Unset, None, str]): meta (Union[Unset, None, UpdateAssetInputMeta]): errors (Union[Unset, None, List['AssetError']]): uploaded_at (Union[Unset, None, datetime.datetime]): """ status: Union[Unset, None, AssetStatus] = UNSET size: Union[Unset, None, int] = UNSET filetype: Union[Unset, None, str] = UNSET content_type: Union[Unset, None, str] = UNSET meta: Union[Unset, None, "UpdateAssetInputMeta"] = 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.update_asset_input_meta import UpdateAssetInputMeta status: Union[Unset, None, str] = UNSET if not isinstance(self.status, Unset): status = self.status.value if self.status else None size = self.size filetype = self.filetype content_type = self.content_type meta: Union[Unset, None, Dict[str, Any]] = UNSET if not isinstance(self.meta, Unset): meta = self.meta.to_dict() if self.meta else None 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({}) if status is not UNSET: field_dict["status"] = status 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 meta is not UNSET: field_dict["meta"] = meta 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.update_asset_input_meta import UpdateAssetInputMeta d = src_dict.copy() _status = d.pop("status", UNSET) status: Union[Unset, None, AssetStatus] if _status is None: status = None elif isinstance(_status, Unset): status = UNSET else: status = AssetStatus(_status) size = d.pop("size", UNSET) filetype = d.pop("filetype", UNSET) content_type = d.pop("contentType", UNSET) _meta = d.pop("meta", UNSET) meta: Union[Unset, None, UpdateAssetInputMeta] if _meta is None: meta = None elif isinstance(_meta, Unset): meta = UNSET else: meta = UpdateAssetInputMeta.from_dict(_meta) 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) update_asset_input = cls( status=status, size=size, filetype=filetype, content_type=content_type, meta=meta, errors=errors, uploaded_at=uploaded_at, ) update_asset_input.additional_properties = d return update_asset_input @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