from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar, Union, cast
from attrs import define as _attrs_define
from attrs import field as _attrs_field
from ..models.framework_type import FrameworkType
from ..models.server_resource import ServerResource
from ..types import UNSET, Unset
if TYPE_CHECKING:
from ..models.deployment_resource import DeploymentResource
from ..models.deployment_source import DeploymentSource
from ..models.deployment_spec_env_vars import DeploymentSpecEnvVars
from ..models.image_config import ImageConfig
T = TypeVar("T", bound="DeploymentSpec")
[docs]@_attrs_define
class DeploymentSpec:
"""
Attributes:
cluster (Union[Unset, str]):
command (Union[Unset, str]): Command is the command to run.
deployment_resource (Union[Unset, DeploymentResource]):
deployment_source (Union[Unset, DeploymentSource]):
env_vars (Union[Unset, DeploymentSpecEnvVars]): EnvVars is the environment variables of the deployment.
framework (Union[Unset, FrameworkType]):
http_probe_path (Union[Unset, str]): HTTPProbePath is the user defined path of the http probe.
id (Union[Unset, str]): ID holds the unique identifier of the deployment.
image_config (Union[Unset, ImageConfig]):
max_replicas (Union[Unset, int]): MaxReplicas is the maximum number of replicas of the deployment.
min_replicas (Union[Unset, int]): MinReplicas is the minimum number of replicas of the deployment.
name (Union[Unset, str]): Name is the name of the deployment. e.g. demo.
[a-z0-9]([-a-z0-9]*[a-z0-9])?
port (Union[Unset, int]): Port is the port of the deployment.
secret (Union[Unset, List[str]]): Secret is the secret of the deployment.
server_resource (Union[Unset, ServerResource]):
spot_instance (Union[Unset, bool]):
startup_duration (Union[Unset, int]): StartupDuration is the startup timeout.
target_load (Union[Unset, int]): TargetLoad is the target load of the deployment. (inflight requests per
replica)
template_id (Union[Unset, str]): TemplateID is the template ID of the deployment.
zero_duration (Union[Unset, int]): ZeroDuration is the idle timeout before scaling to zero.
"""
cluster: Union[Unset, str] = UNSET
command: Union[Unset, str] = UNSET
deployment_resource: Union[Unset, "DeploymentResource"] = UNSET
deployment_source: Union[Unset, "DeploymentSource"] = UNSET
env_vars: Union[Unset, "DeploymentSpecEnvVars"] = UNSET
framework: Union[Unset, FrameworkType] = UNSET
http_probe_path: Union[Unset, str] = UNSET
id: Union[Unset, str] = UNSET
image_config: Union[Unset, "ImageConfig"] = UNSET
max_replicas: Union[Unset, int] = UNSET
min_replicas: Union[Unset, int] = UNSET
name: Union[Unset, str] = UNSET
port: Union[Unset, int] = UNSET
secret: Union[Unset, List[str]] = UNSET
server_resource: Union[Unset, ServerResource] = UNSET
spot_instance: Union[Unset, bool] = UNSET
startup_duration: Union[Unset, int] = UNSET
target_load: Union[Unset, int] = UNSET
template_id: Union[Unset, str] = UNSET
zero_duration: Union[Unset, int] = UNSET
additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict)
def to_dict(self) -> Dict[str, Any]:
cluster = self.cluster
command = self.command
deployment_resource: Union[Unset, Dict[str, Any]] = UNSET
if not isinstance(self.deployment_resource, Unset):
deployment_resource = self.deployment_resource.to_dict()
deployment_source: Union[Unset, Dict[str, Any]] = UNSET
if not isinstance(self.deployment_source, Unset):
deployment_source = self.deployment_source.to_dict()
env_vars: Union[Unset, Dict[str, Any]] = UNSET
if not isinstance(self.env_vars, Unset):
env_vars = self.env_vars.to_dict()
framework: Union[Unset, str] = UNSET
if not isinstance(self.framework, Unset):
framework = self.framework.value
http_probe_path = self.http_probe_path
id = self.id
image_config: Union[Unset, Dict[str, Any]] = UNSET
if not isinstance(self.image_config, Unset):
image_config = self.image_config.to_dict()
max_replicas = self.max_replicas
min_replicas = self.min_replicas
name = self.name
port = self.port
secret: Union[Unset, List[str]] = UNSET
if not isinstance(self.secret, Unset):
secret = self.secret
server_resource: Union[Unset, str] = UNSET
if not isinstance(self.server_resource, Unset):
server_resource = self.server_resource.value
spot_instance = self.spot_instance
startup_duration = self.startup_duration
target_load = self.target_load
template_id = self.template_id
zero_duration = self.zero_duration
field_dict: Dict[str, Any] = {}
field_dict.update(self.additional_properties)
field_dict.update({})
if cluster is not UNSET:
field_dict["cluster"] = cluster
if command is not UNSET:
field_dict["command"] = command
if deployment_resource is not UNSET:
field_dict["deployment_resource"] = deployment_resource
if deployment_source is not UNSET:
field_dict["deployment_source"] = deployment_source
if env_vars is not UNSET:
field_dict["env_vars"] = env_vars
if framework is not UNSET:
field_dict["framework"] = framework
if http_probe_path is not UNSET:
field_dict["http_probe_path"] = http_probe_path
if id is not UNSET:
field_dict["id"] = id
if image_config is not UNSET:
field_dict["image_config"] = image_config
if max_replicas is not UNSET:
field_dict["max_replicas"] = max_replicas
if min_replicas is not UNSET:
field_dict["min_replicas"] = min_replicas
if name is not UNSET:
field_dict["name"] = name
if port is not UNSET:
field_dict["port"] = port
if secret is not UNSET:
field_dict["secret"] = secret
if server_resource is not UNSET:
field_dict["server_resource"] = server_resource
if spot_instance is not UNSET:
field_dict["spot_instance"] = spot_instance
if startup_duration is not UNSET:
field_dict["startup_duration"] = startup_duration
if target_load is not UNSET:
field_dict["target_load"] = target_load
if template_id is not UNSET:
field_dict["templateId"] = template_id
if zero_duration is not UNSET:
field_dict["zero_duration"] = zero_duration
return field_dict
@classmethod
def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
from ..models.deployment_resource import DeploymentResource
from ..models.deployment_source import DeploymentSource
from ..models.deployment_spec_env_vars import DeploymentSpecEnvVars
from ..models.image_config import ImageConfig
d = src_dict.copy()
cluster = d.pop("cluster", UNSET)
command = d.pop("command", UNSET)
_deployment_resource = d.pop("deployment_resource", UNSET)
deployment_resource: Union[Unset, DeploymentResource]
if isinstance(_deployment_resource, Unset):
deployment_resource = UNSET
else:
deployment_resource = DeploymentResource.from_dict(_deployment_resource)
_deployment_source = d.pop("deployment_source", UNSET)
deployment_source: Union[Unset, DeploymentSource]
if isinstance(_deployment_source, Unset):
deployment_source = UNSET
else:
deployment_source = DeploymentSource.from_dict(_deployment_source)
_env_vars = d.pop("env_vars", UNSET)
env_vars: Union[Unset, DeploymentSpecEnvVars]
if isinstance(_env_vars, Unset):
env_vars = UNSET
else:
env_vars = DeploymentSpecEnvVars.from_dict(_env_vars)
_framework = d.pop("framework", UNSET)
framework: Union[Unset, FrameworkType]
if isinstance(_framework, Unset):
framework = UNSET
else:
framework = FrameworkType(_framework)
http_probe_path = d.pop("http_probe_path", UNSET)
id = d.pop("id", UNSET)
_image_config = d.pop("image_config", UNSET)
image_config: Union[Unset, ImageConfig]
if isinstance(_image_config, Unset):
image_config = UNSET
else:
image_config = ImageConfig.from_dict(_image_config)
max_replicas = d.pop("max_replicas", UNSET)
min_replicas = d.pop("min_replicas", UNSET)
name = d.pop("name", UNSET)
port = d.pop("port", UNSET)
secret = cast(List[str], d.pop("secret", UNSET))
_server_resource = d.pop("server_resource", UNSET)
server_resource: Union[Unset, ServerResource]
if isinstance(_server_resource, Unset):
server_resource = UNSET
else:
server_resource = ServerResource(_server_resource)
spot_instance = d.pop("spot_instance", UNSET)
startup_duration = d.pop("startup_duration", UNSET)
target_load = d.pop("target_load", UNSET)
template_id = d.pop("templateId", UNSET)
zero_duration = d.pop("zero_duration", UNSET)
deployment_spec = cls(
cluster=cluster,
command=command,
deployment_resource=deployment_resource,
deployment_source=deployment_source,
env_vars=env_vars,
framework=framework,
http_probe_path=http_probe_path,
id=id,
image_config=image_config,
max_replicas=max_replicas,
min_replicas=min_replicas,
name=name,
port=port,
secret=secret,
server_resource=server_resource,
spot_instance=spot_instance,
startup_duration=startup_duration,
target_load=target_load,
template_id=template_id,
zero_duration=zero_duration,
)
deployment_spec.additional_properties = d
return deployment_spec
@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