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 ..types import UNSET, Unset if TYPE_CHECKING: from ..models.asset_upload_credentials_uploadmetadata import ( AssetUploadCredentialsUploadmetadata, ) T = TypeVar("T", bound="AssetUploadCredentials") @attr.s(auto_attribs=True) class AssetUploadCredentials: """ Attributes: asset_id (str): upload_bucket (str): upload_key (str): upload_region (str): access_key_id (str): secret_access_key (str): session_token (str): expiration (datetime.datetime): upload_metadata (Union[Unset, AssetUploadCredentialsUploadmetadata]): """ asset_id: str upload_bucket: str upload_key: str upload_region: str access_key_id: str secret_access_key: str session_token: str expiration: datetime.datetime upload_metadata: Union[Unset, "AssetUploadCredentialsUploadmetadata"] = UNSET additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict) def to_dict(self) -> Dict[str, Any]: from ..models.asset_upload_credentials_uploadmetadata import ( AssetUploadCredentialsUploadmetadata, ) asset_id = self.asset_id upload_bucket = self.upload_bucket upload_key = self.upload_key upload_region = self.upload_region access_key_id = self.access_key_id secret_access_key = self.secret_access_key session_token = self.session_token expiration = self.expiration.isoformat() upload_metadata: Union[Unset, Dict[str, Any]] = UNSET if not isinstance(self.upload_metadata, Unset): upload_metadata = self.upload_metadata.to_dict() field_dict: Dict[str, Any] = {} field_dict.update(self.additional_properties) field_dict.update( { "assetId": asset_id, "uploadBucket": upload_bucket, "uploadKey": upload_key, "uploadRegion": upload_region, "accessKeyId": access_key_id, "secretAccessKey": secret_access_key, "sessionToken": session_token, "expiration": expiration, } ) if upload_metadata is not UNSET: field_dict["uploadMetadata"] = upload_metadata return field_dict @classmethod def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: from ..models.asset_upload_credentials_uploadmetadata import ( AssetUploadCredentialsUploadmetadata, ) d = src_dict.copy() asset_id = d.pop("assetId") upload_bucket = d.pop("uploadBucket") upload_key = d.pop("uploadKey") upload_region = d.pop("uploadRegion") access_key_id = d.pop("accessKeyId") secret_access_key = d.pop("secretAccessKey") session_token = d.pop("sessionToken") expiration = isoparse(d.pop("expiration")) _upload_metadata = d.pop("uploadMetadata", UNSET) upload_metadata: Union[Unset, AssetUploadCredentialsUploadmetadata] if isinstance(_upload_metadata, Unset): upload_metadata = UNSET else: upload_metadata = AssetUploadCredentialsUploadmetadata.from_dict( _upload_metadata ) asset_upload_credentials = cls( asset_id=asset_id, upload_bucket=upload_bucket, upload_key=upload_key, upload_region=upload_region, access_key_id=access_key_id, secret_access_key=secret_access_key, session_token=session_token, expiration=expiration, upload_metadata=upload_metadata, ) asset_upload_credentials.additional_properties = d return asset_upload_credentials @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