pai-dlc-20201203/alibabacloud_pai_dlc20201203/models.py (7,244 lines of code) (raw):

# -*- coding: utf-8 -*- # This file is auto-generated, don't edit it. Thanks. from Tea.model import TeaModel from typing import Dict, List, Any class AIMasterMessage(TeaModel): def __init__( self, extended: str = None, job_restart_count: int = None, message_content: str = None, message_event: str = None, message_version: int = None, restart_type: str = None, ): self.extended = extended self.job_restart_count = job_restart_count self.message_content = message_content self.message_event = message_event self.message_version = message_version self.restart_type = restart_type def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.extended is not None: result['Extended'] = self.extended if self.job_restart_count is not None: result['JobRestartCount'] = self.job_restart_count if self.message_content is not None: result['MessageContent'] = self.message_content if self.message_event is not None: result['MessageEvent'] = self.message_event if self.message_version is not None: result['MessageVersion'] = self.message_version if self.restart_type is not None: result['RestartType'] = self.restart_type return result def from_map(self, m: dict = None): m = m or dict() if m.get('Extended') is not None: self.extended = m.get('Extended') if m.get('JobRestartCount') is not None: self.job_restart_count = m.get('JobRestartCount') if m.get('MessageContent') is not None: self.message_content = m.get('MessageContent') if m.get('MessageEvent') is not None: self.message_event = m.get('MessageEvent') if m.get('MessageVersion') is not None: self.message_version = m.get('MessageVersion') if m.get('RestartType') is not None: self.restart_type = m.get('RestartType') return self class AliyunAccounts(TeaModel): def __init__( self, aliyun_uid: str = None, employee_id: str = None, gmt_create_time: str = None, gmt_modify_time: str = None, ): self.aliyun_uid = aliyun_uid self.employee_id = employee_id self.gmt_create_time = gmt_create_time self.gmt_modify_time = gmt_modify_time def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.aliyun_uid is not None: result['AliyunUid'] = self.aliyun_uid if self.employee_id is not None: result['EmployeeId'] = self.employee_id if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_modify_time is not None: result['GmtModifyTime'] = self.gmt_modify_time return result def from_map(self, m: dict = None): m = m or dict() if m.get('AliyunUid') is not None: self.aliyun_uid = m.get('AliyunUid') if m.get('EmployeeId') is not None: self.employee_id = m.get('EmployeeId') if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtModifyTime') is not None: self.gmt_modify_time = m.get('GmtModifyTime') return self class AssignNodeSpec(TeaModel): def __init__( self, anti_affinity_node_names: str = None, enable_assign_node: bool = None, node_names: str = None, ): self.anti_affinity_node_names = anti_affinity_node_names self.enable_assign_node = enable_assign_node self.node_names = node_names def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.anti_affinity_node_names is not None: result['AntiAffinityNodeNames'] = self.anti_affinity_node_names if self.enable_assign_node is not None: result['EnableAssignNode'] = self.enable_assign_node if self.node_names is not None: result['NodeNames'] = self.node_names return result def from_map(self, m: dict = None): m = m or dict() if m.get('AntiAffinityNodeNames') is not None: self.anti_affinity_node_names = m.get('AntiAffinityNodeNames') if m.get('EnableAssignNode') is not None: self.enable_assign_node = m.get('EnableAssignNode') if m.get('NodeNames') is not None: self.node_names = m.get('NodeNames') return self class AssumeUserInfo(TeaModel): def __init__( self, access_key_id: str = None, id: str = None, security_token: str = None, type: str = None, ): self.access_key_id = access_key_id self.id = id self.security_token = security_token self.type = type def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.access_key_id is not None: result['AccessKeyId'] = self.access_key_id if self.id is not None: result['Id'] = self.id if self.security_token is not None: result['SecurityToken'] = self.security_token if self.type is not None: result['Type'] = self.type return result def from_map(self, m: dict = None): m = m or dict() if m.get('AccessKeyId') is not None: self.access_key_id = m.get('AccessKeyId') if m.get('Id') is not None: self.id = m.get('Id') if m.get('SecurityToken') is not None: self.security_token = m.get('SecurityToken') if m.get('Type') is not None: self.type = m.get('Type') return self class CodeSourceItem(TeaModel): def __init__( self, code_branch: str = None, code_commit: str = None, code_repo: str = None, code_repo_access_token: str = None, code_repo_user_name: str = None, code_source_id: str = None, description: str = None, display_name: str = None, gmt_create_time: str = None, gmt_modify_time: str = None, user_id: str = None, ): self.code_branch = code_branch self.code_commit = code_commit self.code_repo = code_repo self.code_repo_access_token = code_repo_access_token self.code_repo_user_name = code_repo_user_name self.code_source_id = code_source_id self.description = description self.display_name = display_name self.gmt_create_time = gmt_create_time self.gmt_modify_time = gmt_modify_time self.user_id = user_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code_branch is not None: result['CodeBranch'] = self.code_branch if self.code_commit is not None: result['CodeCommit'] = self.code_commit if self.code_repo is not None: result['CodeRepo'] = self.code_repo if self.code_repo_access_token is not None: result['CodeRepoAccessToken'] = self.code_repo_access_token if self.code_repo_user_name is not None: result['CodeRepoUserName'] = self.code_repo_user_name if self.code_source_id is not None: result['CodeSourceId'] = self.code_source_id if self.description is not None: result['Description'] = self.description if self.display_name is not None: result['DisplayName'] = self.display_name if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_modify_time is not None: result['GmtModifyTime'] = self.gmt_modify_time if self.user_id is not None: result['UserId'] = self.user_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('CodeBranch') is not None: self.code_branch = m.get('CodeBranch') if m.get('CodeCommit') is not None: self.code_commit = m.get('CodeCommit') if m.get('CodeRepo') is not None: self.code_repo = m.get('CodeRepo') if m.get('CodeRepoAccessToken') is not None: self.code_repo_access_token = m.get('CodeRepoAccessToken') if m.get('CodeRepoUserName') is not None: self.code_repo_user_name = m.get('CodeRepoUserName') if m.get('CodeSourceId') is not None: self.code_source_id = m.get('CodeSourceId') if m.get('Description') is not None: self.description = m.get('Description') if m.get('DisplayName') is not None: self.display_name = m.get('DisplayName') if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtModifyTime') is not None: self.gmt_modify_time = m.get('GmtModifyTime') if m.get('UserId') is not None: self.user_id = m.get('UserId') return self class EnvVar(TeaModel): def __init__( self, name: str = None, value: str = None, ): self.name = name self.value = value def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.name is not None: result['Name'] = self.name if self.value is not None: result['Value'] = self.value return result def from_map(self, m: dict = None): m = m or dict() if m.get('Name') is not None: self.name = m.get('Name') if m.get('Value') is not None: self.value = m.get('Value') return self class ResourceRequirements(TeaModel): def __init__( self, limits: Dict[str, str] = None, requests: Dict[str, str] = None, ): self.limits = limits self.requests = requests def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.limits is not None: result['Limits'] = self.limits if self.requests is not None: result['Requests'] = self.requests return result def from_map(self, m: dict = None): m = m or dict() if m.get('Limits') is not None: self.limits = m.get('Limits') if m.get('Requests') is not None: self.requests = m.get('Requests') return self class ContainerSpec(TeaModel): def __init__( self, args: List[str] = None, command: List[str] = None, env: List[EnvVar] = None, image: str = None, name: str = None, resources: ResourceRequirements = None, working_dir: str = None, ): self.args = args self.command = command self.env = env self.image = image self.name = name self.resources = resources self.working_dir = working_dir def validate(self): if self.env: for k in self.env: if k: k.validate() if self.resources: self.resources.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.args is not None: result['Args'] = self.args if self.command is not None: result['Command'] = self.command result['Env'] = [] if self.env is not None: for k in self.env: result['Env'].append(k.to_map() if k else None) if self.image is not None: result['Image'] = self.image if self.name is not None: result['Name'] = self.name if self.resources is not None: result['Resources'] = self.resources.to_map() if self.working_dir is not None: result['WorkingDir'] = self.working_dir return result def from_map(self, m: dict = None): m = m or dict() if m.get('Args') is not None: self.args = m.get('Args') if m.get('Command') is not None: self.command = m.get('Command') self.env = [] if m.get('Env') is not None: for k in m.get('Env'): temp_model = EnvVar() self.env.append(temp_model.from_map(k)) if m.get('Image') is not None: self.image = m.get('Image') if m.get('Name') is not None: self.name = m.get('Name') if m.get('Resources') is not None: temp_model = ResourceRequirements() self.resources = temp_model.from_map(m['Resources']) if m.get('WorkingDir') is not None: self.working_dir = m.get('WorkingDir') return self class CredentialRole(TeaModel): def __init__( self, assume_role_for: str = None, assume_user_info: AssumeUserInfo = None, policy: str = None, role_arn: str = None, role_type: str = None, ): self.assume_role_for = assume_role_for self.assume_user_info = assume_user_info self.policy = policy self.role_arn = role_arn self.role_type = role_type def validate(self): if self.assume_user_info: self.assume_user_info.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.assume_role_for is not None: result['AssumeRoleFor'] = self.assume_role_for if self.assume_user_info is not None: result['AssumeUserInfo'] = self.assume_user_info.to_map() if self.policy is not None: result['Policy'] = self.policy if self.role_arn is not None: result['RoleArn'] = self.role_arn if self.role_type is not None: result['RoleType'] = self.role_type return result def from_map(self, m: dict = None): m = m or dict() if m.get('AssumeRoleFor') is not None: self.assume_role_for = m.get('AssumeRoleFor') if m.get('AssumeUserInfo') is not None: temp_model = AssumeUserInfo() self.assume_user_info = temp_model.from_map(m['AssumeUserInfo']) if m.get('Policy') is not None: self.policy = m.get('Policy') if m.get('RoleArn') is not None: self.role_arn = m.get('RoleArn') if m.get('RoleType') is not None: self.role_type = m.get('RoleType') return self class CredentialConfigItem(TeaModel): def __init__( self, key: str = None, roles: List[CredentialRole] = None, type: str = None, ): self.key = key self.roles = roles self.type = type def validate(self): if self.roles: for k in self.roles: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.key is not None: result['Key'] = self.key result['Roles'] = [] if self.roles is not None: for k in self.roles: result['Roles'].append(k.to_map() if k else None) if self.type is not None: result['Type'] = self.type return result def from_map(self, m: dict = None): m = m or dict() if m.get('Key') is not None: self.key = m.get('Key') self.roles = [] if m.get('Roles') is not None: for k in m.get('Roles'): temp_model = CredentialRole() self.roles.append(temp_model.from_map(k)) if m.get('Type') is not None: self.type = m.get('Type') return self class CredentialConfig(TeaModel): def __init__( self, aliyun_env_role_key: str = None, credential_config_items: List[CredentialConfigItem] = None, enable_credential_inject: bool = None, ): self.aliyun_env_role_key = aliyun_env_role_key self.credential_config_items = credential_config_items self.enable_credential_inject = enable_credential_inject def validate(self): if self.credential_config_items: for k in self.credential_config_items: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.aliyun_env_role_key is not None: result['AliyunEnvRoleKey'] = self.aliyun_env_role_key result['CredentialConfigItems'] = [] if self.credential_config_items is not None: for k in self.credential_config_items: result['CredentialConfigItems'].append(k.to_map() if k else None) if self.enable_credential_inject is not None: result['EnableCredentialInject'] = self.enable_credential_inject return result def from_map(self, m: dict = None): m = m or dict() if m.get('AliyunEnvRoleKey') is not None: self.aliyun_env_role_key = m.get('AliyunEnvRoleKey') self.credential_config_items = [] if m.get('CredentialConfigItems') is not None: for k in m.get('CredentialConfigItems'): temp_model = CredentialConfigItem() self.credential_config_items.append(temp_model.from_map(k)) if m.get('EnableCredentialInject') is not None: self.enable_credential_inject = m.get('EnableCredentialInject') return self class DataSourceItem(TeaModel): def __init__( self, data_source_id: str = None, data_source_type: str = None, description: str = None, display_name: str = None, endpoint: str = None, file_system_id: str = None, gmt_create_time: str = None, gmt_modify_time: str = None, mount_path: str = None, options: str = None, path: str = None, user_id: str = None, ): self.data_source_id = data_source_id self.data_source_type = data_source_type self.description = description self.display_name = display_name self.endpoint = endpoint self.file_system_id = file_system_id self.gmt_create_time = gmt_create_time self.gmt_modify_time = gmt_modify_time self.mount_path = mount_path self.options = options self.path = path self.user_id = user_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.data_source_id is not None: result['DataSourceId'] = self.data_source_id if self.data_source_type is not None: result['DataSourceType'] = self.data_source_type if self.description is not None: result['Description'] = self.description if self.display_name is not None: result['DisplayName'] = self.display_name if self.endpoint is not None: result['Endpoint'] = self.endpoint if self.file_system_id is not None: result['FileSystemId'] = self.file_system_id if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_modify_time is not None: result['GmtModifyTime'] = self.gmt_modify_time if self.mount_path is not None: result['MountPath'] = self.mount_path if self.options is not None: result['Options'] = self.options if self.path is not None: result['Path'] = self.path if self.user_id is not None: result['UserId'] = self.user_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('DataSourceId') is not None: self.data_source_id = m.get('DataSourceId') if m.get('DataSourceType') is not None: self.data_source_type = m.get('DataSourceType') if m.get('Description') is not None: self.description = m.get('Description') if m.get('DisplayName') is not None: self.display_name = m.get('DisplayName') if m.get('Endpoint') is not None: self.endpoint = m.get('Endpoint') if m.get('FileSystemId') is not None: self.file_system_id = m.get('FileSystemId') if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtModifyTime') is not None: self.gmt_modify_time = m.get('GmtModifyTime') if m.get('MountPath') is not None: self.mount_path = m.get('MountPath') if m.get('Options') is not None: self.options = m.get('Options') if m.get('Path') is not None: self.path = m.get('Path') if m.get('UserId') is not None: self.user_id = m.get('UserId') return self class DebuggerConfig(TeaModel): def __init__( self, content: str = None, debugger_config_id: str = None, description: str = None, display_name: str = None, gmt_create_time: str = None, gmt_modify_time: str = None, ): self.content = content self.debugger_config_id = debugger_config_id self.description = description self.display_name = display_name self.gmt_create_time = gmt_create_time self.gmt_modify_time = gmt_modify_time def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.content is not None: result['Content'] = self.content if self.debugger_config_id is not None: result['DebuggerConfigId'] = self.debugger_config_id if self.description is not None: result['Description'] = self.description if self.display_name is not None: result['DisplayName'] = self.display_name if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_modify_time is not None: result['GmtModifyTime'] = self.gmt_modify_time return result def from_map(self, m: dict = None): m = m or dict() if m.get('Content') is not None: self.content = m.get('Content') if m.get('DebuggerConfigId') is not None: self.debugger_config_id = m.get('DebuggerConfigId') if m.get('Description') is not None: self.description = m.get('Description') if m.get('DisplayName') is not None: self.display_name = m.get('DisplayName') if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtModifyTime') is not None: self.gmt_modify_time = m.get('GmtModifyTime') return self class DebuggerJob(TeaModel): def __init__( self, debugger_job_id: str = None, display_name: str = None, duration: str = None, gmt_create_time: str = None, gmt_failed_time: str = None, gmt_finish_time: str = None, gmt_running_time: str = None, gmt_stopped_time: str = None, gmt_submitted_time: str = None, gmt_succeed_time: str = None, status: str = None, user_id: str = None, workspace_id: str = None, workspace_name: str = None, ): self.debugger_job_id = debugger_job_id self.display_name = display_name self.duration = duration self.gmt_create_time = gmt_create_time self.gmt_failed_time = gmt_failed_time self.gmt_finish_time = gmt_finish_time self.gmt_running_time = gmt_running_time self.gmt_stopped_time = gmt_stopped_time self.gmt_submitted_time = gmt_submitted_time self.gmt_succeed_time = gmt_succeed_time self.status = status self.user_id = user_id self.workspace_id = workspace_id self.workspace_name = workspace_name def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.debugger_job_id is not None: result['DebuggerJobId'] = self.debugger_job_id if self.display_name is not None: result['DisplayName'] = self.display_name if self.duration is not None: result['Duration'] = self.duration if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_failed_time is not None: result['GmtFailedTime'] = self.gmt_failed_time if self.gmt_finish_time is not None: result['GmtFinishTime'] = self.gmt_finish_time if self.gmt_running_time is not None: result['GmtRunningTime'] = self.gmt_running_time if self.gmt_stopped_time is not None: result['GmtStoppedTime'] = self.gmt_stopped_time if self.gmt_submitted_time is not None: result['GmtSubmittedTime'] = self.gmt_submitted_time if self.gmt_succeed_time is not None: result['GmtSucceedTime'] = self.gmt_succeed_time if self.status is not None: result['Status'] = self.status if self.user_id is not None: result['UserId'] = self.user_id if self.workspace_id is not None: result['WorkspaceId'] = self.workspace_id if self.workspace_name is not None: result['WorkspaceName'] = self.workspace_name return result def from_map(self, m: dict = None): m = m or dict() if m.get('DebuggerJobId') is not None: self.debugger_job_id = m.get('DebuggerJobId') if m.get('DisplayName') is not None: self.display_name = m.get('DisplayName') if m.get('Duration') is not None: self.duration = m.get('Duration') if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtFailedTime') is not None: self.gmt_failed_time = m.get('GmtFailedTime') if m.get('GmtFinishTime') is not None: self.gmt_finish_time = m.get('GmtFinishTime') if m.get('GmtRunningTime') is not None: self.gmt_running_time = m.get('GmtRunningTime') if m.get('GmtStoppedTime') is not None: self.gmt_stopped_time = m.get('GmtStoppedTime') if m.get('GmtSubmittedTime') is not None: self.gmt_submitted_time = m.get('GmtSubmittedTime') if m.get('GmtSucceedTime') is not None: self.gmt_succeed_time = m.get('GmtSucceedTime') if m.get('Status') is not None: self.status = m.get('Status') if m.get('UserId') is not None: self.user_id = m.get('UserId') if m.get('WorkspaceId') is not None: self.workspace_id = m.get('WorkspaceId') if m.get('WorkspaceName') is not None: self.workspace_name = m.get('WorkspaceName') return self class DebuggerJobIssue(TeaModel): def __init__( self, debugger_job_issue: str = None, gmt_create_time: str = None, job_debugger_issue_id: str = None, job_id: str = None, reason_code: str = None, reason_message: str = None, rule_name: str = None, ): self.debugger_job_issue = debugger_job_issue self.gmt_create_time = gmt_create_time self.job_debugger_issue_id = job_debugger_issue_id self.job_id = job_id self.reason_code = reason_code self.reason_message = reason_message self.rule_name = rule_name def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.debugger_job_issue is not None: result['DebuggerJobIssue'] = self.debugger_job_issue if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.job_debugger_issue_id is not None: result['JobDebuggerIssueId'] = self.job_debugger_issue_id if self.job_id is not None: result['JobId'] = self.job_id if self.reason_code is not None: result['ReasonCode'] = self.reason_code if self.reason_message is not None: result['ReasonMessage'] = self.reason_message if self.rule_name is not None: result['RuleName'] = self.rule_name return result def from_map(self, m: dict = None): m = m or dict() if m.get('DebuggerJobIssue') is not None: self.debugger_job_issue = m.get('DebuggerJobIssue') if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('JobDebuggerIssueId') is not None: self.job_debugger_issue_id = m.get('JobDebuggerIssueId') if m.get('JobId') is not None: self.job_id = m.get('JobId') if m.get('ReasonCode') is not None: self.reason_code = m.get('ReasonCode') if m.get('ReasonMessage') is not None: self.reason_message = m.get('ReasonMessage') if m.get('RuleName') is not None: self.rule_name = m.get('RuleName') return self class DebuggerResult(TeaModel): def __init__( self, debugger_config_content: str = None, debugger_job_issues: str = None, debugger_job_status: str = None, debugger_report_url: str = None, job_display_name: str = None, job_id: str = None, job_user_id: str = None, ): self.debugger_config_content = debugger_config_content self.debugger_job_issues = debugger_job_issues self.debugger_job_status = debugger_job_status self.debugger_report_url = debugger_report_url self.job_display_name = job_display_name self.job_id = job_id self.job_user_id = job_user_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.debugger_config_content is not None: result['DebuggerConfigContent'] = self.debugger_config_content if self.debugger_job_issues is not None: result['DebuggerJobIssues'] = self.debugger_job_issues if self.debugger_job_status is not None: result['DebuggerJobStatus'] = self.debugger_job_status if self.debugger_report_url is not None: result['DebuggerReportURL'] = self.debugger_report_url if self.job_display_name is not None: result['JobDisplayName'] = self.job_display_name if self.job_id is not None: result['JobId'] = self.job_id if self.job_user_id is not None: result['JobUserId'] = self.job_user_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('DebuggerConfigContent') is not None: self.debugger_config_content = m.get('DebuggerConfigContent') if m.get('DebuggerJobIssues') is not None: self.debugger_job_issues = m.get('DebuggerJobIssues') if m.get('DebuggerJobStatus') is not None: self.debugger_job_status = m.get('DebuggerJobStatus') if m.get('DebuggerReportURL') is not None: self.debugger_report_url = m.get('DebuggerReportURL') if m.get('JobDisplayName') is not None: self.job_display_name = m.get('JobDisplayName') if m.get('JobId') is not None: self.job_id = m.get('JobId') if m.get('JobUserId') is not None: self.job_user_id = m.get('JobUserId') return self class EcsSpec(TeaModel): def __init__( self, accelerator_type: str = None, cpu: int = None, default_gpudriver: str = None, gpu: int = None, gpu_memory: int = None, gpu_type: str = None, instance_type: str = None, is_available: bool = None, memory: int = None, non_protect_spot_discount: float = None, payment_types: List[str] = None, resource_type: str = None, spot_stock_status: str = None, supported_gpudrivers: List[str] = None, ): self.accelerator_type = accelerator_type self.cpu = cpu self.default_gpudriver = default_gpudriver self.gpu = gpu self.gpu_memory = gpu_memory self.gpu_type = gpu_type self.instance_type = instance_type self.is_available = is_available self.memory = memory self.non_protect_spot_discount = non_protect_spot_discount self.payment_types = payment_types self.resource_type = resource_type self.spot_stock_status = spot_stock_status self.supported_gpudrivers = supported_gpudrivers def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.accelerator_type is not None: result['AcceleratorType'] = self.accelerator_type if self.cpu is not None: result['Cpu'] = self.cpu if self.default_gpudriver is not None: result['DefaultGPUDriver'] = self.default_gpudriver if self.gpu is not None: result['Gpu'] = self.gpu if self.gpu_memory is not None: result['GpuMemory'] = self.gpu_memory if self.gpu_type is not None: result['GpuType'] = self.gpu_type if self.instance_type is not None: result['InstanceType'] = self.instance_type if self.is_available is not None: result['IsAvailable'] = self.is_available if self.memory is not None: result['Memory'] = self.memory if self.non_protect_spot_discount is not None: result['NonProtectSpotDiscount'] = self.non_protect_spot_discount if self.payment_types is not None: result['PaymentTypes'] = self.payment_types if self.resource_type is not None: result['ResourceType'] = self.resource_type if self.spot_stock_status is not None: result['SpotStockStatus'] = self.spot_stock_status if self.supported_gpudrivers is not None: result['SupportedGPUDrivers'] = self.supported_gpudrivers return result def from_map(self, m: dict = None): m = m or dict() if m.get('AcceleratorType') is not None: self.accelerator_type = m.get('AcceleratorType') if m.get('Cpu') is not None: self.cpu = m.get('Cpu') if m.get('DefaultGPUDriver') is not None: self.default_gpudriver = m.get('DefaultGPUDriver') if m.get('Gpu') is not None: self.gpu = m.get('Gpu') if m.get('GpuMemory') is not None: self.gpu_memory = m.get('GpuMemory') if m.get('GpuType') is not None: self.gpu_type = m.get('GpuType') if m.get('InstanceType') is not None: self.instance_type = m.get('InstanceType') if m.get('IsAvailable') is not None: self.is_available = m.get('IsAvailable') if m.get('Memory') is not None: self.memory = m.get('Memory') if m.get('NonProtectSpotDiscount') is not None: self.non_protect_spot_discount = m.get('NonProtectSpotDiscount') if m.get('PaymentTypes') is not None: self.payment_types = m.get('PaymentTypes') if m.get('ResourceType') is not None: self.resource_type = m.get('ResourceType') if m.get('SpotStockStatus') is not None: self.spot_stock_status = m.get('SpotStockStatus') if m.get('SupportedGPUDrivers') is not None: self.supported_gpudrivers = m.get('SupportedGPUDrivers') return self class EventInfo(TeaModel): def __init__( self, content: str = None, id: str = None, pod_id: str = None, pod_uid: str = None, time: str = None, ): self.content = content self.id = id self.pod_id = pod_id self.pod_uid = pod_uid self.time = time def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.content is not None: result['Content'] = self.content if self.id is not None: result['Id'] = self.id if self.pod_id is not None: result['PodId'] = self.pod_id if self.pod_uid is not None: result['PodUid'] = self.pod_uid if self.time is not None: result['Time'] = self.time return result def from_map(self, m: dict = None): m = m or dict() if m.get('Content') is not None: self.content = m.get('Content') if m.get('Id') is not None: self.id = m.get('Id') if m.get('PodId') is not None: self.pod_id = m.get('PodId') if m.get('PodUid') is not None: self.pod_uid = m.get('PodUid') if m.get('Time') is not None: self.time = m.get('Time') return self class LifecyclePostStartExec(TeaModel): def __init__( self, command: List[str] = None, ): self.command = command def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.command is not None: result['Command'] = self.command return result def from_map(self, m: dict = None): m = m or dict() if m.get('Command') is not None: self.command = m.get('Command') return self class LifecyclePostStart(TeaModel): def __init__( self, exec: LifecyclePostStartExec = None, ): self.exec = exec def validate(self): if self.exec: self.exec.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.exec is not None: result['Exec'] = self.exec.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('Exec') is not None: temp_model = LifecyclePostStartExec() self.exec = temp_model.from_map(m['Exec']) return self class LifecyclePreStopExec(TeaModel): def __init__( self, command: List[str] = None, ): self.command = command def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.command is not None: result['Command'] = self.command return result def from_map(self, m: dict = None): m = m or dict() if m.get('Command') is not None: self.command = m.get('Command') return self class LifecyclePreStop(TeaModel): def __init__( self, exec: LifecyclePreStopExec = None, ): self.exec = exec def validate(self): if self.exec: self.exec.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.exec is not None: result['Exec'] = self.exec.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('Exec') is not None: temp_model = LifecyclePreStopExec() self.exec = temp_model.from_map(m['Exec']) return self class Lifecycle(TeaModel): def __init__( self, post_start: LifecyclePostStart = None, pre_stop: LifecyclePreStop = None, ): self.post_start = post_start self.pre_stop = pre_stop def validate(self): if self.post_start: self.post_start.validate() if self.pre_stop: self.pre_stop.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.post_start is not None: result['PostStart'] = self.post_start.to_map() if self.pre_stop is not None: result['PreStop'] = self.pre_stop.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('PostStart') is not None: temp_model = LifecyclePostStart() self.post_start = temp_model.from_map(m['PostStart']) if m.get('PreStop') is not None: temp_model = LifecyclePreStop() self.pre_stop = temp_model.from_map(m['PreStop']) return self class ExtraPodSpec(TeaModel): def __init__( self, init_containers: List[ContainerSpec] = None, lifecycle: Lifecycle = None, pod_annotations: Dict[str, str] = None, pod_labels: Dict[str, str] = None, shared_volume_mount_paths: List[str] = None, side_car_containers: List[ContainerSpec] = None, ): self.init_containers = init_containers self.lifecycle = lifecycle self.pod_annotations = pod_annotations self.pod_labels = pod_labels self.shared_volume_mount_paths = shared_volume_mount_paths self.side_car_containers = side_car_containers def validate(self): if self.init_containers: for k in self.init_containers: if k: k.validate() if self.lifecycle: self.lifecycle.validate() if self.side_car_containers: for k in self.side_car_containers: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() result['InitContainers'] = [] if self.init_containers is not None: for k in self.init_containers: result['InitContainers'].append(k.to_map() if k else None) if self.lifecycle is not None: result['Lifecycle'] = self.lifecycle.to_map() if self.pod_annotations is not None: result['PodAnnotations'] = self.pod_annotations if self.pod_labels is not None: result['PodLabels'] = self.pod_labels if self.shared_volume_mount_paths is not None: result['SharedVolumeMountPaths'] = self.shared_volume_mount_paths result['SideCarContainers'] = [] if self.side_car_containers is not None: for k in self.side_car_containers: result['SideCarContainers'].append(k.to_map() if k else None) return result def from_map(self, m: dict = None): m = m or dict() self.init_containers = [] if m.get('InitContainers') is not None: for k in m.get('InitContainers'): temp_model = ContainerSpec() self.init_containers.append(temp_model.from_map(k)) if m.get('Lifecycle') is not None: temp_model = Lifecycle() self.lifecycle = temp_model.from_map(m['Lifecycle']) if m.get('PodAnnotations') is not None: self.pod_annotations = m.get('PodAnnotations') if m.get('PodLabels') is not None: self.pod_labels = m.get('PodLabels') if m.get('SharedVolumeMountPaths') is not None: self.shared_volume_mount_paths = m.get('SharedVolumeMountPaths') self.side_car_containers = [] if m.get('SideCarContainers') is not None: for k in m.get('SideCarContainers'): temp_model = ContainerSpec() self.side_car_containers.append(temp_model.from_map(k)) return self class FreeResourceClusterControlItem(TeaModel): def __init__( self, cluster_id: str = None, cluster_name: str = None, cross_clusters: bool = None, enable_free_resource: bool = None, free_resource_cluster_control_id: str = None, gmt_create_time: str = None, gmt_modify_time: str = None, region_id: str = None, ): self.cluster_id = cluster_id self.cluster_name = cluster_name self.cross_clusters = cross_clusters self.enable_free_resource = enable_free_resource self.free_resource_cluster_control_id = free_resource_cluster_control_id self.gmt_create_time = gmt_create_time self.gmt_modify_time = gmt_modify_time self.region_id = region_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.cluster_id is not None: result['ClusterID'] = self.cluster_id if self.cluster_name is not None: result['ClusterName'] = self.cluster_name if self.cross_clusters is not None: result['CrossClusters'] = self.cross_clusters if self.enable_free_resource is not None: result['EnableFreeResource'] = self.enable_free_resource if self.free_resource_cluster_control_id is not None: result['FreeResourceClusterControlId'] = self.free_resource_cluster_control_id if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_modify_time is not None: result['GmtModifyTime'] = self.gmt_modify_time if self.region_id is not None: result['RegionID'] = self.region_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('ClusterID') is not None: self.cluster_id = m.get('ClusterID') if m.get('ClusterName') is not None: self.cluster_name = m.get('ClusterName') if m.get('CrossClusters') is not None: self.cross_clusters = m.get('CrossClusters') if m.get('EnableFreeResource') is not None: self.enable_free_resource = m.get('EnableFreeResource') if m.get('FreeResourceClusterControlId') is not None: self.free_resource_cluster_control_id = m.get('FreeResourceClusterControlId') if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtModifyTime') is not None: self.gmt_modify_time = m.get('GmtModifyTime') if m.get('RegionID') is not None: self.region_id = m.get('RegionID') return self class FreeResourceDetail(TeaModel): def __init__( self, amount: int = None, resource_type: str = None, ): self.amount = amount self.resource_type = resource_type def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.amount is not None: result['Amount'] = self.amount if self.resource_type is not None: result['ResourceType'] = self.resource_type return result def from_map(self, m: dict = None): m = m or dict() if m.get('Amount') is not None: self.amount = m.get('Amount') if m.get('ResourceType') is not None: self.resource_type = m.get('ResourceType') return self class FreeResourceItem(TeaModel): def __init__( self, available_number: int = None, cluster_id: str = None, cluster_name: str = None, free_resource_id: str = None, gmt_create_time: str = None, gmt_modify_time: str = None, region_id: str = None, resource_type: str = None, ): self.available_number = available_number self.cluster_id = cluster_id self.cluster_name = cluster_name self.free_resource_id = free_resource_id self.gmt_create_time = gmt_create_time self.gmt_modify_time = gmt_modify_time self.region_id = region_id self.resource_type = resource_type def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.available_number is not None: result['AvailableNumber'] = self.available_number if self.cluster_id is not None: result['ClusterID'] = self.cluster_id if self.cluster_name is not None: result['ClusterName'] = self.cluster_name if self.free_resource_id is not None: result['FreeResourceId'] = self.free_resource_id if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_modify_time is not None: result['GmtModifyTime'] = self.gmt_modify_time if self.region_id is not None: result['RegionID'] = self.region_id if self.resource_type is not None: result['ResourceType'] = self.resource_type return result def from_map(self, m: dict = None): m = m or dict() if m.get('AvailableNumber') is not None: self.available_number = m.get('AvailableNumber') if m.get('ClusterID') is not None: self.cluster_id = m.get('ClusterID') if m.get('ClusterName') is not None: self.cluster_name = m.get('ClusterName') if m.get('FreeResourceId') is not None: self.free_resource_id = m.get('FreeResourceId') if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtModifyTime') is not None: self.gmt_modify_time = m.get('GmtModifyTime') if m.get('RegionID') is not None: self.region_id = m.get('RegionID') if m.get('ResourceType') is not None: self.resource_type = m.get('ResourceType') return self class GPUDetail(TeaModel): def __init__( self, gpu: str = None, gputype: str = None, gputype_full_name: str = None, ): self.gpu = gpu self.gputype = gputype self.gputype_full_name = gputype_full_name def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.gpu is not None: result['GPU'] = self.gpu if self.gputype is not None: result['GPUType'] = self.gputype if self.gputype_full_name is not None: result['GPUTypeFullName'] = self.gputype_full_name return result def from_map(self, m: dict = None): m = m or dict() if m.get('GPU') is not None: self.gpu = m.get('GPU') if m.get('GPUType') is not None: self.gputype = m.get('GPUType') if m.get('GPUTypeFullName') is not None: self.gputype_full_name = m.get('GPUTypeFullName') return self class ImageConfig(TeaModel): def __init__( self, auth: str = None, docker_registry: str = None, password: str = None, username: str = None, ): self.auth = auth self.docker_registry = docker_registry self.password = password self.username = username def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.auth is not None: result['Auth'] = self.auth if self.docker_registry is not None: result['DockerRegistry'] = self.docker_registry if self.password is not None: result['Password'] = self.password if self.username is not None: result['Username'] = self.username return result def from_map(self, m: dict = None): m = m or dict() if m.get('Auth') is not None: self.auth = m.get('Auth') if m.get('DockerRegistry') is not None: self.docker_registry = m.get('DockerRegistry') if m.get('Password') is not None: self.password = m.get('Password') if m.get('Username') is not None: self.username = m.get('Username') return self class ImageItem(TeaModel): def __init__( self, accelerator_type: str = None, author_id: str = None, framework: str = None, image_provider_type: str = None, image_tag: str = None, image_url: str = None, image_url_vpc: str = None, ): self.accelerator_type = accelerator_type self.author_id = author_id self.framework = framework self.image_provider_type = image_provider_type self.image_tag = image_tag self.image_url = image_url self.image_url_vpc = image_url_vpc def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.accelerator_type is not None: result['AcceleratorType'] = self.accelerator_type if self.author_id is not None: result['AuthorId'] = self.author_id if self.framework is not None: result['Framework'] = self.framework if self.image_provider_type is not None: result['ImageProviderType'] = self.image_provider_type if self.image_tag is not None: result['ImageTag'] = self.image_tag if self.image_url is not None: result['ImageUrl'] = self.image_url if self.image_url_vpc is not None: result['ImageUrlVpc'] = self.image_url_vpc return result def from_map(self, m: dict = None): m = m or dict() if m.get('AcceleratorType') is not None: self.accelerator_type = m.get('AcceleratorType') if m.get('AuthorId') is not None: self.author_id = m.get('AuthorId') if m.get('Framework') is not None: self.framework = m.get('Framework') if m.get('ImageProviderType') is not None: self.image_provider_type = m.get('ImageProviderType') if m.get('ImageTag') is not None: self.image_tag = m.get('ImageTag') if m.get('ImageUrl') is not None: self.image_url = m.get('ImageUrl') if m.get('ImageUrlVpc') is not None: self.image_url_vpc = m.get('ImageUrlVpc') return self class JobDebuggerConfig(TeaModel): def __init__( self, debugger_config_content: str = None, debugger_config_id: str = None, gmt_create_time: str = None, job_id: str = None, ): self.debugger_config_content = debugger_config_content self.debugger_config_id = debugger_config_id self.gmt_create_time = gmt_create_time self.job_id = job_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.debugger_config_content is not None: result['DebuggerConfigContent'] = self.debugger_config_content if self.debugger_config_id is not None: result['DebuggerConfigId'] = self.debugger_config_id if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.job_id is not None: result['JobId'] = self.job_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('DebuggerConfigContent') is not None: self.debugger_config_content = m.get('DebuggerConfigContent') if m.get('DebuggerConfigId') is not None: self.debugger_config_id = m.get('DebuggerConfigId') if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('JobId') is not None: self.job_id = m.get('JobId') return self class JobElasticSpec(TeaModel): def __init__( self, aimaster_docker_image: str = None, aimaster_type: str = None, edpmax_parallelism: int = None, edpmin_parallelism: int = None, elastic_strategy: str = None, enable_aimaster: bool = None, enable_edp: bool = None, enable_elastic_training: bool = None, enable_ps_job_elastic_ps: bool = None, enable_ps_job_elastic_worker: bool = None, enable_ps_resource_estimate: bool = None, max_parallelism: int = None, min_parallelism: int = None, psmax_parallelism: int = None, psmin_parallelism: int = None, ): self.aimaster_docker_image = aimaster_docker_image self.aimaster_type = aimaster_type self.edpmax_parallelism = edpmax_parallelism self.edpmin_parallelism = edpmin_parallelism self.elastic_strategy = elastic_strategy self.enable_aimaster = enable_aimaster self.enable_edp = enable_edp self.enable_elastic_training = enable_elastic_training self.enable_ps_job_elastic_ps = enable_ps_job_elastic_ps self.enable_ps_job_elastic_worker = enable_ps_job_elastic_worker self.enable_ps_resource_estimate = enable_ps_resource_estimate self.max_parallelism = max_parallelism self.min_parallelism = min_parallelism self.psmax_parallelism = psmax_parallelism self.psmin_parallelism = psmin_parallelism def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.aimaster_docker_image is not None: result['AIMasterDockerImage'] = self.aimaster_docker_image if self.aimaster_type is not None: result['AIMasterType'] = self.aimaster_type if self.edpmax_parallelism is not None: result['EDPMaxParallelism'] = self.edpmax_parallelism if self.edpmin_parallelism is not None: result['EDPMinParallelism'] = self.edpmin_parallelism if self.elastic_strategy is not None: result['ElasticStrategy'] = self.elastic_strategy if self.enable_aimaster is not None: result['EnableAIMaster'] = self.enable_aimaster if self.enable_edp is not None: result['EnableEDP'] = self.enable_edp if self.enable_elastic_training is not None: result['EnableElasticTraining'] = self.enable_elastic_training if self.enable_ps_job_elastic_ps is not None: result['EnablePsJobElasticPS'] = self.enable_ps_job_elastic_ps if self.enable_ps_job_elastic_worker is not None: result['EnablePsJobElasticWorker'] = self.enable_ps_job_elastic_worker if self.enable_ps_resource_estimate is not None: result['EnablePsResourceEstimate'] = self.enable_ps_resource_estimate if self.max_parallelism is not None: result['MaxParallelism'] = self.max_parallelism if self.min_parallelism is not None: result['MinParallelism'] = self.min_parallelism if self.psmax_parallelism is not None: result['PSMaxParallelism'] = self.psmax_parallelism if self.psmin_parallelism is not None: result['PSMinParallelism'] = self.psmin_parallelism return result def from_map(self, m: dict = None): m = m or dict() if m.get('AIMasterDockerImage') is not None: self.aimaster_docker_image = m.get('AIMasterDockerImage') if m.get('AIMasterType') is not None: self.aimaster_type = m.get('AIMasterType') if m.get('EDPMaxParallelism') is not None: self.edpmax_parallelism = m.get('EDPMaxParallelism') if m.get('EDPMinParallelism') is not None: self.edpmin_parallelism = m.get('EDPMinParallelism') if m.get('ElasticStrategy') is not None: self.elastic_strategy = m.get('ElasticStrategy') if m.get('EnableAIMaster') is not None: self.enable_aimaster = m.get('EnableAIMaster') if m.get('EnableEDP') is not None: self.enable_edp = m.get('EnableEDP') if m.get('EnableElasticTraining') is not None: self.enable_elastic_training = m.get('EnableElasticTraining') if m.get('EnablePsJobElasticPS') is not None: self.enable_ps_job_elastic_ps = m.get('EnablePsJobElasticPS') if m.get('EnablePsJobElasticWorker') is not None: self.enable_ps_job_elastic_worker = m.get('EnablePsJobElasticWorker') if m.get('EnablePsResourceEstimate') is not None: self.enable_ps_resource_estimate = m.get('EnablePsResourceEstimate') if m.get('MaxParallelism') is not None: self.max_parallelism = m.get('MaxParallelism') if m.get('MinParallelism') is not None: self.min_parallelism = m.get('MinParallelism') if m.get('PSMaxParallelism') is not None: self.psmax_parallelism = m.get('PSMaxParallelism') if m.get('PSMinParallelism') is not None: self.psmin_parallelism = m.get('PSMinParallelism') return self class JobItemCodeSource(TeaModel): def __init__( self, branch: str = None, code_source_id: str = None, commit: str = None, mount_path: str = None, ): self.branch = branch self.code_source_id = code_source_id self.commit = commit self.mount_path = mount_path def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.branch is not None: result['Branch'] = self.branch if self.code_source_id is not None: result['CodeSourceId'] = self.code_source_id if self.commit is not None: result['Commit'] = self.commit if self.mount_path is not None: result['MountPath'] = self.mount_path return result def from_map(self, m: dict = None): m = m or dict() if m.get('Branch') is not None: self.branch = m.get('Branch') if m.get('CodeSourceId') is not None: self.code_source_id = m.get('CodeSourceId') if m.get('Commit') is not None: self.commit = m.get('Commit') if m.get('MountPath') is not None: self.mount_path = m.get('MountPath') return self class JobItemDataSources(TeaModel): def __init__( self, data_source_id: str = None, mount_path: str = None, ): self.data_source_id = data_source_id self.mount_path = mount_path def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.data_source_id is not None: result['DataSourceId'] = self.data_source_id if self.mount_path is not None: result['MountPath'] = self.mount_path return result def from_map(self, m: dict = None): m = m or dict() if m.get('DataSourceId') is not None: self.data_source_id = m.get('DataSourceId') if m.get('MountPath') is not None: self.mount_path = m.get('MountPath') return self class JobItemUserVpc(TeaModel): def __init__( self, default_route: str = None, extended_cidrs: List[str] = None, security_group_id: str = None, switch_id: str = None, vpc_id: str = None, ): self.default_route = default_route self.extended_cidrs = extended_cidrs self.security_group_id = security_group_id self.switch_id = switch_id self.vpc_id = vpc_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.default_route is not None: result['DefaultRoute'] = self.default_route if self.extended_cidrs is not None: result['ExtendedCidrs'] = self.extended_cidrs if self.security_group_id is not None: result['SecurityGroupId'] = self.security_group_id if self.switch_id is not None: result['SwitchId'] = self.switch_id if self.vpc_id is not None: result['VpcId'] = self.vpc_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('DefaultRoute') is not None: self.default_route = m.get('DefaultRoute') if m.get('ExtendedCidrs') is not None: self.extended_cidrs = m.get('ExtendedCidrs') if m.get('SecurityGroupId') is not None: self.security_group_id = m.get('SecurityGroupId') if m.get('SwitchId') is not None: self.switch_id = m.get('SwitchId') if m.get('VpcId') is not None: self.vpc_id = m.get('VpcId') return self class ResourceConfig(TeaModel): def __init__( self, cpu: str = None, gpu: str = None, gputype: str = None, memory: str = None, shared_memory: str = None, ): self.cpu = cpu self.gpu = gpu self.gputype = gputype self.memory = memory self.shared_memory = shared_memory def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.cpu is not None: result['CPU'] = self.cpu if self.gpu is not None: result['GPU'] = self.gpu if self.gputype is not None: result['GPUType'] = self.gputype if self.memory is not None: result['Memory'] = self.memory if self.shared_memory is not None: result['SharedMemory'] = self.shared_memory return result def from_map(self, m: dict = None): m = m or dict() if m.get('CPU') is not None: self.cpu = m.get('CPU') if m.get('GPU') is not None: self.gpu = m.get('GPU') if m.get('GPUType') is not None: self.gputype = m.get('GPUType') if m.get('Memory') is not None: self.memory = m.get('Memory') if m.get('SharedMemory') is not None: self.shared_memory = m.get('SharedMemory') return self class SpotSpec(TeaModel): def __init__( self, spot_discount_limit: float = None, spot_price_limit: float = None, spot_strategy: str = None, ): self.spot_discount_limit = spot_discount_limit self.spot_price_limit = spot_price_limit self.spot_strategy = spot_strategy def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.spot_discount_limit is not None: result['SpotDiscountLimit'] = self.spot_discount_limit if self.spot_price_limit is not None: result['SpotPriceLimit'] = self.spot_price_limit if self.spot_strategy is not None: result['SpotStrategy'] = self.spot_strategy return result def from_map(self, m: dict = None): m = m or dict() if m.get('SpotDiscountLimit') is not None: self.spot_discount_limit = m.get('SpotDiscountLimit') if m.get('SpotPriceLimit') is not None: self.spot_price_limit = m.get('SpotPriceLimit') if m.get('SpotStrategy') is not None: self.spot_strategy = m.get('SpotStrategy') return self class JobSpec(TeaModel): def __init__( self, assign_node_spec: AssignNodeSpec = None, ecs_spec: str = None, extra_pod_spec: ExtraPodSpec = None, image: str = None, image_config: ImageConfig = None, pod_count: int = None, resource_config: ResourceConfig = None, spot_spec: SpotSpec = None, type: str = None, use_spot_instance: bool = None, ): self.assign_node_spec = assign_node_spec self.ecs_spec = ecs_spec self.extra_pod_spec = extra_pod_spec self.image = image self.image_config = image_config self.pod_count = pod_count self.resource_config = resource_config self.spot_spec = spot_spec self.type = type self.use_spot_instance = use_spot_instance def validate(self): if self.assign_node_spec: self.assign_node_spec.validate() if self.extra_pod_spec: self.extra_pod_spec.validate() if self.image_config: self.image_config.validate() if self.resource_config: self.resource_config.validate() if self.spot_spec: self.spot_spec.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.assign_node_spec is not None: result['AssignNodeSpec'] = self.assign_node_spec.to_map() if self.ecs_spec is not None: result['EcsSpec'] = self.ecs_spec if self.extra_pod_spec is not None: result['ExtraPodSpec'] = self.extra_pod_spec.to_map() if self.image is not None: result['Image'] = self.image if self.image_config is not None: result['ImageConfig'] = self.image_config.to_map() if self.pod_count is not None: result['PodCount'] = self.pod_count if self.resource_config is not None: result['ResourceConfig'] = self.resource_config.to_map() if self.spot_spec is not None: result['SpotSpec'] = self.spot_spec.to_map() if self.type is not None: result['Type'] = self.type if self.use_spot_instance is not None: result['UseSpotInstance'] = self.use_spot_instance return result def from_map(self, m: dict = None): m = m or dict() if m.get('AssignNodeSpec') is not None: temp_model = AssignNodeSpec() self.assign_node_spec = temp_model.from_map(m['AssignNodeSpec']) if m.get('EcsSpec') is not None: self.ecs_spec = m.get('EcsSpec') if m.get('ExtraPodSpec') is not None: temp_model = ExtraPodSpec() self.extra_pod_spec = temp_model.from_map(m['ExtraPodSpec']) if m.get('Image') is not None: self.image = m.get('Image') if m.get('ImageConfig') is not None: temp_model = ImageConfig() self.image_config = temp_model.from_map(m['ImageConfig']) if m.get('PodCount') is not None: self.pod_count = m.get('PodCount') if m.get('ResourceConfig') is not None: temp_model = ResourceConfig() self.resource_config = temp_model.from_map(m['ResourceConfig']) if m.get('SpotSpec') is not None: temp_model = SpotSpec() self.spot_spec = temp_model.from_map(m['SpotSpec']) if m.get('Type') is not None: self.type = m.get('Type') if m.get('UseSpotInstance') is not None: self.use_spot_instance = m.get('UseSpotInstance') return self class PodItem(TeaModel): def __init__( self, gmt_create_time: str = None, gmt_finish_time: str = None, gmt_start_time: str = None, history_pods: List['PodItem'] = None, ip: str = None, node_name: str = None, pod_id: str = None, pod_uid: str = None, status: str = None, sub_status: str = None, type: str = None, ): self.gmt_create_time = gmt_create_time self.gmt_finish_time = gmt_finish_time self.gmt_start_time = gmt_start_time self.history_pods = history_pods self.ip = ip self.node_name = node_name self.pod_id = pod_id self.pod_uid = pod_uid self.status = status self.sub_status = sub_status self.type = type def validate(self): if self.history_pods: for k in self.history_pods: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_finish_time is not None: result['GmtFinishTime'] = self.gmt_finish_time if self.gmt_start_time is not None: result['GmtStartTime'] = self.gmt_start_time result['HistoryPods'] = [] if self.history_pods is not None: for k in self.history_pods: result['HistoryPods'].append(k.to_map() if k else None) if self.ip is not None: result['Ip'] = self.ip if self.node_name is not None: result['NodeName'] = self.node_name if self.pod_id is not None: result['PodId'] = self.pod_id if self.pod_uid is not None: result['PodUid'] = self.pod_uid if self.status is not None: result['Status'] = self.status if self.sub_status is not None: result['SubStatus'] = self.sub_status if self.type is not None: result['Type'] = self.type return result def from_map(self, m: dict = None): m = m or dict() if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtFinishTime') is not None: self.gmt_finish_time = m.get('GmtFinishTime') if m.get('GmtStartTime') is not None: self.gmt_start_time = m.get('GmtStartTime') self.history_pods = [] if m.get('HistoryPods') is not None: for k in m.get('HistoryPods'): temp_model = PodItem() self.history_pods.append(temp_model.from_map(k)) if m.get('Ip') is not None: self.ip = m.get('Ip') if m.get('NodeName') is not None: self.node_name = m.get('NodeName') if m.get('PodId') is not None: self.pod_id = m.get('PodId') if m.get('PodUid') is not None: self.pod_uid = m.get('PodUid') if m.get('Status') is not None: self.status = m.get('Status') if m.get('SubStatus') is not None: self.sub_status = m.get('SubStatus') if m.get('Type') is not None: self.type = m.get('Type') return self class JobSettings(TeaModel): def __init__( self, advanced_settings: Dict[str, Any] = None, business_user_id: str = None, caller: str = None, disable_ecs_stock_check: bool = None, driver: str = None, enable_cpuaffinity: bool = None, enable_error_monitoring_in_aimaster: bool = None, enable_oss_append: bool = None, enable_rdma: bool = None, enable_sanity_check: bool = None, enable_tide_resource: bool = None, error_monitoring_args: str = None, job_reserved_minutes: int = None, job_reserved_policy: str = None, oversold_type: str = None, pipeline_id: str = None, sanity_check_args: str = None, tags: Dict[str, str] = None, ): self.advanced_settings = advanced_settings self.business_user_id = business_user_id self.caller = caller self.disable_ecs_stock_check = disable_ecs_stock_check self.driver = driver self.enable_cpuaffinity = enable_cpuaffinity self.enable_error_monitoring_in_aimaster = enable_error_monitoring_in_aimaster self.enable_oss_append = enable_oss_append self.enable_rdma = enable_rdma self.enable_sanity_check = enable_sanity_check self.enable_tide_resource = enable_tide_resource self.error_monitoring_args = error_monitoring_args self.job_reserved_minutes = job_reserved_minutes self.job_reserved_policy = job_reserved_policy self.oversold_type = oversold_type self.pipeline_id = pipeline_id self.sanity_check_args = sanity_check_args self.tags = tags def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.advanced_settings is not None: result['AdvancedSettings'] = self.advanced_settings if self.business_user_id is not None: result['BusinessUserId'] = self.business_user_id if self.caller is not None: result['Caller'] = self.caller if self.disable_ecs_stock_check is not None: result['DisableEcsStockCheck'] = self.disable_ecs_stock_check if self.driver is not None: result['Driver'] = self.driver if self.enable_cpuaffinity is not None: result['EnableCPUAffinity'] = self.enable_cpuaffinity if self.enable_error_monitoring_in_aimaster is not None: result['EnableErrorMonitoringInAIMaster'] = self.enable_error_monitoring_in_aimaster if self.enable_oss_append is not None: result['EnableOssAppend'] = self.enable_oss_append if self.enable_rdma is not None: result['EnableRDMA'] = self.enable_rdma if self.enable_sanity_check is not None: result['EnableSanityCheck'] = self.enable_sanity_check if self.enable_tide_resource is not None: result['EnableTideResource'] = self.enable_tide_resource if self.error_monitoring_args is not None: result['ErrorMonitoringArgs'] = self.error_monitoring_args if self.job_reserved_minutes is not None: result['JobReservedMinutes'] = self.job_reserved_minutes if self.job_reserved_policy is not None: result['JobReservedPolicy'] = self.job_reserved_policy if self.oversold_type is not None: result['OversoldType'] = self.oversold_type if self.pipeline_id is not None: result['PipelineId'] = self.pipeline_id if self.sanity_check_args is not None: result['SanityCheckArgs'] = self.sanity_check_args if self.tags is not None: result['Tags'] = self.tags return result def from_map(self, m: dict = None): m = m or dict() if m.get('AdvancedSettings') is not None: self.advanced_settings = m.get('AdvancedSettings') if m.get('BusinessUserId') is not None: self.business_user_id = m.get('BusinessUserId') if m.get('Caller') is not None: self.caller = m.get('Caller') if m.get('DisableEcsStockCheck') is not None: self.disable_ecs_stock_check = m.get('DisableEcsStockCheck') if m.get('Driver') is not None: self.driver = m.get('Driver') if m.get('EnableCPUAffinity') is not None: self.enable_cpuaffinity = m.get('EnableCPUAffinity') if m.get('EnableErrorMonitoringInAIMaster') is not None: self.enable_error_monitoring_in_aimaster = m.get('EnableErrorMonitoringInAIMaster') if m.get('EnableOssAppend') is not None: self.enable_oss_append = m.get('EnableOssAppend') if m.get('EnableRDMA') is not None: self.enable_rdma = m.get('EnableRDMA') if m.get('EnableSanityCheck') is not None: self.enable_sanity_check = m.get('EnableSanityCheck') if m.get('EnableTideResource') is not None: self.enable_tide_resource = m.get('EnableTideResource') if m.get('ErrorMonitoringArgs') is not None: self.error_monitoring_args = m.get('ErrorMonitoringArgs') if m.get('JobReservedMinutes') is not None: self.job_reserved_minutes = m.get('JobReservedMinutes') if m.get('JobReservedPolicy') is not None: self.job_reserved_policy = m.get('JobReservedPolicy') if m.get('OversoldType') is not None: self.oversold_type = m.get('OversoldType') if m.get('PipelineId') is not None: self.pipeline_id = m.get('PipelineId') if m.get('SanityCheckArgs') is not None: self.sanity_check_args = m.get('SanityCheckArgs') if m.get('Tags') is not None: self.tags = m.get('Tags') return self class StatusTransitionItem(TeaModel): def __init__( self, end_time: str = None, reason_code: str = None, reason_message: str = None, start_time: str = None, status: str = None, ): self.end_time = end_time self.reason_code = reason_code self.reason_message = reason_message self.start_time = start_time self.status = status def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.end_time is not None: result['EndTime'] = self.end_time if self.reason_code is not None: result['ReasonCode'] = self.reason_code if self.reason_message is not None: result['ReasonMessage'] = self.reason_message if self.start_time is not None: result['StartTime'] = self.start_time if self.status is not None: result['Status'] = self.status return result def from_map(self, m: dict = None): m = m or dict() if m.get('EndTime') is not None: self.end_time = m.get('EndTime') if m.get('ReasonCode') is not None: self.reason_code = m.get('ReasonCode') if m.get('ReasonMessage') is not None: self.reason_message = m.get('ReasonMessage') if m.get('StartTime') is not None: self.start_time = m.get('StartTime') if m.get('Status') is not None: self.status = m.get('Status') return self class JobItem(TeaModel): def __init__( self, accessibility: str = None, cluster_id: str = None, code_source: JobItemCodeSource = None, credential_config: CredentialConfig = None, data_sources: List[JobItemDataSources] = None, display_name: str = None, duration: int = None, elastic_spec: JobElasticSpec = None, enable_preemptible_job: bool = None, enabled_debugger: bool = None, envs: Dict[str, str] = None, gmt_create_time: str = None, gmt_failed_time: str = None, gmt_finish_time: str = None, gmt_modified_time: str = None, gmt_running_time: str = None, gmt_stopped_time: str = None, gmt_submitted_time: str = None, gmt_successed_time: str = None, is_deleted: bool = None, job_id: str = None, job_max_running_time_minutes: int = None, job_specs: List[JobSpec] = None, job_type: str = None, node_count: str = None, node_names: List[str] = None, pods: List[PodItem] = None, priority: int = None, reason_code: str = None, reason_message: str = None, request_cpu: int = None, request_gpu: str = None, request_memory: str = None, resource_id: str = None, resource_level: str = None, resource_name: str = None, resource_quota_name: str = None, resource_type: str = None, restart_times: str = None, settings: JobSettings = None, status: str = None, status_history: List[StatusTransitionItem] = None, sub_status: str = None, system_envs: Dict[str, str] = None, tenant_id: str = None, thirdparty_lib_dir: str = None, thirdparty_libs: List[str] = None, use_oversold_resource: bool = None, user_command: str = None, user_id: str = None, user_script: str = None, user_vpc: JobItemUserVpc = None, username: str = None, working_dir: str = None, workspace_id: str = None, workspace_name: str = None, ): self.accessibility = accessibility self.cluster_id = cluster_id self.code_source = code_source self.credential_config = credential_config self.data_sources = data_sources self.display_name = display_name self.duration = duration self.elastic_spec = elastic_spec self.enable_preemptible_job = enable_preemptible_job self.enabled_debugger = enabled_debugger self.envs = envs self.gmt_create_time = gmt_create_time self.gmt_failed_time = gmt_failed_time self.gmt_finish_time = gmt_finish_time self.gmt_modified_time = gmt_modified_time self.gmt_running_time = gmt_running_time self.gmt_stopped_time = gmt_stopped_time self.gmt_submitted_time = gmt_submitted_time self.gmt_successed_time = gmt_successed_time self.is_deleted = is_deleted self.job_id = job_id self.job_max_running_time_minutes = job_max_running_time_minutes self.job_specs = job_specs self.job_type = job_type self.node_count = node_count self.node_names = node_names self.pods = pods self.priority = priority self.reason_code = reason_code self.reason_message = reason_message self.request_cpu = request_cpu self.request_gpu = request_gpu self.request_memory = request_memory self.resource_id = resource_id self.resource_level = resource_level self.resource_name = resource_name self.resource_quota_name = resource_quota_name self.resource_type = resource_type self.restart_times = restart_times self.settings = settings self.status = status self.status_history = status_history self.sub_status = sub_status self.system_envs = system_envs self.tenant_id = tenant_id self.thirdparty_lib_dir = thirdparty_lib_dir self.thirdparty_libs = thirdparty_libs self.use_oversold_resource = use_oversold_resource self.user_command = user_command self.user_id = user_id self.user_script = user_script self.user_vpc = user_vpc self.username = username self.working_dir = working_dir self.workspace_id = workspace_id self.workspace_name = workspace_name def validate(self): if self.code_source: self.code_source.validate() if self.credential_config: self.credential_config.validate() if self.data_sources: for k in self.data_sources: if k: k.validate() if self.elastic_spec: self.elastic_spec.validate() if self.job_specs: for k in self.job_specs: if k: k.validate() if self.pods: for k in self.pods: if k: k.validate() if self.settings: self.settings.validate() if self.status_history: for k in self.status_history: if k: k.validate() if self.user_vpc: self.user_vpc.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.accessibility is not None: result['Accessibility'] = self.accessibility if self.cluster_id is not None: result['ClusterId'] = self.cluster_id if self.code_source is not None: result['CodeSource'] = self.code_source.to_map() if self.credential_config is not None: result['CredentialConfig'] = self.credential_config.to_map() result['DataSources'] = [] if self.data_sources is not None: for k in self.data_sources: result['DataSources'].append(k.to_map() if k else None) if self.display_name is not None: result['DisplayName'] = self.display_name if self.duration is not None: result['Duration'] = self.duration if self.elastic_spec is not None: result['ElasticSpec'] = self.elastic_spec.to_map() if self.enable_preemptible_job is not None: result['EnablePreemptibleJob'] = self.enable_preemptible_job if self.enabled_debugger is not None: result['EnabledDebugger'] = self.enabled_debugger if self.envs is not None: result['Envs'] = self.envs if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_failed_time is not None: result['GmtFailedTime'] = self.gmt_failed_time if self.gmt_finish_time is not None: result['GmtFinishTime'] = self.gmt_finish_time if self.gmt_modified_time is not None: result['GmtModifiedTime'] = self.gmt_modified_time if self.gmt_running_time is not None: result['GmtRunningTime'] = self.gmt_running_time if self.gmt_stopped_time is not None: result['GmtStoppedTime'] = self.gmt_stopped_time if self.gmt_submitted_time is not None: result['GmtSubmittedTime'] = self.gmt_submitted_time if self.gmt_successed_time is not None: result['GmtSuccessedTime'] = self.gmt_successed_time if self.is_deleted is not None: result['IsDeleted'] = self.is_deleted if self.job_id is not None: result['JobId'] = self.job_id if self.job_max_running_time_minutes is not None: result['JobMaxRunningTimeMinutes'] = self.job_max_running_time_minutes result['JobSpecs'] = [] if self.job_specs is not None: for k in self.job_specs: result['JobSpecs'].append(k.to_map() if k else None) if self.job_type is not None: result['JobType'] = self.job_type if self.node_count is not None: result['NodeCount'] = self.node_count if self.node_names is not None: result['NodeNames'] = self.node_names result['Pods'] = [] if self.pods is not None: for k in self.pods: result['Pods'].append(k.to_map() if k else None) if self.priority is not None: result['Priority'] = self.priority if self.reason_code is not None: result['ReasonCode'] = self.reason_code if self.reason_message is not None: result['ReasonMessage'] = self.reason_message if self.request_cpu is not None: result['RequestCPU'] = self.request_cpu if self.request_gpu is not None: result['RequestGPU'] = self.request_gpu if self.request_memory is not None: result['RequestMemory'] = self.request_memory if self.resource_id is not None: result['ResourceId'] = self.resource_id if self.resource_level is not None: result['ResourceLevel'] = self.resource_level if self.resource_name is not None: result['ResourceName'] = self.resource_name if self.resource_quota_name is not None: result['ResourceQuotaName'] = self.resource_quota_name if self.resource_type is not None: result['ResourceType'] = self.resource_type if self.restart_times is not None: result['RestartTimes'] = self.restart_times if self.settings is not None: result['Settings'] = self.settings.to_map() if self.status is not None: result['Status'] = self.status result['StatusHistory'] = [] if self.status_history is not None: for k in self.status_history: result['StatusHistory'].append(k.to_map() if k else None) if self.sub_status is not None: result['SubStatus'] = self.sub_status if self.system_envs is not None: result['SystemEnvs'] = self.system_envs if self.tenant_id is not None: result['TenantId'] = self.tenant_id if self.thirdparty_lib_dir is not None: result['ThirdpartyLibDir'] = self.thirdparty_lib_dir if self.thirdparty_libs is not None: result['ThirdpartyLibs'] = self.thirdparty_libs if self.use_oversold_resource is not None: result['UseOversoldResource'] = self.use_oversold_resource if self.user_command is not None: result['UserCommand'] = self.user_command if self.user_id is not None: result['UserId'] = self.user_id if self.user_script is not None: result['UserScript'] = self.user_script if self.user_vpc is not None: result['UserVpc'] = self.user_vpc.to_map() if self.username is not None: result['Username'] = self.username if self.working_dir is not None: result['WorkingDir'] = self.working_dir if self.workspace_id is not None: result['WorkspaceId'] = self.workspace_id if self.workspace_name is not None: result['WorkspaceName'] = self.workspace_name return result def from_map(self, m: dict = None): m = m or dict() if m.get('Accessibility') is not None: self.accessibility = m.get('Accessibility') if m.get('ClusterId') is not None: self.cluster_id = m.get('ClusterId') if m.get('CodeSource') is not None: temp_model = JobItemCodeSource() self.code_source = temp_model.from_map(m['CodeSource']) if m.get('CredentialConfig') is not None: temp_model = CredentialConfig() self.credential_config = temp_model.from_map(m['CredentialConfig']) self.data_sources = [] if m.get('DataSources') is not None: for k in m.get('DataSources'): temp_model = JobItemDataSources() self.data_sources.append(temp_model.from_map(k)) if m.get('DisplayName') is not None: self.display_name = m.get('DisplayName') if m.get('Duration') is not None: self.duration = m.get('Duration') if m.get('ElasticSpec') is not None: temp_model = JobElasticSpec() self.elastic_spec = temp_model.from_map(m['ElasticSpec']) if m.get('EnablePreemptibleJob') is not None: self.enable_preemptible_job = m.get('EnablePreemptibleJob') if m.get('EnabledDebugger') is not None: self.enabled_debugger = m.get('EnabledDebugger') if m.get('Envs') is not None: self.envs = m.get('Envs') if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtFailedTime') is not None: self.gmt_failed_time = m.get('GmtFailedTime') if m.get('GmtFinishTime') is not None: self.gmt_finish_time = m.get('GmtFinishTime') if m.get('GmtModifiedTime') is not None: self.gmt_modified_time = m.get('GmtModifiedTime') if m.get('GmtRunningTime') is not None: self.gmt_running_time = m.get('GmtRunningTime') if m.get('GmtStoppedTime') is not None: self.gmt_stopped_time = m.get('GmtStoppedTime') if m.get('GmtSubmittedTime') is not None: self.gmt_submitted_time = m.get('GmtSubmittedTime') if m.get('GmtSuccessedTime') is not None: self.gmt_successed_time = m.get('GmtSuccessedTime') if m.get('IsDeleted') is not None: self.is_deleted = m.get('IsDeleted') if m.get('JobId') is not None: self.job_id = m.get('JobId') if m.get('JobMaxRunningTimeMinutes') is not None: self.job_max_running_time_minutes = m.get('JobMaxRunningTimeMinutes') self.job_specs = [] if m.get('JobSpecs') is not None: for k in m.get('JobSpecs'): temp_model = JobSpec() self.job_specs.append(temp_model.from_map(k)) if m.get('JobType') is not None: self.job_type = m.get('JobType') if m.get('NodeCount') is not None: self.node_count = m.get('NodeCount') if m.get('NodeNames') is not None: self.node_names = m.get('NodeNames') self.pods = [] if m.get('Pods') is not None: for k in m.get('Pods'): temp_model = PodItem() self.pods.append(temp_model.from_map(k)) if m.get('Priority') is not None: self.priority = m.get('Priority') if m.get('ReasonCode') is not None: self.reason_code = m.get('ReasonCode') if m.get('ReasonMessage') is not None: self.reason_message = m.get('ReasonMessage') if m.get('RequestCPU') is not None: self.request_cpu = m.get('RequestCPU') if m.get('RequestGPU') is not None: self.request_gpu = m.get('RequestGPU') if m.get('RequestMemory') is not None: self.request_memory = m.get('RequestMemory') if m.get('ResourceId') is not None: self.resource_id = m.get('ResourceId') if m.get('ResourceLevel') is not None: self.resource_level = m.get('ResourceLevel') if m.get('ResourceName') is not None: self.resource_name = m.get('ResourceName') if m.get('ResourceQuotaName') is not None: self.resource_quota_name = m.get('ResourceQuotaName') if m.get('ResourceType') is not None: self.resource_type = m.get('ResourceType') if m.get('RestartTimes') is not None: self.restart_times = m.get('RestartTimes') if m.get('Settings') is not None: temp_model = JobSettings() self.settings = temp_model.from_map(m['Settings']) if m.get('Status') is not None: self.status = m.get('Status') self.status_history = [] if m.get('StatusHistory') is not None: for k in m.get('StatusHistory'): temp_model = StatusTransitionItem() self.status_history.append(temp_model.from_map(k)) if m.get('SubStatus') is not None: self.sub_status = m.get('SubStatus') if m.get('SystemEnvs') is not None: self.system_envs = m.get('SystemEnvs') if m.get('TenantId') is not None: self.tenant_id = m.get('TenantId') if m.get('ThirdpartyLibDir') is not None: self.thirdparty_lib_dir = m.get('ThirdpartyLibDir') if m.get('ThirdpartyLibs') is not None: self.thirdparty_libs = m.get('ThirdpartyLibs') if m.get('UseOversoldResource') is not None: self.use_oversold_resource = m.get('UseOversoldResource') if m.get('UserCommand') is not None: self.user_command = m.get('UserCommand') if m.get('UserId') is not None: self.user_id = m.get('UserId') if m.get('UserScript') is not None: self.user_script = m.get('UserScript') if m.get('UserVpc') is not None: temp_model = JobItemUserVpc() self.user_vpc = temp_model.from_map(m['UserVpc']) if m.get('Username') is not None: self.username = m.get('Username') if m.get('WorkingDir') is not None: self.working_dir = m.get('WorkingDir') if m.get('WorkspaceId') is not None: self.workspace_id = m.get('WorkspaceId') if m.get('WorkspaceName') is not None: self.workspace_name = m.get('WorkspaceName') return self class LogInfo(TeaModel): def __init__( self, content: str = None, id: str = None, is_truncated: bool = None, pod_id: str = None, pod_uid: str = None, source: str = None, time: str = None, ): self.content = content self.id = id self.is_truncated = is_truncated self.pod_id = pod_id self.pod_uid = pod_uid self.source = source self.time = time def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.content is not None: result['Content'] = self.content if self.id is not None: result['Id'] = self.id if self.is_truncated is not None: result['IsTruncated'] = self.is_truncated if self.pod_id is not None: result['PodId'] = self.pod_id if self.pod_uid is not None: result['PodUid'] = self.pod_uid if self.source is not None: result['Source'] = self.source if self.time is not None: result['Time'] = self.time return result def from_map(self, m: dict = None): m = m or dict() if m.get('Content') is not None: self.content = m.get('Content') if m.get('Id') is not None: self.id = m.get('Id') if m.get('IsTruncated') is not None: self.is_truncated = m.get('IsTruncated') if m.get('PodId') is not None: self.pod_id = m.get('PodId') if m.get('PodUid') is not None: self.pod_uid = m.get('PodUid') if m.get('Source') is not None: self.source = m.get('Source') if m.get('Time') is not None: self.time = m.get('Time') return self class Member(TeaModel): def __init__( self, member_id: str = None, member_type: str = None, ): self.member_id = member_id self.member_type = member_type def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.member_id is not None: result['MemberId'] = self.member_id if self.member_type is not None: result['MemberType'] = self.member_type return result def from_map(self, m: dict = None): m = m or dict() if m.get('MemberId') is not None: self.member_id = m.get('MemberId') if m.get('MemberType') is not None: self.member_type = m.get('MemberType') return self class Metric(TeaModel): def __init__( self, time: int = None, value: float = None, ): self.time = time self.value = value def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.time is not None: result['Time'] = self.time if self.value is not None: result['Value'] = self.value return result def from_map(self, m: dict = None): m = m or dict() if m.get('Time') is not None: self.time = m.get('Time') if m.get('Value') is not None: self.value = m.get('Value') return self class NodeMetric(TeaModel): def __init__( self, metrics: List[Metric] = None, node_name: str = None, ): self.metrics = metrics self.node_name = node_name def validate(self): if self.metrics: for k in self.metrics: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() result['Metrics'] = [] if self.metrics is not None: for k in self.metrics: result['Metrics'].append(k.to_map() if k else None) if self.node_name is not None: result['NodeName'] = self.node_name return result def from_map(self, m: dict = None): m = m or dict() self.metrics = [] if m.get('Metrics') is not None: for k in m.get('Metrics'): temp_model = Metric() self.metrics.append(temp_model.from_map(k)) if m.get('NodeName') is not None: self.node_name = m.get('NodeName') return self class PodMetric(TeaModel): def __init__( self, metrics: List[Metric] = None, pod_id: str = None, ): self.metrics = metrics self.pod_id = pod_id def validate(self): if self.metrics: for k in self.metrics: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() result['Metrics'] = [] if self.metrics is not None: for k in self.metrics: result['Metrics'].append(k.to_map() if k else None) if self.pod_id is not None: result['PodId'] = self.pod_id return result def from_map(self, m: dict = None): m = m or dict() self.metrics = [] if m.get('Metrics') is not None: for k in m.get('Metrics'): temp_model = Metric() self.metrics.append(temp_model.from_map(k)) if m.get('PodId') is not None: self.pod_id = m.get('PodId') return self class QuotaConfig(TeaModel): def __init__( self, allowed_max_priority: int = None, enable_dlc: bool = None, enable_dsw: bool = None, enable_tide_resource: bool = None, resource_level: str = None, ): self.allowed_max_priority = allowed_max_priority self.enable_dlc = enable_dlc self.enable_dsw = enable_dsw self.enable_tide_resource = enable_tide_resource self.resource_level = resource_level def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.allowed_max_priority is not None: result['AllowedMaxPriority'] = self.allowed_max_priority if self.enable_dlc is not None: result['EnableDLC'] = self.enable_dlc if self.enable_dsw is not None: result['EnableDSW'] = self.enable_dsw if self.enable_tide_resource is not None: result['EnableTideResource'] = self.enable_tide_resource if self.resource_level is not None: result['ResourceLevel'] = self.resource_level return result def from_map(self, m: dict = None): m = m or dict() if m.get('AllowedMaxPriority') is not None: self.allowed_max_priority = m.get('AllowedMaxPriority') if m.get('EnableDLC') is not None: self.enable_dlc = m.get('EnableDLC') if m.get('EnableDSW') is not None: self.enable_dsw = m.get('EnableDSW') if m.get('EnableTideResource') is not None: self.enable_tide_resource = m.get('EnableTideResource') if m.get('ResourceLevel') is not None: self.resource_level = m.get('ResourceLevel') return self class QuotaDetail(TeaModel): def __init__( self, cpu: str = None, gpu: str = None, gpudetails: List[GPUDetail] = None, gputype: str = None, gputype_full_name: str = None, memory: str = None, ): self.cpu = cpu self.gpu = gpu self.gpudetails = gpudetails self.gputype = gputype self.gputype_full_name = gputype_full_name self.memory = memory def validate(self): if self.gpudetails: for k in self.gpudetails: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.cpu is not None: result['CPU'] = self.cpu if self.gpu is not None: result['GPU'] = self.gpu result['GPUDetails'] = [] if self.gpudetails is not None: for k in self.gpudetails: result['GPUDetails'].append(k.to_map() if k else None) if self.gputype is not None: result['GPUType'] = self.gputype if self.gputype_full_name is not None: result['GPUTypeFullName'] = self.gputype_full_name if self.memory is not None: result['Memory'] = self.memory return result def from_map(self, m: dict = None): m = m or dict() if m.get('CPU') is not None: self.cpu = m.get('CPU') if m.get('GPU') is not None: self.gpu = m.get('GPU') self.gpudetails = [] if m.get('GPUDetails') is not None: for k in m.get('GPUDetails'): temp_model = GPUDetail() self.gpudetails.append(temp_model.from_map(k)) if m.get('GPUType') is not None: self.gputype = m.get('GPUType') if m.get('GPUTypeFullName') is not None: self.gputype_full_name = m.get('GPUTypeFullName') if m.get('Memory') is not None: self.memory = m.get('Memory') return self class Quota(TeaModel): def __init__( self, cluster_id: str = None, cluster_name: str = None, quota_config: QuotaConfig = None, quota_id: str = None, quota_name: str = None, quota_type: str = None, total_quota: QuotaDetail = None, total_tide_quota: QuotaDetail = None, used_quota: QuotaDetail = None, used_tide_quota: QuotaDetail = None, ): self.cluster_id = cluster_id self.cluster_name = cluster_name self.quota_config = quota_config self.quota_id = quota_id self.quota_name = quota_name self.quota_type = quota_type self.total_quota = total_quota self.total_tide_quota = total_tide_quota self.used_quota = used_quota self.used_tide_quota = used_tide_quota def validate(self): if self.quota_config: self.quota_config.validate() if self.total_quota: self.total_quota.validate() if self.total_tide_quota: self.total_tide_quota.validate() if self.used_quota: self.used_quota.validate() if self.used_tide_quota: self.used_tide_quota.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.cluster_id is not None: result['ClusterId'] = self.cluster_id if self.cluster_name is not None: result['ClusterName'] = self.cluster_name if self.quota_config is not None: result['QuotaConfig'] = self.quota_config.to_map() if self.quota_id is not None: result['QuotaId'] = self.quota_id if self.quota_name is not None: result['QuotaName'] = self.quota_name if self.quota_type is not None: result['QuotaType'] = self.quota_type if self.total_quota is not None: result['TotalQuota'] = self.total_quota.to_map() if self.total_tide_quota is not None: result['TotalTideQuota'] = self.total_tide_quota.to_map() if self.used_quota is not None: result['UsedQuota'] = self.used_quota.to_map() if self.used_tide_quota is not None: result['UsedTideQuota'] = self.used_tide_quota.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('ClusterId') is not None: self.cluster_id = m.get('ClusterId') if m.get('ClusterName') is not None: self.cluster_name = m.get('ClusterName') if m.get('QuotaConfig') is not None: temp_model = QuotaConfig() self.quota_config = temp_model.from_map(m['QuotaConfig']) if m.get('QuotaId') is not None: self.quota_id = m.get('QuotaId') if m.get('QuotaName') is not None: self.quota_name = m.get('QuotaName') if m.get('QuotaType') is not None: self.quota_type = m.get('QuotaType') if m.get('TotalQuota') is not None: temp_model = QuotaDetail() self.total_quota = temp_model.from_map(m['TotalQuota']) if m.get('TotalTideQuota') is not None: temp_model = QuotaDetail() self.total_tide_quota = temp_model.from_map(m['TotalTideQuota']) if m.get('UsedQuota') is not None: temp_model = QuotaDetail() self.used_quota = temp_model.from_map(m['UsedQuota']) if m.get('UsedTideQuota') is not None: temp_model = QuotaDetail() self.used_tide_quota = temp_model.from_map(m['UsedTideQuota']) return self class Resources(TeaModel): def __init__( self, cpu: str = None, gpu: str = None, memory: str = None, ): self.cpu = cpu self.gpu = gpu self.memory = memory def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.cpu is not None: result['CPU'] = self.cpu if self.gpu is not None: result['GPU'] = self.gpu if self.memory is not None: result['Memory'] = self.memory return result def from_map(self, m: dict = None): m = m or dict() if m.get('CPU') is not None: self.cpu = m.get('CPU') if m.get('GPU') is not None: self.gpu = m.get('GPU') if m.get('Memory') is not None: self.memory = m.get('Memory') return self class SanityCheckResultItem(TeaModel): def __init__( self, check_number: int = None, finished_at: str = None, message: str = None, phase: str = None, started_at: str = None, status: str = None, ): self.check_number = check_number self.finished_at = finished_at self.message = message self.phase = phase self.started_at = started_at self.status = status def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.check_number is not None: result['CheckNumber'] = self.check_number if self.finished_at is not None: result['FinishedAt'] = self.finished_at if self.message is not None: result['Message'] = self.message if self.phase is not None: result['Phase'] = self.phase if self.started_at is not None: result['StartedAt'] = self.started_at if self.status is not None: result['Status'] = self.status return result def from_map(self, m: dict = None): m = m or dict() if m.get('CheckNumber') is not None: self.check_number = m.get('CheckNumber') if m.get('FinishedAt') is not None: self.finished_at = m.get('FinishedAt') if m.get('Message') is not None: self.message = m.get('Message') if m.get('Phase') is not None: self.phase = m.get('Phase') if m.get('StartedAt') is not None: self.started_at = m.get('StartedAt') if m.get('Status') is not None: self.status = m.get('Status') return self class SeccompProfile(TeaModel): def __init__( self, localhost_profile: str = None, type: str = None, ): self.localhost_profile = localhost_profile self.type = type def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.localhost_profile is not None: result['LocalhostProfile'] = self.localhost_profile if self.type is not None: result['Type'] = self.type return result def from_map(self, m: dict = None): m = m or dict() if m.get('LocalhostProfile') is not None: self.localhost_profile = m.get('LocalhostProfile') if m.get('Type') is not None: self.type = m.get('Type') return self class SecurityContext(TeaModel): def __init__( self, run_as_group: int = None, run_as_user: int = None, seccomp_profile: SeccompProfile = None, ): self.run_as_group = run_as_group self.run_as_user = run_as_user self.seccomp_profile = seccomp_profile def validate(self): if self.seccomp_profile: self.seccomp_profile.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.run_as_group is not None: result['RunAsGroup'] = self.run_as_group if self.run_as_user is not None: result['RunAsUser'] = self.run_as_user if self.seccomp_profile is not None: result['SeccompProfile'] = self.seccomp_profile.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('RunAsGroup') is not None: self.run_as_group = m.get('RunAsGroup') if m.get('RunAsUser') is not None: self.run_as_user = m.get('RunAsUser') if m.get('SeccompProfile') is not None: temp_model = SeccompProfile() self.seccomp_profile = temp_model.from_map(m['SeccompProfile']) return self class SmartCache(TeaModel): def __init__( self, cache_worker_num: int = None, cache_worker_size: int = None, description: str = None, display_name: str = None, duration: str = None, endpoint: str = None, file_system_id: str = None, gmt_create_time: str = None, gmt_modify_time: str = None, mount_path: str = None, options: str = None, path: str = None, smart_cache_id: str = None, status: str = None, type: str = None, user_id: str = None, ): self.cache_worker_num = cache_worker_num self.cache_worker_size = cache_worker_size self.description = description self.display_name = display_name self.duration = duration self.endpoint = endpoint self.file_system_id = file_system_id self.gmt_create_time = gmt_create_time self.gmt_modify_time = gmt_modify_time self.mount_path = mount_path self.options = options self.path = path self.smart_cache_id = smart_cache_id self.status = status self.type = type self.user_id = user_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.cache_worker_num is not None: result['CacheWorkerNum'] = self.cache_worker_num if self.cache_worker_size is not None: result['CacheWorkerSize'] = self.cache_worker_size if self.description is not None: result['Description'] = self.description if self.display_name is not None: result['DisplayName'] = self.display_name if self.duration is not None: result['Duration'] = self.duration if self.endpoint is not None: result['Endpoint'] = self.endpoint if self.file_system_id is not None: result['FileSystemId'] = self.file_system_id if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_modify_time is not None: result['GmtModifyTime'] = self.gmt_modify_time if self.mount_path is not None: result['MountPath'] = self.mount_path if self.options is not None: result['Options'] = self.options if self.path is not None: result['Path'] = self.path if self.smart_cache_id is not None: result['SmartCacheId'] = self.smart_cache_id if self.status is not None: result['Status'] = self.status if self.type is not None: result['Type'] = self.type if self.user_id is not None: result['UserId'] = self.user_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('CacheWorkerNum') is not None: self.cache_worker_num = m.get('CacheWorkerNum') if m.get('CacheWorkerSize') is not None: self.cache_worker_size = m.get('CacheWorkerSize') if m.get('Description') is not None: self.description = m.get('Description') if m.get('DisplayName') is not None: self.display_name = m.get('DisplayName') if m.get('Duration') is not None: self.duration = m.get('Duration') if m.get('Endpoint') is not None: self.endpoint = m.get('Endpoint') if m.get('FileSystemId') is not None: self.file_system_id = m.get('FileSystemId') if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtModifyTime') is not None: self.gmt_modify_time = m.get('GmtModifyTime') if m.get('MountPath') is not None: self.mount_path = m.get('MountPath') if m.get('Options') is not None: self.options = m.get('Options') if m.get('Path') is not None: self.path = m.get('Path') if m.get('SmartCacheId') is not None: self.smart_cache_id = m.get('SmartCacheId') if m.get('Status') is not None: self.status = m.get('Status') if m.get('Type') is not None: self.type = m.get('Type') if m.get('UserId') is not None: self.user_id = m.get('UserId') return self class TensorboardDataSourceSpec(TeaModel): def __init__( self, data_source_type: str = None, directory_name: str = None, full_summary_path: str = None, id: str = None, name: str = None, source_type: str = None, summary_path: str = None, uri: str = None, ): self.data_source_type = data_source_type self.directory_name = directory_name self.full_summary_path = full_summary_path self.id = id self.name = name self.source_type = source_type self.summary_path = summary_path self.uri = uri def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.data_source_type is not None: result['DataSourceType'] = self.data_source_type if self.directory_name is not None: result['DirectoryName'] = self.directory_name if self.full_summary_path is not None: result['FullSummaryPath'] = self.full_summary_path if self.id is not None: result['Id'] = self.id if self.name is not None: result['Name'] = self.name if self.source_type is not None: result['SourceType'] = self.source_type if self.summary_path is not None: result['SummaryPath'] = self.summary_path if self.uri is not None: result['Uri'] = self.uri return result def from_map(self, m: dict = None): m = m or dict() if m.get('DataSourceType') is not None: self.data_source_type = m.get('DataSourceType') if m.get('DirectoryName') is not None: self.directory_name = m.get('DirectoryName') if m.get('FullSummaryPath') is not None: self.full_summary_path = m.get('FullSummaryPath') if m.get('Id') is not None: self.id = m.get('Id') if m.get('Name') is not None: self.name = m.get('Name') if m.get('SourceType') is not None: self.source_type = m.get('SourceType') if m.get('SummaryPath') is not None: self.summary_path = m.get('SummaryPath') if m.get('Uri') is not None: self.uri = m.get('Uri') return self class TensorboardSpec(TeaModel): def __init__( self, ecs_type: str = None, security_group_id: str = None, switch_id: str = None, vpc_id: str = None, ): self.ecs_type = ecs_type self.security_group_id = security_group_id self.switch_id = switch_id self.vpc_id = vpc_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.ecs_type is not None: result['EcsType'] = self.ecs_type if self.security_group_id is not None: result['SecurityGroupId'] = self.security_group_id if self.switch_id is not None: result['SwitchId'] = self.switch_id if self.vpc_id is not None: result['VpcId'] = self.vpc_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('EcsType') is not None: self.ecs_type = m.get('EcsType') if m.get('SecurityGroupId') is not None: self.security_group_id = m.get('SecurityGroupId') if m.get('SwitchId') is not None: self.switch_id = m.get('SwitchId') if m.get('VpcId') is not None: self.vpc_id = m.get('VpcId') return self class Tensorboard(TeaModel): def __init__( self, accessibility: str = None, cpu: int = None, data_source_id: str = None, data_source_type: str = None, display_name: str = None, duration: str = None, gmt_create_time: str = None, gmt_finish_time: str = None, gmt_modify_time: str = None, job_id: str = None, max_running_time_minutes: int = None, memory: int = None, options: str = None, priority: str = None, quota_id: str = None, quota_name: str = None, reason_code: str = None, reason_message: str = None, request_id: str = None, status: str = None, summary_path: str = None, summary_relative_path: str = None, tensorboard_data_sources: List[TensorboardDataSourceSpec] = None, tensorboard_id: str = None, tensorboard_spec: TensorboardSpec = None, tensorboard_url: str = None, token: str = None, user_id: str = None, username: str = None, workspace_id: str = None, ): self.accessibility = accessibility self.cpu = cpu self.data_source_id = data_source_id self.data_source_type = data_source_type self.display_name = display_name self.duration = duration self.gmt_create_time = gmt_create_time self.gmt_finish_time = gmt_finish_time self.gmt_modify_time = gmt_modify_time self.job_id = job_id self.max_running_time_minutes = max_running_time_minutes self.memory = memory self.options = options self.priority = priority self.quota_id = quota_id self.quota_name = quota_name self.reason_code = reason_code self.reason_message = reason_message self.request_id = request_id self.status = status self.summary_path = summary_path self.summary_relative_path = summary_relative_path self.tensorboard_data_sources = tensorboard_data_sources self.tensorboard_id = tensorboard_id self.tensorboard_spec = tensorboard_spec self.tensorboard_url = tensorboard_url self.token = token self.user_id = user_id self.username = username self.workspace_id = workspace_id def validate(self): if self.tensorboard_data_sources: for k in self.tensorboard_data_sources: if k: k.validate() if self.tensorboard_spec: self.tensorboard_spec.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.accessibility is not None: result['Accessibility'] = self.accessibility if self.cpu is not None: result['Cpu'] = self.cpu if self.data_source_id is not None: result['DataSourceId'] = self.data_source_id if self.data_source_type is not None: result['DataSourceType'] = self.data_source_type if self.display_name is not None: result['DisplayName'] = self.display_name if self.duration is not None: result['Duration'] = self.duration if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_finish_time is not None: result['GmtFinishTime'] = self.gmt_finish_time if self.gmt_modify_time is not None: result['GmtModifyTime'] = self.gmt_modify_time if self.job_id is not None: result['JobId'] = self.job_id if self.max_running_time_minutes is not None: result['MaxRunningTimeMinutes'] = self.max_running_time_minutes if self.memory is not None: result['Memory'] = self.memory if self.options is not None: result['Options'] = self.options if self.priority is not None: result['Priority'] = self.priority if self.quota_id is not None: result['QuotaId'] = self.quota_id if self.quota_name is not None: result['QuotaName'] = self.quota_name if self.reason_code is not None: result['ReasonCode'] = self.reason_code if self.reason_message is not None: result['ReasonMessage'] = self.reason_message if self.request_id is not None: result['RequestId'] = self.request_id if self.status is not None: result['Status'] = self.status if self.summary_path is not None: result['SummaryPath'] = self.summary_path if self.summary_relative_path is not None: result['SummaryRelativePath'] = self.summary_relative_path result['TensorboardDataSources'] = [] if self.tensorboard_data_sources is not None: for k in self.tensorboard_data_sources: result['TensorboardDataSources'].append(k.to_map() if k else None) if self.tensorboard_id is not None: result['TensorboardId'] = self.tensorboard_id if self.tensorboard_spec is not None: result['TensorboardSpec'] = self.tensorboard_spec.to_map() if self.tensorboard_url is not None: result['TensorboardUrl'] = self.tensorboard_url if self.token is not None: result['Token'] = self.token if self.user_id is not None: result['UserId'] = self.user_id if self.username is not None: result['Username'] = self.username if self.workspace_id is not None: result['WorkspaceId'] = self.workspace_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('Accessibility') is not None: self.accessibility = m.get('Accessibility') if m.get('Cpu') is not None: self.cpu = m.get('Cpu') if m.get('DataSourceId') is not None: self.data_source_id = m.get('DataSourceId') if m.get('DataSourceType') is not None: self.data_source_type = m.get('DataSourceType') if m.get('DisplayName') is not None: self.display_name = m.get('DisplayName') if m.get('Duration') is not None: self.duration = m.get('Duration') if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtFinishTime') is not None: self.gmt_finish_time = m.get('GmtFinishTime') if m.get('GmtModifyTime') is not None: self.gmt_modify_time = m.get('GmtModifyTime') if m.get('JobId') is not None: self.job_id = m.get('JobId') if m.get('MaxRunningTimeMinutes') is not None: self.max_running_time_minutes = m.get('MaxRunningTimeMinutes') if m.get('Memory') is not None: self.memory = m.get('Memory') if m.get('Options') is not None: self.options = m.get('Options') if m.get('Priority') is not None: self.priority = m.get('Priority') if m.get('QuotaId') is not None: self.quota_id = m.get('QuotaId') if m.get('QuotaName') is not None: self.quota_name = m.get('QuotaName') if m.get('ReasonCode') is not None: self.reason_code = m.get('ReasonCode') if m.get('ReasonMessage') is not None: self.reason_message = m.get('ReasonMessage') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('Status') is not None: self.status = m.get('Status') if m.get('SummaryPath') is not None: self.summary_path = m.get('SummaryPath') if m.get('SummaryRelativePath') is not None: self.summary_relative_path = m.get('SummaryRelativePath') self.tensorboard_data_sources = [] if m.get('TensorboardDataSources') is not None: for k in m.get('TensorboardDataSources'): temp_model = TensorboardDataSourceSpec() self.tensorboard_data_sources.append(temp_model.from_map(k)) if m.get('TensorboardId') is not None: self.tensorboard_id = m.get('TensorboardId') if m.get('TensorboardSpec') is not None: temp_model = TensorboardSpec() self.tensorboard_spec = temp_model.from_map(m['TensorboardSpec']) if m.get('TensorboardUrl') is not None: self.tensorboard_url = m.get('TensorboardUrl') if m.get('Token') is not None: self.token = m.get('Token') if m.get('UserId') is not None: self.user_id = m.get('UserId') if m.get('Username') is not None: self.username = m.get('Username') if m.get('WorkspaceId') is not None: self.workspace_id = m.get('WorkspaceId') return self class Workspace(TeaModel): def __init__( self, creator: str = None, gmt_create_time: str = None, gmt_modify_time: str = None, members: List[Member] = None, quotas: List[Quota] = None, total_resources: Resources = None, workspace_admins: List[Member] = None, workspace_id: str = None, workspace_name: str = None, ): self.creator = creator self.gmt_create_time = gmt_create_time self.gmt_modify_time = gmt_modify_time self.members = members self.quotas = quotas self.total_resources = total_resources self.workspace_admins = workspace_admins self.workspace_id = workspace_id self.workspace_name = workspace_name def validate(self): if self.members: for k in self.members: if k: k.validate() if self.quotas: for k in self.quotas: if k: k.validate() if self.total_resources: self.total_resources.validate() if self.workspace_admins: for k in self.workspace_admins: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.creator is not None: result['Creator'] = self.creator if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_modify_time is not None: result['GmtModifyTime'] = self.gmt_modify_time result['Members'] = [] if self.members is not None: for k in self.members: result['Members'].append(k.to_map() if k else None) result['Quotas'] = [] if self.quotas is not None: for k in self.quotas: result['Quotas'].append(k.to_map() if k else None) if self.total_resources is not None: result['TotalResources'] = self.total_resources.to_map() result['WorkspaceAdmins'] = [] if self.workspace_admins is not None: for k in self.workspace_admins: result['WorkspaceAdmins'].append(k.to_map() if k else None) if self.workspace_id is not None: result['WorkspaceId'] = self.workspace_id if self.workspace_name is not None: result['WorkspaceName'] = self.workspace_name return result def from_map(self, m: dict = None): m = m or dict() if m.get('Creator') is not None: self.creator = m.get('Creator') if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtModifyTime') is not None: self.gmt_modify_time = m.get('GmtModifyTime') self.members = [] if m.get('Members') is not None: for k in m.get('Members'): temp_model = Member() self.members.append(temp_model.from_map(k)) self.quotas = [] if m.get('Quotas') is not None: for k in m.get('Quotas'): temp_model = Quota() self.quotas.append(temp_model.from_map(k)) if m.get('TotalResources') is not None: temp_model = Resources() self.total_resources = temp_model.from_map(m['TotalResources']) self.workspace_admins = [] if m.get('WorkspaceAdmins') is not None: for k in m.get('WorkspaceAdmins'): temp_model = Member() self.workspace_admins.append(temp_model.from_map(k)) if m.get('WorkspaceId') is not None: self.workspace_id = m.get('WorkspaceId') if m.get('WorkspaceName') is not None: self.workspace_name = m.get('WorkspaceName') return self class CreateJobRequestCodeSource(TeaModel): def __init__( self, branch: str = None, code_source_id: str = None, commit: str = None, mount_path: str = None, ): # The branch of the referenced code repository. By default, the branch configured in the code source is used. This parameter is optional. self.branch = branch # The ID of the code source. self.code_source_id = code_source_id # The commit ID of the code to be downloaded. By default, the commit ID configured in the code source is used. This parameter is optional. self.commit = commit # The path to which the job is mounted. By default, the mount path configured in the data source is used. This parameter is optional. self.mount_path = mount_path def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.branch is not None: result['Branch'] = self.branch if self.code_source_id is not None: result['CodeSourceId'] = self.code_source_id if self.commit is not None: result['Commit'] = self.commit if self.mount_path is not None: result['MountPath'] = self.mount_path return result def from_map(self, m: dict = None): m = m or dict() if m.get('Branch') is not None: self.branch = m.get('Branch') if m.get('CodeSourceId') is not None: self.code_source_id = m.get('CodeSourceId') if m.get('Commit') is not None: self.commit = m.get('Commit') if m.get('MountPath') is not None: self.mount_path = m.get('MountPath') return self class CreateJobRequestDataSources(TeaModel): def __init__( self, data_source_id: str = None, data_source_version: str = None, mount_access: str = None, mount_path: str = None, options: str = None, uri: str = None, ): # The data source ID. self.data_source_id = data_source_id self.data_source_version = data_source_version self.mount_access = mount_access # The path to which the job is mounted. By default, the mount path in the data source configuration is used. This parameter is optional. self.mount_path = mount_path # The mount attribute of the custom dataset. Set the value to OSS. self.options = options # The data source path. self.uri = uri def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.data_source_id is not None: result['DataSourceId'] = self.data_source_id if self.data_source_version is not None: result['DataSourceVersion'] = self.data_source_version if self.mount_access is not None: result['MountAccess'] = self.mount_access if self.mount_path is not None: result['MountPath'] = self.mount_path if self.options is not None: result['Options'] = self.options if self.uri is not None: result['Uri'] = self.uri return result def from_map(self, m: dict = None): m = m or dict() if m.get('DataSourceId') is not None: self.data_source_id = m.get('DataSourceId') if m.get('DataSourceVersion') is not None: self.data_source_version = m.get('DataSourceVersion') if m.get('MountAccess') is not None: self.mount_access = m.get('MountAccess') if m.get('MountPath') is not None: self.mount_path = m.get('MountPath') if m.get('Options') is not None: self.options = m.get('Options') if m.get('Uri') is not None: self.uri = m.get('Uri') return self class CreateJobRequestUserVpc(TeaModel): def __init__( self, default_route: str = None, extended_cidrs: List[str] = None, security_group_id: str = None, switch_id: str = None, vpc_id: str = None, ): # The default route. Default value: false. Valid values: # # * eth0: The default network interface is used to access the Internet through the public gateway. # * eth1: The user\\"s Elastic Network Interface is used to access the Internet through the private gateway. For more information about the configuration method, see [Enable Internet access for a DSW instance by using a private Internet NAT gateway](https://help.aliyun.com/document_detail/2525343.html). self.default_route = default_route # The extended CIDR block. # # * If you leave the SwitchId and ExtendedCIDRs parameters empty, the system automatically obtains all CIDR blocks in a VPC. # * If you configure the SwitchId and ExtendedCIDRs parameters, we recommend that you specify all CIDR blocks in a VPC. self.extended_cidrs = extended_cidrs # The ID of the security group. self.security_group_id = security_group_id # The vSwitch ID. This parameter is optional. # # * If you leave this parameter empty, the system automatically selects a vSwitch based on the inventory status. # * You can also specify a vSwitch ID. self.switch_id = switch_id # The VPC ID. self.vpc_id = vpc_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.default_route is not None: result['DefaultRoute'] = self.default_route if self.extended_cidrs is not None: result['ExtendedCIDRs'] = self.extended_cidrs if self.security_group_id is not None: result['SecurityGroupId'] = self.security_group_id if self.switch_id is not None: result['SwitchId'] = self.switch_id if self.vpc_id is not None: result['VpcId'] = self.vpc_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('DefaultRoute') is not None: self.default_route = m.get('DefaultRoute') if m.get('ExtendedCIDRs') is not None: self.extended_cidrs = m.get('ExtendedCIDRs') if m.get('SecurityGroupId') is not None: self.security_group_id = m.get('SecurityGroupId') if m.get('SwitchId') is not None: self.switch_id = m.get('SwitchId') if m.get('VpcId') is not None: self.vpc_id = m.get('VpcId') return self class CreateJobRequest(TeaModel): def __init__( self, accessibility: str = None, code_source: CreateJobRequestCodeSource = None, credential_config: CredentialConfig = None, data_sources: List[CreateJobRequestDataSources] = None, debugger_config_content: str = None, display_name: str = None, elastic_spec: JobElasticSpec = None, envs: Dict[str, str] = None, job_max_running_time_minutes: int = None, job_specs: List[JobSpec] = None, job_type: str = None, options: str = None, priority: int = None, resource_id: str = None, settings: JobSettings = None, success_policy: str = None, thirdparty_lib_dir: str = None, thirdparty_libs: List[str] = None, user_command: str = None, user_vpc: CreateJobRequestUserVpc = None, workspace_id: str = None, ): # The job visibility. Valid values: # # * PUBLIC: The job is visible to all members in the workspace. # * PRIVATE: The job is visible only to you and the administrator of the workspace. self.accessibility = accessibility # The code source of the job. Before the node of the job runs, DLC automatically downloads the configured code from the code source and mounts the code to the local path of the container. self.code_source = code_source # The access credential configuration. self.credential_config = credential_config # The data sources for job running. self.data_sources = data_sources # This parameter is not supported. self.debugger_config_content = debugger_config_content # The job name. The name must be in the following format: # # * The name must be 1 to 256 characters in length. # * The name can contain digits, letters, underscores (_), periods (.), and hyphens (-). # # This parameter is required. self.display_name = display_name # This parameter is not supported. self.elastic_spec = elastic_spec # The environment variables. self.envs = envs # The maximum running duration of the job. Unit: minutes. self.job_max_running_time_minutes = job_max_running_time_minutes # The configurations for job running, such as the image address, startup command, node resource declaration, and number of replicas.****\ # # A DLC job consists of different types of nodes. If nodes of the same type have exactly the same configuration, the configuration is called JobSpec. **JobSpecs** specifies the configurations of all types of nodes. The value is of the array type. # # This parameter is required. self.job_specs = job_specs # The job type. The value is case-sensitive. The following job types are supported: # # * TFJob # * PyTorchJob # * MPIJob # * XGBoostJob # * OneFlowJob # * ElasticBatchJob # * SlurmJob # * RayJob # # Valid values for each job type: # # * OneFlowJob: OneFlow. # * PyTorchJob: PyTorch. # * SlurmJob: Slurm. # * XGBoostJob: XGBoost. # * ElasticBatchJob: ElasticBatch. # * MPIJob: MPIJob. # * TFJob: Tensorflow. # * RayJob: Ray. # # This parameter is required. self.job_type = job_type # The additional configuration of the job. You can use this parameter to adjust the behavior of the attached data source. For example, if the attached data source of the job is of the OSS type, you can use this parameter to add the following configurations to override the default parameters of JindoFS: `fs.oss.download.thread.concurrency=4,fs.oss.download.queue.size=16`. self.options = options # The priority of the job. Default value: 1. Valid values: 1 to 9. # # * 1: the lowest priority. # * 9: the highest priority. self.priority = priority # The ID of the resource group. This parameter is optional. # # * If you leave this parameter empty, the job is submitted to a public resource group. # * If a resource quota is bound to the current workspace, you can specify the resource quota ID. For more information about how to query the resource quota ID, see [Manage resource quotas](https://help.aliyun.com/document_detail/2651299.html). self.resource_id = resource_id # The additional parameter configurations of the job. self.settings = settings # The policy that is used to check whether a distributed multi-node job is successful. Only TensorFlow distributed multi-node jobs are supported. # # * ChiefWorker: If you use this policy, the job is considered successful when the pod on the chief node completes operations. # * AllWorkers (default): If you use this policy, the job is considered successful when all worker nodes complete operations. self.success_policy = success_policy # The folder in which the third-party Python library file requirements.txt is stored. Before the startup command specified by the UserCommand parameter is run on each node, DLC fetches the requirements.txt file from the folder and runs `pip install -r` to install the required package and library. self.thirdparty_lib_dir = thirdparty_lib_dir # The third-party Python libraries to be installed. self.thirdparty_libs = thirdparty_libs # The startup command for all nodes of the job. # # This parameter is required. self.user_command = user_command # The VPC settings. self.user_vpc = user_vpc # The workspace ID. self.workspace_id = workspace_id def validate(self): if self.code_source: self.code_source.validate() if self.credential_config: self.credential_config.validate() if self.data_sources: for k in self.data_sources: if k: k.validate() if self.elastic_spec: self.elastic_spec.validate() if self.job_specs: for k in self.job_specs: if k: k.validate() if self.settings: self.settings.validate() if self.user_vpc: self.user_vpc.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.accessibility is not None: result['Accessibility'] = self.accessibility if self.code_source is not None: result['CodeSource'] = self.code_source.to_map() if self.credential_config is not None: result['CredentialConfig'] = self.credential_config.to_map() result['DataSources'] = [] if self.data_sources is not None: for k in self.data_sources: result['DataSources'].append(k.to_map() if k else None) if self.debugger_config_content is not None: result['DebuggerConfigContent'] = self.debugger_config_content if self.display_name is not None: result['DisplayName'] = self.display_name if self.elastic_spec is not None: result['ElasticSpec'] = self.elastic_spec.to_map() if self.envs is not None: result['Envs'] = self.envs if self.job_max_running_time_minutes is not None: result['JobMaxRunningTimeMinutes'] = self.job_max_running_time_minutes result['JobSpecs'] = [] if self.job_specs is not None: for k in self.job_specs: result['JobSpecs'].append(k.to_map() if k else None) if self.job_type is not None: result['JobType'] = self.job_type if self.options is not None: result['Options'] = self.options if self.priority is not None: result['Priority'] = self.priority if self.resource_id is not None: result['ResourceId'] = self.resource_id if self.settings is not None: result['Settings'] = self.settings.to_map() if self.success_policy is not None: result['SuccessPolicy'] = self.success_policy if self.thirdparty_lib_dir is not None: result['ThirdpartyLibDir'] = self.thirdparty_lib_dir if self.thirdparty_libs is not None: result['ThirdpartyLibs'] = self.thirdparty_libs if self.user_command is not None: result['UserCommand'] = self.user_command if self.user_vpc is not None: result['UserVpc'] = self.user_vpc.to_map() if self.workspace_id is not None: result['WorkspaceId'] = self.workspace_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('Accessibility') is not None: self.accessibility = m.get('Accessibility') if m.get('CodeSource') is not None: temp_model = CreateJobRequestCodeSource() self.code_source = temp_model.from_map(m['CodeSource']) if m.get('CredentialConfig') is not None: temp_model = CredentialConfig() self.credential_config = temp_model.from_map(m['CredentialConfig']) self.data_sources = [] if m.get('DataSources') is not None: for k in m.get('DataSources'): temp_model = CreateJobRequestDataSources() self.data_sources.append(temp_model.from_map(k)) if m.get('DebuggerConfigContent') is not None: self.debugger_config_content = m.get('DebuggerConfigContent') if m.get('DisplayName') is not None: self.display_name = m.get('DisplayName') if m.get('ElasticSpec') is not None: temp_model = JobElasticSpec() self.elastic_spec = temp_model.from_map(m['ElasticSpec']) if m.get('Envs') is not None: self.envs = m.get('Envs') if m.get('JobMaxRunningTimeMinutes') is not None: self.job_max_running_time_minutes = m.get('JobMaxRunningTimeMinutes') self.job_specs = [] if m.get('JobSpecs') is not None: for k in m.get('JobSpecs'): temp_model = JobSpec() self.job_specs.append(temp_model.from_map(k)) if m.get('JobType') is not None: self.job_type = m.get('JobType') if m.get('Options') is not None: self.options = m.get('Options') if m.get('Priority') is not None: self.priority = m.get('Priority') if m.get('ResourceId') is not None: self.resource_id = m.get('ResourceId') if m.get('Settings') is not None: temp_model = JobSettings() self.settings = temp_model.from_map(m['Settings']) if m.get('SuccessPolicy') is not None: self.success_policy = m.get('SuccessPolicy') if m.get('ThirdpartyLibDir') is not None: self.thirdparty_lib_dir = m.get('ThirdpartyLibDir') if m.get('ThirdpartyLibs') is not None: self.thirdparty_libs = m.get('ThirdpartyLibs') if m.get('UserCommand') is not None: self.user_command = m.get('UserCommand') if m.get('UserVpc') is not None: temp_model = CreateJobRequestUserVpc() self.user_vpc = temp_model.from_map(m['UserVpc']) if m.get('WorkspaceId') is not None: self.workspace_id = m.get('WorkspaceId') return self class CreateJobResponseBody(TeaModel): def __init__( self, job_id: str = None, request_id: str = None, ): # The job ID. self.job_id = job_id # The request ID used to troubleshoot issues. self.request_id = request_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.job_id is not None: result['JobId'] = self.job_id if self.request_id is not None: result['RequestId'] = self.request_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('JobId') is not None: self.job_id = m.get('JobId') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') return self class CreateJobResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: CreateJobResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = CreateJobResponseBody() self.body = temp_model.from_map(m['body']) return self class CreateTensorboardRequest(TeaModel): def __init__( self, accessibility: str = None, cpu: int = None, data_source_id: str = None, data_source_type: str = None, data_sources: List[DataSourceItem] = None, display_name: str = None, job_id: str = None, max_running_time_minutes: int = None, memory: int = None, options: str = None, priority: str = None, quota_id: str = None, source_id: str = None, source_type: str = None, summary_path: str = None, summary_relative_path: str = None, tensorboard_data_sources: List[TensorboardDataSourceSpec] = None, tensorboard_spec: TensorboardSpec = None, uri: str = None, workspace_id: str = None, ): # The visibility of the job. Valid values: # # * PUBLIC: The configuration is public in the workspace. # * PRIVATE: The configuration is visible only to you and the administrator of the workspace. self.accessibility = accessibility # The number of vCPU cores. self.cpu = cpu # The dataset ID. # <props="china">Call [ListDatasets](https://help.aliyun.com/document_detail/457222.html) to get the dataset ID. self.data_source_id = data_source_id # The dataset type. Valid values: # # * OSS # * NAS self.data_source_type = data_source_type # The configurations of the data source. self.data_sources = data_sources # The TensorBoard name self.display_name = display_name # The job ID. Call [ListJobs](https://help.aliyun.com/document_detail/459676.html) to get the job ID. self.job_id = job_id # The maximum running duration. Unit: minutes. self.max_running_time_minutes = max_running_time_minutes # The memory size. Unit: GB. self.memory = memory # The extended fields of the dataset are in the JSON format. MountPath: the path to mount the dataset. self.options = options # The priority of the job. Default value: 1. Valid values: 1 to 9. # # * 1 is the lowest priority. # * 9 is the highest priority. self.priority = priority # The resource quota ID. This parameter is required when you create a TensorBoard job by using a resource quota. <props="china">Call [ListQuotas](https://help.aliyun.com/document_detail/2628071.html) to get the quota ID. # This feature is currently limited to whitelisted users. If you need to use this feature, contact us. self.quota_id = quota_id # The source ID. self.source_id = source_id # The source type. self.source_type = source_type # The directory of summary. self.summary_path = summary_path # The relative path of summary. self.summary_relative_path = summary_relative_path # The configurations of datasets mounted with the TensorBoard job. self.tensorboard_data_sources = tensorboard_data_sources # The pay-as-you-go configuration of TensorBoard, which is used to create TensorBoard jobs that use pay-as-you-go resources. self.tensorboard_spec = tensorboard_spec # The dataset URI. # # * Value format when DataSourceType is set to OSS: `oss://[oss-bucket].[endpoint]/[path]`. # * Value format when DataSourceType is set to NAS:`nas://[nas-filesystem-id].[region]/[path]`. self.uri = uri # The workspace ID. # <props="china">Call [ListWorkspaces](https://help.aliyun.com/document_detail/449124.html) to obtain the workspace ID. self.workspace_id = workspace_id def validate(self): if self.data_sources: for k in self.data_sources: if k: k.validate() if self.tensorboard_data_sources: for k in self.tensorboard_data_sources: if k: k.validate() if self.tensorboard_spec: self.tensorboard_spec.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.accessibility is not None: result['Accessibility'] = self.accessibility if self.cpu is not None: result['Cpu'] = self.cpu if self.data_source_id is not None: result['DataSourceId'] = self.data_source_id if self.data_source_type is not None: result['DataSourceType'] = self.data_source_type result['DataSources'] = [] if self.data_sources is not None: for k in self.data_sources: result['DataSources'].append(k.to_map() if k else None) if self.display_name is not None: result['DisplayName'] = self.display_name if self.job_id is not None: result['JobId'] = self.job_id if self.max_running_time_minutes is not None: result['MaxRunningTimeMinutes'] = self.max_running_time_minutes if self.memory is not None: result['Memory'] = self.memory if self.options is not None: result['Options'] = self.options if self.priority is not None: result['Priority'] = self.priority if self.quota_id is not None: result['QuotaId'] = self.quota_id if self.source_id is not None: result['SourceId'] = self.source_id if self.source_type is not None: result['SourceType'] = self.source_type if self.summary_path is not None: result['SummaryPath'] = self.summary_path if self.summary_relative_path is not None: result['SummaryRelativePath'] = self.summary_relative_path result['TensorboardDataSources'] = [] if self.tensorboard_data_sources is not None: for k in self.tensorboard_data_sources: result['TensorboardDataSources'].append(k.to_map() if k else None) if self.tensorboard_spec is not None: result['TensorboardSpec'] = self.tensorboard_spec.to_map() if self.uri is not None: result['Uri'] = self.uri if self.workspace_id is not None: result['WorkspaceId'] = self.workspace_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('Accessibility') is not None: self.accessibility = m.get('Accessibility') if m.get('Cpu') is not None: self.cpu = m.get('Cpu') if m.get('DataSourceId') is not None: self.data_source_id = m.get('DataSourceId') if m.get('DataSourceType') is not None: self.data_source_type = m.get('DataSourceType') self.data_sources = [] if m.get('DataSources') is not None: for k in m.get('DataSources'): temp_model = DataSourceItem() self.data_sources.append(temp_model.from_map(k)) if m.get('DisplayName') is not None: self.display_name = m.get('DisplayName') if m.get('JobId') is not None: self.job_id = m.get('JobId') if m.get('MaxRunningTimeMinutes') is not None: self.max_running_time_minutes = m.get('MaxRunningTimeMinutes') if m.get('Memory') is not None: self.memory = m.get('Memory') if m.get('Options') is not None: self.options = m.get('Options') if m.get('Priority') is not None: self.priority = m.get('Priority') if m.get('QuotaId') is not None: self.quota_id = m.get('QuotaId') if m.get('SourceId') is not None: self.source_id = m.get('SourceId') if m.get('SourceType') is not None: self.source_type = m.get('SourceType') if m.get('SummaryPath') is not None: self.summary_path = m.get('SummaryPath') if m.get('SummaryRelativePath') is not None: self.summary_relative_path = m.get('SummaryRelativePath') self.tensorboard_data_sources = [] if m.get('TensorboardDataSources') is not None: for k in m.get('TensorboardDataSources'): temp_model = TensorboardDataSourceSpec() self.tensorboard_data_sources.append(temp_model.from_map(k)) if m.get('TensorboardSpec') is not None: temp_model = TensorboardSpec() self.tensorboard_spec = temp_model.from_map(m['TensorboardSpec']) if m.get('Uri') is not None: self.uri = m.get('Uri') if m.get('WorkspaceId') is not None: self.workspace_id = m.get('WorkspaceId') return self class CreateTensorboardResponseBody(TeaModel): def __init__( self, data_source_id: str = None, job_id: str = None, request_id: str = None, tensorboard_id: str = None, ): # The dataset ID. self.data_source_id = data_source_id # The job ID. self.job_id = job_id # The ID of the request. self.request_id = request_id # TensorBoard ID self.tensorboard_id = tensorboard_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.data_source_id is not None: result['DataSourceId'] = self.data_source_id if self.job_id is not None: result['JobId'] = self.job_id if self.request_id is not None: result['RequestId'] = self.request_id if self.tensorboard_id is not None: result['TensorboardId'] = self.tensorboard_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('DataSourceId') is not None: self.data_source_id = m.get('DataSourceId') if m.get('JobId') is not None: self.job_id = m.get('JobId') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('TensorboardId') is not None: self.tensorboard_id = m.get('TensorboardId') return self class CreateTensorboardResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: CreateTensorboardResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = CreateTensorboardResponseBody() self.body = temp_model.from_map(m['body']) return self class DeleteJobResponseBody(TeaModel): def __init__( self, job_id: str = None, request_id: str = None, ): # The job ID. self.job_id = job_id # The request ID. You can troubleshoot issues based on the request ID. self.request_id = request_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.job_id is not None: result['JobId'] = self.job_id if self.request_id is not None: result['RequestId'] = self.request_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('JobId') is not None: self.job_id = m.get('JobId') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') return self class DeleteJobResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: DeleteJobResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = DeleteJobResponseBody() self.body = temp_model.from_map(m['body']) return self class DeleteTensorboardRequest(TeaModel): def __init__( self, workspace_id: str = None, ): # The workspace ID. # <props="china">For more information about how to obtain the workspace ID, see [ListWorkspaces](https://help.aliyun.com/document_detail/449124.html). self.workspace_id = workspace_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.workspace_id is not None: result['WorkspaceId'] = self.workspace_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('WorkspaceId') is not None: self.workspace_id = m.get('WorkspaceId') return self class DeleteTensorboardResponseBody(TeaModel): def __init__( self, request_id: str = None, tensorboard_id: str = None, ): # The request ID. self.request_id = request_id # The TensorBoard ID. self.tensorboard_id = tensorboard_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.request_id is not None: result['RequestId'] = self.request_id if self.tensorboard_id is not None: result['TensorboardId'] = self.tensorboard_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('TensorboardId') is not None: self.tensorboard_id = m.get('TensorboardId') return self class DeleteTensorboardResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: DeleteTensorboardResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = DeleteTensorboardResponseBody() self.body = temp_model.from_map(m['body']) return self class GetJobRequest(TeaModel): def __init__( self, need_detail: bool = None, ): # Specifies whether to return the job details. Default value: true. self.need_detail = need_detail def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.need_detail is not None: result['NeedDetail'] = self.need_detail return result def from_map(self, m: dict = None): m = m or dict() if m.get('NeedDetail') is not None: self.need_detail = m.get('NeedDetail') return self class GetJobResponseBodyCodeSource(TeaModel): def __init__( self, branch: str = None, code_source_id: str = None, commit: str = None, mount_path: str = None, ): # The code branch. self.branch = branch # The code source ID. self.code_source_id = code_source_id # The code commit ID self.commit = commit # The local mount path. self.mount_path = mount_path def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.branch is not None: result['Branch'] = self.branch if self.code_source_id is not None: result['CodeSourceId'] = self.code_source_id if self.commit is not None: result['Commit'] = self.commit if self.mount_path is not None: result['MountPath'] = self.mount_path return result def from_map(self, m: dict = None): m = m or dict() if m.get('Branch') is not None: self.branch = m.get('Branch') if m.get('CodeSourceId') is not None: self.code_source_id = m.get('CodeSourceId') if m.get('Commit') is not None: self.commit = m.get('Commit') if m.get('MountPath') is not None: self.mount_path = m.get('MountPath') return self class GetJobResponseBodyDataSources(TeaModel): def __init__( self, data_source_id: str = None, mount_path: str = None, uri: str = None, ): # The data source ID. self.data_source_id = data_source_id # The local mount path. This parameter is optional. The default value is empty, which specifies that the mount path in the data source is used. self.mount_path = mount_path # The data source URL. self.uri = uri def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.data_source_id is not None: result['DataSourceId'] = self.data_source_id if self.mount_path is not None: result['MountPath'] = self.mount_path if self.uri is not None: result['Uri'] = self.uri return result def from_map(self, m: dict = None): m = m or dict() if m.get('DataSourceId') is not None: self.data_source_id = m.get('DataSourceId') if m.get('MountPath') is not None: self.mount_path = m.get('MountPath') if m.get('Uri') is not None: self.uri = m.get('Uri') return self class GetJobResponseBodyPodsHistoryPods(TeaModel): def __init__( self, gmt_create_time: str = None, gmt_finish_time: str = None, gmt_start_time: str = None, ip: str = None, pod_id: str = None, pod_uid: str = None, resource_type: str = None, status: str = None, sub_status: str = None, type: str = None, ): # The time when the node was created (UTC). self.gmt_create_time = gmt_create_time # The end time of the node (UTC). self.gmt_finish_time = gmt_finish_time # The start time of the node (UTC). self.gmt_start_time = gmt_start_time # The IP address of the node. self.ip = ip # The ID of the node. self.pod_id = pod_id # The UID of the node. self.pod_uid = pod_uid # The resource type of the node. self.resource_type = resource_type # The status of the node. self.status = status # The sub-status of the node, such as its preemption status. Valid values: # # * Normal # * Evicted self.sub_status = sub_status # The type of the node. self.type = type def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_finish_time is not None: result['GmtFinishTime'] = self.gmt_finish_time if self.gmt_start_time is not None: result['GmtStartTime'] = self.gmt_start_time if self.ip is not None: result['Ip'] = self.ip if self.pod_id is not None: result['PodId'] = self.pod_id if self.pod_uid is not None: result['PodUid'] = self.pod_uid if self.resource_type is not None: result['ResourceType'] = self.resource_type if self.status is not None: result['Status'] = self.status if self.sub_status is not None: result['SubStatus'] = self.sub_status if self.type is not None: result['Type'] = self.type return result def from_map(self, m: dict = None): m = m or dict() if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtFinishTime') is not None: self.gmt_finish_time = m.get('GmtFinishTime') if m.get('GmtStartTime') is not None: self.gmt_start_time = m.get('GmtStartTime') if m.get('Ip') is not None: self.ip = m.get('Ip') if m.get('PodId') is not None: self.pod_id = m.get('PodId') if m.get('PodUid') is not None: self.pod_uid = m.get('PodUid') if m.get('ResourceType') is not None: self.resource_type = m.get('ResourceType') if m.get('Status') is not None: self.status = m.get('Status') if m.get('SubStatus') is not None: self.sub_status = m.get('SubStatus') if m.get('Type') is not None: self.type = m.get('Type') return self class GetJobResponseBodyPods(TeaModel): def __init__( self, gmt_create_time: str = None, gmt_finish_time: str = None, gmt_start_time: str = None, history_pods: List[GetJobResponseBodyPodsHistoryPods] = None, ip: str = None, pod_id: str = None, pod_uid: str = None, resource_type: str = None, status: str = None, sub_status: str = None, type: str = None, ): # The time when the node was created (UTC). self.gmt_create_time = gmt_create_time # The end time of the node (UTC). self.gmt_finish_time = gmt_finish_time # The start time of the node (UTC). self.gmt_start_time = gmt_start_time # The historical nodes. self.history_pods = history_pods # The IP address of the node. self.ip = ip # The node ID. It can be used in the GetPodLogs and GetPodEvents operations to obtain the detailed logs and events of the node. self.pod_id = pod_id # The UID of the node. self.pod_uid = pod_uid # The resource type of the node. self.resource_type = resource_type # The status of the node. Valid values: # # * Pending # * Running # * Succeeded # * Failed # * Unknown self.status = status # The sub-status of the node, such as its preemption status. Valid values: # # * Normal # * Evicted self.sub_status = sub_status # The node type, which corresponds to a specific JobSpec in JobSpecs of the CreateJob operation. self.type = type def validate(self): if self.history_pods: for k in self.history_pods: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_finish_time is not None: result['GmtFinishTime'] = self.gmt_finish_time if self.gmt_start_time is not None: result['GmtStartTime'] = self.gmt_start_time result['HistoryPods'] = [] if self.history_pods is not None: for k in self.history_pods: result['HistoryPods'].append(k.to_map() if k else None) if self.ip is not None: result['Ip'] = self.ip if self.pod_id is not None: result['PodId'] = self.pod_id if self.pod_uid is not None: result['PodUid'] = self.pod_uid if self.resource_type is not None: result['ResourceType'] = self.resource_type if self.status is not None: result['Status'] = self.status if self.sub_status is not None: result['SubStatus'] = self.sub_status if self.type is not None: result['Type'] = self.type return result def from_map(self, m: dict = None): m = m or dict() if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtFinishTime') is not None: self.gmt_finish_time = m.get('GmtFinishTime') if m.get('GmtStartTime') is not None: self.gmt_start_time = m.get('GmtStartTime') self.history_pods = [] if m.get('HistoryPods') is not None: for k in m.get('HistoryPods'): temp_model = GetJobResponseBodyPodsHistoryPods() self.history_pods.append(temp_model.from_map(k)) if m.get('Ip') is not None: self.ip = m.get('Ip') if m.get('PodId') is not None: self.pod_id = m.get('PodId') if m.get('PodUid') is not None: self.pod_uid = m.get('PodUid') if m.get('ResourceType') is not None: self.resource_type = m.get('ResourceType') if m.get('Status') is not None: self.status = m.get('Status') if m.get('SubStatus') is not None: self.sub_status = m.get('SubStatus') if m.get('Type') is not None: self.type = m.get('Type') return self class GetJobResponseBodyUserVpc(TeaModel): def __init__( self, default_route: str = None, extended_cidrs: List[str] = None, security_group_id: str = None, switch_id: str = None, vpc_id: str = None, ): # The default router. This parameter is valid only for general-purpose computing resources. Valid values: # # eth0: The default network interface is used to access the Internet through the public gateway. eth1: The user\\"s Elastic Network Interface is used to access the Internet through the private gateway. self.default_route = default_route # The extended CIDR block. Example: 192.168.0.1/24. self.extended_cidrs = extended_cidrs # The security group ID. self.security_group_id = security_group_id # The vSwitch ID. self.switch_id = switch_id # The VPC ID. self.vpc_id = vpc_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.default_route is not None: result['DefaultRoute'] = self.default_route if self.extended_cidrs is not None: result['ExtendedCidrs'] = self.extended_cidrs if self.security_group_id is not None: result['SecurityGroupId'] = self.security_group_id if self.switch_id is not None: result['SwitchId'] = self.switch_id if self.vpc_id is not None: result['VpcId'] = self.vpc_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('DefaultRoute') is not None: self.default_route = m.get('DefaultRoute') if m.get('ExtendedCidrs') is not None: self.extended_cidrs = m.get('ExtendedCidrs') if m.get('SecurityGroupId') is not None: self.security_group_id = m.get('SecurityGroupId') if m.get('SwitchId') is not None: self.switch_id = m.get('SwitchId') if m.get('VpcId') is not None: self.vpc_id = m.get('VpcId') return self class GetJobResponseBody(TeaModel): def __init__( self, accessibility: str = None, cluster_id: str = None, code_source: GetJobResponseBodyCodeSource = None, credential_config: CredentialConfig = None, data_sources: List[GetJobResponseBodyDataSources] = None, display_name: str = None, duration: int = None, elastic_spec: JobElasticSpec = None, enabled_debugger: bool = None, envs: Dict[str, str] = None, gmt_create_time: str = None, gmt_failed_time: str = None, gmt_finish_time: str = None, gmt_running_time: str = None, gmt_stopped_time: str = None, gmt_submitted_time: str = None, gmt_successed_time: str = None, job_id: str = None, job_specs: List[JobSpec] = None, job_type: str = None, pods: List[GetJobResponseBodyPods] = None, priority: int = None, reason_code: str = None, reason_message: str = None, request_id: str = None, resource_id: str = None, resource_level: str = None, resource_type: str = None, restart_times: str = None, settings: JobSettings = None, status: str = None, status_history: List[StatusTransitionItem] = None, sub_status: str = None, tenant_id: str = None, thirdparty_lib_dir: str = None, thirdparty_libs: List[str] = None, user_command: str = None, user_id: str = None, user_vpc: GetJobResponseBodyUserVpc = None, workspace_id: str = None, workspace_name: str = None, ): # The visibility of the job. Valid values: # # * PUBLIC: The code is public in the workspace. # * PRIVATE: The workspace is visible only to you and the administrator of the workspace. This is the default value. self.accessibility = accessibility # The cluster ID. self.cluster_id = cluster_id # The code source. self.code_source = code_source # The access credential configurations. self.credential_config = credential_config # The data sources. self.data_sources = data_sources # The job name. self.display_name = display_name # The duration of the job (seconds). self.duration = duration # The elastic job parameters. self.elastic_spec = elastic_spec # Specifies whether to enable the debugger job. self.enabled_debugger = enabled_debugger # The configurations of environment variables. self.envs = envs # The time when the job was created (UTC). self.gmt_create_time = gmt_create_time # The time of the job failed (UTC). self.gmt_failed_time = gmt_failed_time # The time when the job ended (UTC). self.gmt_finish_time = gmt_finish_time # The start time of the job (UTC). self.gmt_running_time = gmt_running_time # The time when the job stopped (UTC). self.gmt_stopped_time = gmt_stopped_time # The time when the job was submitted to the cluster (UTC). self.gmt_submitted_time = gmt_submitted_time # The time when the job succeeded (UTC). self.gmt_successed_time = gmt_successed_time # The job ID. self.job_id = job_id # The node configurations of the job, which is **JobSpecs** in the CreateJob operation. self.job_specs = job_specs # The job type. Specified by the JobType parameter of the [CreateJob](https://help.aliyun.com/document_detail/459672.html) operation. self.job_type = job_type # All running nodes of the job. self.pods = pods # The priority of the job. Valid values: 1 to 9. self.priority = priority # The status detail code, which is a sub-status under the current status. self.reason_code = reason_code # The description of the status detail code. self.reason_message = reason_message # The request ID, which can be used for troubleshooting. self.request_id = request_id # The ID of the resource group to which the job belongs. self.resource_id = resource_id # The resource level that the job uses. self.resource_level = resource_level # The resource type. Valid values: ECS, Lingjun, and ACS. self.resource_type = resource_type # The number of retries and the maximum number of retries used by the job. self.restart_times = restart_times # The settings of the additional parameters of the job. self.settings = settings # The status of the job. Valid values: # # * Creating # * Queuing # * Bidding (Only for Lingjun preemptible jobs) # * EnvPreparing # * SanityChecking # * Running # * Restarting # * Stopping # * SucceededReserving # * FailedReserving # * Succeeded # * Failed # * Stopped self.status = status # The status history. self.status_history = status_history # The sub-status of the job, such as its preemption status. self.sub_status = sub_status # The tenant ID. self.tenant_id = tenant_id # The directory that contains requirements.txt. self.thirdparty_lib_dir = thirdparty_lib_dir # The third-party Python libraries to be installed. self.thirdparty_libs = thirdparty_libs # The command that is run to start each node. self.user_command = user_command # The UID of the Alibaba Cloud account who submitted the job. self.user_id = user_id # The VPC of the user. self.user_vpc = user_vpc # The ID of the workspace to which the job belongs. self.workspace_id = workspace_id # The name of the workspace to which the job belongs. self.workspace_name = workspace_name def validate(self): if self.code_source: self.code_source.validate() if self.credential_config: self.credential_config.validate() if self.data_sources: for k in self.data_sources: if k: k.validate() if self.elastic_spec: self.elastic_spec.validate() if self.job_specs: for k in self.job_specs: if k: k.validate() if self.pods: for k in self.pods: if k: k.validate() if self.settings: self.settings.validate() if self.status_history: for k in self.status_history: if k: k.validate() if self.user_vpc: self.user_vpc.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.accessibility is not None: result['Accessibility'] = self.accessibility if self.cluster_id is not None: result['ClusterId'] = self.cluster_id if self.code_source is not None: result['CodeSource'] = self.code_source.to_map() if self.credential_config is not None: result['CredentialConfig'] = self.credential_config.to_map() result['DataSources'] = [] if self.data_sources is not None: for k in self.data_sources: result['DataSources'].append(k.to_map() if k else None) if self.display_name is not None: result['DisplayName'] = self.display_name if self.duration is not None: result['Duration'] = self.duration if self.elastic_spec is not None: result['ElasticSpec'] = self.elastic_spec.to_map() if self.enabled_debugger is not None: result['EnabledDebugger'] = self.enabled_debugger if self.envs is not None: result['Envs'] = self.envs if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_failed_time is not None: result['GmtFailedTime'] = self.gmt_failed_time if self.gmt_finish_time is not None: result['GmtFinishTime'] = self.gmt_finish_time if self.gmt_running_time is not None: result['GmtRunningTime'] = self.gmt_running_time if self.gmt_stopped_time is not None: result['GmtStoppedTime'] = self.gmt_stopped_time if self.gmt_submitted_time is not None: result['GmtSubmittedTime'] = self.gmt_submitted_time if self.gmt_successed_time is not None: result['GmtSuccessedTime'] = self.gmt_successed_time if self.job_id is not None: result['JobId'] = self.job_id result['JobSpecs'] = [] if self.job_specs is not None: for k in self.job_specs: result['JobSpecs'].append(k.to_map() if k else None) if self.job_type is not None: result['JobType'] = self.job_type result['Pods'] = [] if self.pods is not None: for k in self.pods: result['Pods'].append(k.to_map() if k else None) if self.priority is not None: result['Priority'] = self.priority if self.reason_code is not None: result['ReasonCode'] = self.reason_code if self.reason_message is not None: result['ReasonMessage'] = self.reason_message if self.request_id is not None: result['RequestId'] = self.request_id if self.resource_id is not None: result['ResourceId'] = self.resource_id if self.resource_level is not None: result['ResourceLevel'] = self.resource_level if self.resource_type is not None: result['ResourceType'] = self.resource_type if self.restart_times is not None: result['RestartTimes'] = self.restart_times if self.settings is not None: result['Settings'] = self.settings.to_map() if self.status is not None: result['Status'] = self.status result['StatusHistory'] = [] if self.status_history is not None: for k in self.status_history: result['StatusHistory'].append(k.to_map() if k else None) if self.sub_status is not None: result['SubStatus'] = self.sub_status if self.tenant_id is not None: result['TenantId'] = self.tenant_id if self.thirdparty_lib_dir is not None: result['ThirdpartyLibDir'] = self.thirdparty_lib_dir if self.thirdparty_libs is not None: result['ThirdpartyLibs'] = self.thirdparty_libs if self.user_command is not None: result['UserCommand'] = self.user_command if self.user_id is not None: result['UserId'] = self.user_id if self.user_vpc is not None: result['UserVpc'] = self.user_vpc.to_map() if self.workspace_id is not None: result['WorkspaceId'] = self.workspace_id if self.workspace_name is not None: result['WorkspaceName'] = self.workspace_name return result def from_map(self, m: dict = None): m = m or dict() if m.get('Accessibility') is not None: self.accessibility = m.get('Accessibility') if m.get('ClusterId') is not None: self.cluster_id = m.get('ClusterId') if m.get('CodeSource') is not None: temp_model = GetJobResponseBodyCodeSource() self.code_source = temp_model.from_map(m['CodeSource']) if m.get('CredentialConfig') is not None: temp_model = CredentialConfig() self.credential_config = temp_model.from_map(m['CredentialConfig']) self.data_sources = [] if m.get('DataSources') is not None: for k in m.get('DataSources'): temp_model = GetJobResponseBodyDataSources() self.data_sources.append(temp_model.from_map(k)) if m.get('DisplayName') is not None: self.display_name = m.get('DisplayName') if m.get('Duration') is not None: self.duration = m.get('Duration') if m.get('ElasticSpec') is not None: temp_model = JobElasticSpec() self.elastic_spec = temp_model.from_map(m['ElasticSpec']) if m.get('EnabledDebugger') is not None: self.enabled_debugger = m.get('EnabledDebugger') if m.get('Envs') is not None: self.envs = m.get('Envs') if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtFailedTime') is not None: self.gmt_failed_time = m.get('GmtFailedTime') if m.get('GmtFinishTime') is not None: self.gmt_finish_time = m.get('GmtFinishTime') if m.get('GmtRunningTime') is not None: self.gmt_running_time = m.get('GmtRunningTime') if m.get('GmtStoppedTime') is not None: self.gmt_stopped_time = m.get('GmtStoppedTime') if m.get('GmtSubmittedTime') is not None: self.gmt_submitted_time = m.get('GmtSubmittedTime') if m.get('GmtSuccessedTime') is not None: self.gmt_successed_time = m.get('GmtSuccessedTime') if m.get('JobId') is not None: self.job_id = m.get('JobId') self.job_specs = [] if m.get('JobSpecs') is not None: for k in m.get('JobSpecs'): temp_model = JobSpec() self.job_specs.append(temp_model.from_map(k)) if m.get('JobType') is not None: self.job_type = m.get('JobType') self.pods = [] if m.get('Pods') is not None: for k in m.get('Pods'): temp_model = GetJobResponseBodyPods() self.pods.append(temp_model.from_map(k)) if m.get('Priority') is not None: self.priority = m.get('Priority') if m.get('ReasonCode') is not None: self.reason_code = m.get('ReasonCode') if m.get('ReasonMessage') is not None: self.reason_message = m.get('ReasonMessage') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('ResourceId') is not None: self.resource_id = m.get('ResourceId') if m.get('ResourceLevel') is not None: self.resource_level = m.get('ResourceLevel') if m.get('ResourceType') is not None: self.resource_type = m.get('ResourceType') if m.get('RestartTimes') is not None: self.restart_times = m.get('RestartTimes') if m.get('Settings') is not None: temp_model = JobSettings() self.settings = temp_model.from_map(m['Settings']) if m.get('Status') is not None: self.status = m.get('Status') self.status_history = [] if m.get('StatusHistory') is not None: for k in m.get('StatusHistory'): temp_model = StatusTransitionItem() self.status_history.append(temp_model.from_map(k)) if m.get('SubStatus') is not None: self.sub_status = m.get('SubStatus') if m.get('TenantId') is not None: self.tenant_id = m.get('TenantId') if m.get('ThirdpartyLibDir') is not None: self.thirdparty_lib_dir = m.get('ThirdpartyLibDir') if m.get('ThirdpartyLibs') is not None: self.thirdparty_libs = m.get('ThirdpartyLibs') if m.get('UserCommand') is not None: self.user_command = m.get('UserCommand') if m.get('UserId') is not None: self.user_id = m.get('UserId') if m.get('UserVpc') is not None: temp_model = GetJobResponseBodyUserVpc() self.user_vpc = temp_model.from_map(m['UserVpc']) if m.get('WorkspaceId') is not None: self.workspace_id = m.get('WorkspaceId') if m.get('WorkspaceName') is not None: self.workspace_name = m.get('WorkspaceName') return self class GetJobResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: GetJobResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = GetJobResponseBody() self.body = temp_model.from_map(m['body']) return self class GetJobEventsRequest(TeaModel): def __init__( self, end_time: str = None, max_events_num: int = None, start_time: str = None, ): # The end time (UTC) of the time range for querying events. The default value is the current time. self.end_time = end_time # The maximum number of events that can be returned. Default value: 2000. self.max_events_num = max_events_num # The start time (UTC) of the time range for querying events. The default value is 7 days ago. self.start_time = start_time def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.end_time is not None: result['EndTime'] = self.end_time if self.max_events_num is not None: result['MaxEventsNum'] = self.max_events_num if self.start_time is not None: result['StartTime'] = self.start_time return result def from_map(self, m: dict = None): m = m or dict() if m.get('EndTime') is not None: self.end_time = m.get('EndTime') if m.get('MaxEventsNum') is not None: self.max_events_num = m.get('MaxEventsNum') if m.get('StartTime') is not None: self.start_time = m.get('StartTime') return self class GetJobEventsResponseBody(TeaModel): def __init__( self, events: List[str] = None, job_id: str = None, request_id: str = None, ): # The events. self.events = events # The job ID. self.job_id = job_id # The request ID, which can be used for troubleshooting. self.request_id = request_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.events is not None: result['Events'] = self.events if self.job_id is not None: result['JobId'] = self.job_id if self.request_id is not None: result['RequestId'] = self.request_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('Events') is not None: self.events = m.get('Events') if m.get('JobId') is not None: self.job_id = m.get('JobId') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') return self class GetJobEventsResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: GetJobEventsResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = GetJobEventsResponseBody() self.body = temp_model.from_map(m['body']) return self class GetJobMetricsRequest(TeaModel): def __init__( self, end_time: str = None, metric_type: str = None, start_time: str = None, time_step: str = None, token: str = None, ): # The end time of the time range to query monitoring data. The time is displayed in UTC. The default value is the current time. self.end_time = end_time # The type of the monitoring metrics. Valid values: # # * GpuCoreUsage: GPU utilization # * GpuMemoryUsage: GPU memory utilization # * CpuCoreUsage: CPU utilization # * MemoryUsage: memory utilization # * NetworkInputRate: the network write in rate. # * NetworkOutputRate: the network write out rate # * DiskReadRate: the disk read rate # * DiskWriteRate: the disk write rate # # This parameter is required. self.metric_type = metric_type # The beginning of the time range to query monitoring data. The time is displayed in UTC. The default value is the time 1 hour before the current time. self.start_time = start_time # The interval at which monitoring data is returned. Default value: 5. Unit: minutes. self.time_step = time_step # The temporary token used for authentication. self.token = token def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.end_time is not None: result['EndTime'] = self.end_time if self.metric_type is not None: result['MetricType'] = self.metric_type if self.start_time is not None: result['StartTime'] = self.start_time if self.time_step is not None: result['TimeStep'] = self.time_step if self.token is not None: result['Token'] = self.token return result def from_map(self, m: dict = None): m = m or dict() if m.get('EndTime') is not None: self.end_time = m.get('EndTime') if m.get('MetricType') is not None: self.metric_type = m.get('MetricType') if m.get('StartTime') is not None: self.start_time = m.get('StartTime') if m.get('TimeStep') is not None: self.time_step = m.get('TimeStep') if m.get('Token') is not None: self.token = m.get('Token') return self class GetJobMetricsResponseBody(TeaModel): def __init__( self, job_id: str = None, pod_metrics: List[PodMetric] = None, request_id: str = None, ): # The job ID. self.job_id = job_id # The monitoring metrics of the job. self.pod_metrics = pod_metrics # The request ID. You can troubleshoot issues based on the request ID. self.request_id = request_id def validate(self): if self.pod_metrics: for k in self.pod_metrics: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.job_id is not None: result['JobId'] = self.job_id result['PodMetrics'] = [] if self.pod_metrics is not None: for k in self.pod_metrics: result['PodMetrics'].append(k.to_map() if k else None) if self.request_id is not None: result['RequestId'] = self.request_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('JobId') is not None: self.job_id = m.get('JobId') self.pod_metrics = [] if m.get('PodMetrics') is not None: for k in m.get('PodMetrics'): temp_model = PodMetric() self.pod_metrics.append(temp_model.from_map(k)) if m.get('RequestId') is not None: self.request_id = m.get('RequestId') return self class GetJobMetricsResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: GetJobMetricsResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = GetJobMetricsResponseBody() self.body = temp_model.from_map(m['body']) return self class GetJobSanityCheckResultRequest(TeaModel): def __init__( self, sanity_check_number: int = None, sanity_check_phase: str = None, token: str = None, ): # The nth time for which the job sanity check is performed. # # This parameter is required. self.sanity_check_number = sanity_check_number # The phase in which the job sanity check is performed. # # * CheckInit # * DeviceCheck # * SingleNodeCommCheck # * TwoNodeCommCheck # * AllNodeCommCheck self.sanity_check_phase = sanity_check_phase # The token information for job sharing. For more information about how to obtain the token information, see [GetToken](https://help.aliyun.com/document_detail/2557812.html). self.token = token def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.sanity_check_number is not None: result['SanityCheckNumber'] = self.sanity_check_number if self.sanity_check_phase is not None: result['SanityCheckPhase'] = self.sanity_check_phase if self.token is not None: result['Token'] = self.token return result def from_map(self, m: dict = None): m = m or dict() if m.get('SanityCheckNumber') is not None: self.sanity_check_number = m.get('SanityCheckNumber') if m.get('SanityCheckPhase') is not None: self.sanity_check_phase = m.get('SanityCheckPhase') if m.get('Token') is not None: self.token = m.get('Token') return self class GetJobSanityCheckResultResponseBody(TeaModel): def __init__( self, job_id: str = None, request_id: str = None, sanity_check_result: List[SanityCheckResultItem] = None, ): # The job ID. self.job_id = job_id # The request ID. self.request_id = request_id # The job sanity check result. self.sanity_check_result = sanity_check_result def validate(self): if self.sanity_check_result: for k in self.sanity_check_result: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.job_id is not None: result['JobId'] = self.job_id if self.request_id is not None: result['RequestID'] = self.request_id result['SanityCheckResult'] = [] if self.sanity_check_result is not None: for k in self.sanity_check_result: result['SanityCheckResult'].append(k.to_map() if k else None) return result def from_map(self, m: dict = None): m = m or dict() if m.get('JobId') is not None: self.job_id = m.get('JobId') if m.get('RequestID') is not None: self.request_id = m.get('RequestID') self.sanity_check_result = [] if m.get('SanityCheckResult') is not None: for k in m.get('SanityCheckResult'): temp_model = SanityCheckResultItem() self.sanity_check_result.append(temp_model.from_map(k)) return self class GetJobSanityCheckResultResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: GetJobSanityCheckResultResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = GetJobSanityCheckResultResponseBody() self.body = temp_model.from_map(m['body']) return self class GetPodEventsRequest(TeaModel): def __init__( self, end_time: str = None, max_events_num: int = None, pod_uid: str = None, start_time: str = None, ): # The end time (UTC). self.end_time = end_time # The maximum number of events that can be returned. self.max_events_num = max_events_num # The node UID. Call [GetJob](https://help.aliyun.com/document_detail/459677.html) to get the node UID. self.pod_uid = pod_uid # The start time (UTC). self.start_time = start_time def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.end_time is not None: result['EndTime'] = self.end_time if self.max_events_num is not None: result['MaxEventsNum'] = self.max_events_num if self.pod_uid is not None: result['PodUid'] = self.pod_uid if self.start_time is not None: result['StartTime'] = self.start_time return result def from_map(self, m: dict = None): m = m or dict() if m.get('EndTime') is not None: self.end_time = m.get('EndTime') if m.get('MaxEventsNum') is not None: self.max_events_num = m.get('MaxEventsNum') if m.get('PodUid') is not None: self.pod_uid = m.get('PodUid') if m.get('StartTime') is not None: self.start_time = m.get('StartTime') return self class GetPodEventsResponseBody(TeaModel): def __init__( self, events: List[str] = None, job_id: str = None, pod_id: str = None, pod_uid: str = None, request_id: str = None, ): # The events returned. self.events = events # The job ID. self.job_id = job_id # The node ID. # # This parameter is required. self.pod_id = pod_id # The node UID. self.pod_uid = pod_uid # The request ID, which can be used for troubleshooting. self.request_id = request_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.events is not None: result['Events'] = self.events if self.job_id is not None: result['JobId'] = self.job_id if self.pod_id is not None: result['PodId'] = self.pod_id if self.pod_uid is not None: result['PodUid'] = self.pod_uid if self.request_id is not None: result['RequestId'] = self.request_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('Events') is not None: self.events = m.get('Events') if m.get('JobId') is not None: self.job_id = m.get('JobId') if m.get('PodId') is not None: self.pod_id = m.get('PodId') if m.get('PodUid') is not None: self.pod_uid = m.get('PodUid') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') return self class GetPodEventsResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: GetPodEventsResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = GetPodEventsResponseBody() self.body = temp_model.from_map(m['body']) return self class GetPodLogsRequest(TeaModel): def __init__( self, download_to_file: bool = None, end_time: str = None, max_lines: int = None, pod_uid: str = None, start_time: str = None, ): # Specifies whether to download the log file. Default value: false. Valid values: # # * false # * true self.download_to_file = download_to_file # The end time of the query. Default value: current time. self.end_time = end_time # The maximum number of log entries. Default value: 2000. self.max_lines = max_lines # The node UID. For more information about how to obtain a node UID, see [GetJob](https://help.aliyun.com/document_detail/459677.html). self.pod_uid = pod_uid # The start time of the query. Default value: 7 days ago. self.start_time = start_time def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.download_to_file is not None: result['DownloadToFile'] = self.download_to_file if self.end_time is not None: result['EndTime'] = self.end_time if self.max_lines is not None: result['MaxLines'] = self.max_lines if self.pod_uid is not None: result['PodUid'] = self.pod_uid if self.start_time is not None: result['StartTime'] = self.start_time return result def from_map(self, m: dict = None): m = m or dict() if m.get('DownloadToFile') is not None: self.download_to_file = m.get('DownloadToFile') if m.get('EndTime') is not None: self.end_time = m.get('EndTime') if m.get('MaxLines') is not None: self.max_lines = m.get('MaxLines') if m.get('PodUid') is not None: self.pod_uid = m.get('PodUid') if m.get('StartTime') is not None: self.start_time = m.get('StartTime') return self class GetPodLogsResponseBody(TeaModel): def __init__( self, job_id: str = None, logs: List[str] = None, pod_id: str = None, pod_uid: str = None, request_id: str = None, ): # The job ID. self.job_id = job_id # The logs. self.logs = logs # The node ID. self.pod_id = pod_id # The instance UID. self.pod_uid = pod_uid # The request ID which is used for diagnostics and Q\\&A. self.request_id = request_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.job_id is not None: result['JobId'] = self.job_id if self.logs is not None: result['Logs'] = self.logs if self.pod_id is not None: result['PodId'] = self.pod_id if self.pod_uid is not None: result['PodUid'] = self.pod_uid if self.request_id is not None: result['RequestId'] = self.request_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('JobId') is not None: self.job_id = m.get('JobId') if m.get('Logs') is not None: self.logs = m.get('Logs') if m.get('PodId') is not None: self.pod_id = m.get('PodId') if m.get('PodUid') is not None: self.pod_uid = m.get('PodUid') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') return self class GetPodLogsResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: GetPodLogsResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = GetPodLogsResponseBody() self.body = temp_model.from_map(m['body']) return self class GetRayDashboardRequest(TeaModel): def __init__( self, is_shared: bool = None, token: str = None, ): # Specifies whether the link is a sharing link. If yes, a token is required. # # Valid values: # # * true # * false self.is_shared = is_shared # The token obtained from GetToken self.token = token def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.is_shared is not None: result['isShared'] = self.is_shared if self.token is not None: result['token'] = self.token return result def from_map(self, m: dict = None): m = m or dict() if m.get('isShared') is not None: self.is_shared = m.get('isShared') if m.get('token') is not None: self.token = m.get('token') return self class GetRayDashboardResponseBody(TeaModel): def __init__( self, metrics_enabled: str = None, url: str = None, ): # Indicates whether the dashboard has been integrated with CloudMonitor and supports ray metrics self.metrics_enabled = metrics_enabled # The Ray Dashboard URL self.url = url def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.metrics_enabled is not None: result['metricsEnabled'] = self.metrics_enabled if self.url is not None: result['url'] = self.url return result def from_map(self, m: dict = None): m = m or dict() if m.get('metricsEnabled') is not None: self.metrics_enabled = m.get('metricsEnabled') if m.get('url') is not None: self.url = m.get('url') return self class GetRayDashboardResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: GetRayDashboardResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = GetRayDashboardResponseBody() self.body = temp_model.from_map(m['body']) return self class GetTensorboardRequest(TeaModel): def __init__( self, jod_id: str = None, token: str = None, workspace_id: str = None, ): # The job ID. For more information about how to query the job ID, see [ListJob](https://help.aliyun.com/document_detail/459676.html). self.jod_id = jod_id # The information about the shared token. You can specify this parameter to obtain the permission to view a TensorBoard job based on the shared token information. You can execute [GetTensorboardSharedUrl](https://help.aliyun.com/document_detail/2557813.html) and extract the shared token from the obtained information. self.token = token # The workspace ID. # <props="china">For more information about how to query the workspace ID, see [ListWorkspaces](https://help.aliyun.com/document_detail/449124.html). self.workspace_id = workspace_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.jod_id is not None: result['JodId'] = self.jod_id if self.token is not None: result['Token'] = self.token if self.workspace_id is not None: result['WorkspaceId'] = self.workspace_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('JodId') is not None: self.jod_id = m.get('JodId') if m.get('Token') is not None: self.token = m.get('Token') if m.get('WorkspaceId') is not None: self.workspace_id = m.get('WorkspaceId') return self class GetTensorboardResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: Tensorboard = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = Tensorboard() self.body = temp_model.from_map(m['body']) return self class GetTensorboardSharedUrlRequest(TeaModel): def __init__( self, expire_time_seconds: str = None, ): # The validity period of the shareable link. Unit: seconds. Maximum value: 604800. self.expire_time_seconds = expire_time_seconds def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.expire_time_seconds is not None: result['ExpireTimeSeconds'] = self.expire_time_seconds return result def from_map(self, m: dict = None): m = m or dict() if m.get('ExpireTimeSeconds') is not None: self.expire_time_seconds = m.get('ExpireTimeSeconds') return self class GetTensorboardSharedUrlResponseBody(TeaModel): def __init__( self, request_id: str = None, tensorboard_shared_url: str = None, ): # The request ID which is used for troubleshooting. self.request_id = request_id # The shareable link of the TensorBoard task. self.tensorboard_shared_url = tensorboard_shared_url def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.request_id is not None: result['RequestId'] = self.request_id if self.tensorboard_shared_url is not None: result['TensorboardSharedUrl'] = self.tensorboard_shared_url return result def from_map(self, m: dict = None): m = m or dict() if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('TensorboardSharedUrl') is not None: self.tensorboard_shared_url = m.get('TensorboardSharedUrl') return self class GetTensorboardSharedUrlResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: GetTensorboardSharedUrlResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = GetTensorboardSharedUrlResponseBody() self.body = temp_model.from_map(m['body']) return self class GetTokenRequest(TeaModel): def __init__( self, expire_time: int = None, target_id: str = None, target_type: str = None, ): # The time when the share link expires. Default value: 604800. Minimum value: 0. Unit: seconds. self.expire_time = expire_time # The ID of the job to be shared. self.target_id = target_id # The type of the job that you want to share. Valid values: job and tensorboard. self.target_type = target_type def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.expire_time is not None: result['ExpireTime'] = self.expire_time if self.target_id is not None: result['TargetId'] = self.target_id if self.target_type is not None: result['TargetType'] = self.target_type return result def from_map(self, m: dict = None): m = m or dict() if m.get('ExpireTime') is not None: self.expire_time = m.get('ExpireTime') if m.get('TargetId') is not None: self.target_id = m.get('TargetId') if m.get('TargetType') is not None: self.target_type = m.get('TargetType') return self class GetTokenResponseBody(TeaModel): def __init__( self, request_id: str = None, token: str = None, ): # The request ID, which is used to troubleshoot issues. self.request_id = request_id # The sharing token, used to view the information about the shared job. self.token = token def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.request_id is not None: result['RequestId'] = self.request_id if self.token is not None: result['Token'] = self.token return result def from_map(self, m: dict = None): m = m or dict() if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('Token') is not None: self.token = m.get('Token') return self class GetTokenResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: GetTokenResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = GetTokenResponseBody() self.body = temp_model.from_map(m['body']) return self class GetWebTerminalRequest(TeaModel): def __init__( self, is_shared: bool = None, pod_uid: str = None, ): # Specifies whether to create a shareable link to access the container. Valid values: # # * true: returns a shareable link to access the container. The link will expire after 30 seconds and can only be used once. After you access the container by using the link, other requests that use this link to access the container become invalid. # * false: returns a common shareable link to access the container. If you use a common shareable link to access a container, Alibaba Cloud identity authentication is required. The link will expire after 30 seconds. self.is_shared = is_shared # The pod UID. self.pod_uid = pod_uid def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.is_shared is not None: result['IsShared'] = self.is_shared if self.pod_uid is not None: result['PodUid'] = self.pod_uid return result def from_map(self, m: dict = None): m = m or dict() if m.get('IsShared') is not None: self.is_shared = m.get('IsShared') if m.get('PodUid') is not None: self.pod_uid = m.get('PodUid') return self class GetWebTerminalResponseBody(TeaModel): def __init__( self, request_id: str = None, web_terminal_url: str = None, ): # The request ID which is used for diagnostics and Q\\&A. self.request_id = request_id # The WebSocket URI for accessing the container. You must build a WebSocket client. For more information about the communication format, see the following code: # # ws = new WebSocket( # `wss://xxxxx`, # ); # ws.onopen = function open() { # console.warn(\\"connected\\"); # term.write(\\"\\r\\"); # }; # # ws.onclose = function close() { # console.warn(\\"disconnected\\"); # term.write(\\"Connection closed\\"); # }; # # // Return the following information in the backend. # ws.onmessage = function incoming(event) { # const msg = JSON.parse(event.data); # console.warn(msg); # if (msg.operation === \\"stdout\\") { # term.write(msg.data); # } else { # console.warn(\\"invalid msg operation: \\" + msg); # } # }; # # // Enter the following code in the console. # term.onData(data => { # const msg = { operation: \\"stdin\\", data: data }; # ws.send(JSON.stringify(msg)); # }); # # term.onResize(size => { # const msg = { operation: \\"resize\\", cols: size.cols, rows: size.rows }; # ws.send(JSON.stringify(msg)); # }); # # fitAddon.fit(); # }; self.web_terminal_url = web_terminal_url def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.request_id is not None: result['RequestId'] = self.request_id if self.web_terminal_url is not None: result['WebTerminalUrl'] = self.web_terminal_url return result def from_map(self, m: dict = None): m = m or dict() if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('WebTerminalUrl') is not None: self.web_terminal_url = m.get('WebTerminalUrl') return self class GetWebTerminalResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: GetWebTerminalResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = GetWebTerminalResponseBody() self.body = temp_model.from_map(m['body']) return self class ListEcsSpecsRequest(TeaModel): def __init__( self, accelerator_type: str = None, instance_types: str = None, order: str = None, page_number: int = None, page_size: int = None, resource_type: str = None, sort_by: str = None, ): # Filter by accelerator type. Valid values: # # * CPU # * GPU self.accelerator_type = accelerator_type # The instance types to query. Separate the types with commas (,). self.instance_types = instance_types # The sorting order. Valid values: # # * desc: descending order. # * asc: ascending order. self.order = order # The number of the page to query. The start value is 1. self.page_number = page_number # The number of entries returned per page. self.page_size = page_size # The type of the resource. Valid values: # # * ECS # * Lingjun self.resource_type = resource_type # The field based on which the results are sorted. Valid values: # # * CPU # * GPU # * Memory # * GmtCreateTime self.sort_by = sort_by def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.accelerator_type is not None: result['AcceleratorType'] = self.accelerator_type if self.instance_types is not None: result['InstanceTypes'] = self.instance_types if self.order is not None: result['Order'] = self.order if self.page_number is not None: result['PageNumber'] = self.page_number if self.page_size is not None: result['PageSize'] = self.page_size if self.resource_type is not None: result['ResourceType'] = self.resource_type if self.sort_by is not None: result['SortBy'] = self.sort_by return result def from_map(self, m: dict = None): m = m or dict() if m.get('AcceleratorType') is not None: self.accelerator_type = m.get('AcceleratorType') if m.get('InstanceTypes') is not None: self.instance_types = m.get('InstanceTypes') if m.get('Order') is not None: self.order = m.get('Order') if m.get('PageNumber') is not None: self.page_number = m.get('PageNumber') if m.get('PageSize') is not None: self.page_size = m.get('PageSize') if m.get('ResourceType') is not None: self.resource_type = m.get('ResourceType') if m.get('SortBy') is not None: self.sort_by = m.get('SortBy') return self class ListEcsSpecsResponseBody(TeaModel): def __init__( self, ecs_specs: List[EcsSpec] = None, request_id: str = None, total_count: int = None, ): # The list of ECS specifications. self.ecs_specs = ecs_specs # The request ID. self.request_id = request_id # The number of types that meet the filter conditions. self.total_count = total_count def validate(self): if self.ecs_specs: for k in self.ecs_specs: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() result['EcsSpecs'] = [] if self.ecs_specs is not None: for k in self.ecs_specs: result['EcsSpecs'].append(k.to_map() if k else None) if self.request_id is not None: result['RequestId'] = self.request_id if self.total_count is not None: result['TotalCount'] = self.total_count return result def from_map(self, m: dict = None): m = m or dict() self.ecs_specs = [] if m.get('EcsSpecs') is not None: for k in m.get('EcsSpecs'): temp_model = EcsSpec() self.ecs_specs.append(temp_model.from_map(k)) if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('TotalCount') is not None: self.total_count = m.get('TotalCount') return self class ListEcsSpecsResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: ListEcsSpecsResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = ListEcsSpecsResponseBody() self.body = temp_model.from_map(m['body']) return self class ListJobSanityCheckResultsRequest(TeaModel): def __init__( self, order: str = None, ): # The sorting order: # # * desc: descending order # * asc: ascending order self.order = order def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.order is not None: result['Order'] = self.order return result def from_map(self, m: dict = None): m = m or dict() if m.get('Order') is not None: self.order = m.get('Order') return self class ListJobSanityCheckResultsResponseBody(TeaModel): def __init__( self, request_id: str = None, sanity_check_results: List[List[SanityCheckResultItem]] = None, total_count: int = None, ): # The request ID. self.request_id = request_id # The sanity check results. self.sanity_check_results = sanity_check_results # The total number of results that meet the filter conditions. self.total_count = total_count def validate(self): if self.sanity_check_results: for k in self.sanity_check_results: for k1 in k: if k1: k1.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.request_id is not None: result['RequestID'] = self.request_id result['SanityCheckResults'] = [] if self.sanity_check_results is not None: for k in self.sanity_check_results: l1 = [] for k1 in k: l1.append(k1.to_map() if k1 else None) result['SanityCheckResults'].append(l1) if self.total_count is not None: result['TotalCount'] = self.total_count return result def from_map(self, m: dict = None): m = m or dict() if m.get('RequestID') is not None: self.request_id = m.get('RequestID') self.sanity_check_results = [] if m.get('SanityCheckResults') is not None: for k in m.get('SanityCheckResults'): l1 = [] for k1 in k: temp_model = SanityCheckResultItem() l1.append(temp_model.from_map(k1)) self.sanity_check_results.append(l1) if m.get('TotalCount') is not None: self.total_count = m.get('TotalCount') return self class ListJobSanityCheckResultsResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: ListJobSanityCheckResultsResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = ListJobSanityCheckResultsResponseBody() self.body = temp_model.from_map(m['body']) return self class ListJobsRequest(TeaModel): def __init__( self, accessibility: str = None, business_user_id: str = None, caller: str = None, display_name: str = None, end_time: str = None, from_all_workspaces: bool = None, job_id: str = None, job_ids: str = None, job_type: str = None, order: str = None, oversold_info: str = None, page_number: int = None, page_size: int = None, payment_type: str = None, pipeline_id: str = None, resource_id: str = None, resource_quota_name: str = None, show_own: bool = None, sort_by: str = None, start_time: str = None, status: str = None, tags: Dict[str, str] = None, user_id_for_filter: str = None, username: str = None, workspace_id: str = None, ): # The job visibility. Valid values: # # * PUBLIC: The job is visible to all members in the workspace. # * PRIVATE: The job is visible only to you and the administrator of the workspace. self.accessibility = accessibility # The ID of the user associated with the job. self.business_user_id = business_user_id # The caller. self.caller = caller # The job name. Fuzzy query is supported. The name is case-insensitive. Wildcards are not supported. For example, if you enter test, test-job1, job-test, job-test2, or job-test can be matched, and job-t1 cannot be matched. The default value null indicates any job name. self.display_name = display_name # The end time of the query. Use the job creation time to filter data. The default value is the current time. self.end_time = end_time # Specifies whether to query a list of jobs across workspaces. This parameter must be used together with `ShowOwn=true`. You can use this parameter to query a list of jobs recently submitted by the current user. self.from_all_workspaces = from_all_workspaces # The job ID. Fuzzy query is supported. The name is case-insensitive. Wildcards are not supported. The default value null indicates any job ID. self.job_id = job_id self.job_ids = job_ids # The job type. The default value null indicates any type. Valid values: # # * TFJob # * PyTorchJob # * XGBoostJob # * OneFlowJob # * ElasticBatchJob self.job_type = job_type # The sorting order. Valid values: # # * desc (default) # * asc self.order = order # The Idle resource information. Valid values: # # * ForbiddenQuotaOverSold # * ForceQuotaOverSold # * AcceptQuotaOverSold-true (true indicates that the job uses idle resources.) # * AcceptQuotaOverSold-false (false indicates that the job uses guaranteed resources.) self.oversold_info = oversold_info # The number of the page to return for the current query. Minimum value: 1. Default value: 1. self.page_number = page_number # The number of jobs per page. self.page_size = page_size # The type of the resource. Valid values: # # * PrePaid: Resource quota # * Spot: Preemptible resources # * PostPaid: Public resources self.payment_type = payment_type # The specific pipeline ID used to filter jobs. self.pipeline_id = pipeline_id # The resource group ID. For information about how to obtain the ID of a dedicated resource group, see [Manage resource quota](https://help.aliyun.com/document_detail/2651299.html). self.resource_id = resource_id # The resource quota name used to filter jobs. Fuzzy search is supported. Wildcards are not supported. The default value null indicates that jobs are not filtered by resource quota name. self.resource_quota_name = resource_quota_name # Specifies whether to query only the jobs submitted by the current user. self.show_own = show_own # The sorting field. Valid values: # # * DisplayName # * JobType # * Status # * GmtCreateTime # * GmtFinishTime self.sort_by = sort_by # The start time of the query. Use the job creation time to filter data. The default value is the current time minus seven days. In other words, if you do not configure the StartTime and EndTime parameters, the system queries the job list in the last seven days. self.start_time = start_time # The job status. Valid values: # # * Creating # * Queuing # * Bidding (only available for spot jobs that use Lingjun resources) # * EnvPreparing # * SanityChecking # * Running # * Restarting # * Stopping # * SucceededReserving # * FailedReserving # * Succeeded # * Failed # * Stopped self.status = status # The tags. self.tags = tags # The user ID used to filter jobs. self.user_id_for_filter = user_id_for_filter # The username used to filter jobs. Fuzzy search is supported. Wildcards are not supported. The default value null indicates that jobs are not filtered by username. self.username = username # The workspace ID. self.workspace_id = workspace_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.accessibility is not None: result['Accessibility'] = self.accessibility if self.business_user_id is not None: result['BusinessUserId'] = self.business_user_id if self.caller is not None: result['Caller'] = self.caller if self.display_name is not None: result['DisplayName'] = self.display_name if self.end_time is not None: result['EndTime'] = self.end_time if self.from_all_workspaces is not None: result['FromAllWorkspaces'] = self.from_all_workspaces if self.job_id is not None: result['JobId'] = self.job_id if self.job_ids is not None: result['JobIds'] = self.job_ids if self.job_type is not None: result['JobType'] = self.job_type if self.order is not None: result['Order'] = self.order if self.oversold_info is not None: result['OversoldInfo'] = self.oversold_info if self.page_number is not None: result['PageNumber'] = self.page_number if self.page_size is not None: result['PageSize'] = self.page_size if self.payment_type is not None: result['PaymentType'] = self.payment_type if self.pipeline_id is not None: result['PipelineId'] = self.pipeline_id if self.resource_id is not None: result['ResourceId'] = self.resource_id if self.resource_quota_name is not None: result['ResourceQuotaName'] = self.resource_quota_name if self.show_own is not None: result['ShowOwn'] = self.show_own if self.sort_by is not None: result['SortBy'] = self.sort_by if self.start_time is not None: result['StartTime'] = self.start_time if self.status is not None: result['Status'] = self.status if self.tags is not None: result['Tags'] = self.tags if self.user_id_for_filter is not None: result['UserIdForFilter'] = self.user_id_for_filter if self.username is not None: result['Username'] = self.username if self.workspace_id is not None: result['WorkspaceId'] = self.workspace_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('Accessibility') is not None: self.accessibility = m.get('Accessibility') if m.get('BusinessUserId') is not None: self.business_user_id = m.get('BusinessUserId') if m.get('Caller') is not None: self.caller = m.get('Caller') if m.get('DisplayName') is not None: self.display_name = m.get('DisplayName') if m.get('EndTime') is not None: self.end_time = m.get('EndTime') if m.get('FromAllWorkspaces') is not None: self.from_all_workspaces = m.get('FromAllWorkspaces') if m.get('JobId') is not None: self.job_id = m.get('JobId') if m.get('JobIds') is not None: self.job_ids = m.get('JobIds') if m.get('JobType') is not None: self.job_type = m.get('JobType') if m.get('Order') is not None: self.order = m.get('Order') if m.get('OversoldInfo') is not None: self.oversold_info = m.get('OversoldInfo') if m.get('PageNumber') is not None: self.page_number = m.get('PageNumber') if m.get('PageSize') is not None: self.page_size = m.get('PageSize') if m.get('PaymentType') is not None: self.payment_type = m.get('PaymentType') if m.get('PipelineId') is not None: self.pipeline_id = m.get('PipelineId') if m.get('ResourceId') is not None: self.resource_id = m.get('ResourceId') if m.get('ResourceQuotaName') is not None: self.resource_quota_name = m.get('ResourceQuotaName') if m.get('ShowOwn') is not None: self.show_own = m.get('ShowOwn') if m.get('SortBy') is not None: self.sort_by = m.get('SortBy') if m.get('StartTime') is not None: self.start_time = m.get('StartTime') if m.get('Status') is not None: self.status = m.get('Status') if m.get('Tags') is not None: self.tags = m.get('Tags') if m.get('UserIdForFilter') is not None: self.user_id_for_filter = m.get('UserIdForFilter') if m.get('Username') is not None: self.username = m.get('Username') if m.get('WorkspaceId') is not None: self.workspace_id = m.get('WorkspaceId') return self class ListJobsShrinkRequest(TeaModel): def __init__( self, accessibility: str = None, business_user_id: str = None, caller: str = None, display_name: str = None, end_time: str = None, from_all_workspaces: bool = None, job_id: str = None, job_ids: str = None, job_type: str = None, order: str = None, oversold_info: str = None, page_number: int = None, page_size: int = None, payment_type: str = None, pipeline_id: str = None, resource_id: str = None, resource_quota_name: str = None, show_own: bool = None, sort_by: str = None, start_time: str = None, status: str = None, tags_shrink: str = None, user_id_for_filter: str = None, username: str = None, workspace_id: str = None, ): # The job visibility. Valid values: # # * PUBLIC: The job is visible to all members in the workspace. # * PRIVATE: The job is visible only to you and the administrator of the workspace. self.accessibility = accessibility # The ID of the user associated with the job. self.business_user_id = business_user_id # The caller. self.caller = caller # The job name. Fuzzy query is supported. The name is case-insensitive. Wildcards are not supported. For example, if you enter test, test-job1, job-test, job-test2, or job-test can be matched, and job-t1 cannot be matched. The default value null indicates any job name. self.display_name = display_name # The end time of the query. Use the job creation time to filter data. The default value is the current time. self.end_time = end_time # Specifies whether to query a list of jobs across workspaces. This parameter must be used together with `ShowOwn=true`. You can use this parameter to query a list of jobs recently submitted by the current user. self.from_all_workspaces = from_all_workspaces # The job ID. Fuzzy query is supported. The name is case-insensitive. Wildcards are not supported. The default value null indicates any job ID. self.job_id = job_id self.job_ids = job_ids # The job type. The default value null indicates any type. Valid values: # # * TFJob # * PyTorchJob # * XGBoostJob # * OneFlowJob # * ElasticBatchJob self.job_type = job_type # The sorting order. Valid values: # # * desc (default) # * asc self.order = order # The Idle resource information. Valid values: # # * ForbiddenQuotaOverSold # * ForceQuotaOverSold # * AcceptQuotaOverSold-true (true indicates that the job uses idle resources.) # * AcceptQuotaOverSold-false (false indicates that the job uses guaranteed resources.) self.oversold_info = oversold_info # The number of the page to return for the current query. Minimum value: 1. Default value: 1. self.page_number = page_number # The number of jobs per page. self.page_size = page_size # The type of the resource. Valid values: # # * PrePaid: Resource quota # * Spot: Preemptible resources # * PostPaid: Public resources self.payment_type = payment_type # The specific pipeline ID used to filter jobs. self.pipeline_id = pipeline_id # The resource group ID. For information about how to obtain the ID of a dedicated resource group, see [Manage resource quota](https://help.aliyun.com/document_detail/2651299.html). self.resource_id = resource_id # The resource quota name used to filter jobs. Fuzzy search is supported. Wildcards are not supported. The default value null indicates that jobs are not filtered by resource quota name. self.resource_quota_name = resource_quota_name # Specifies whether to query only the jobs submitted by the current user. self.show_own = show_own # The sorting field. Valid values: # # * DisplayName # * JobType # * Status # * GmtCreateTime # * GmtFinishTime self.sort_by = sort_by # The start time of the query. Use the job creation time to filter data. The default value is the current time minus seven days. In other words, if you do not configure the StartTime and EndTime parameters, the system queries the job list in the last seven days. self.start_time = start_time # The job status. Valid values: # # * Creating # * Queuing # * Bidding (only available for spot jobs that use Lingjun resources) # * EnvPreparing # * SanityChecking # * Running # * Restarting # * Stopping # * SucceededReserving # * FailedReserving # * Succeeded # * Failed # * Stopped self.status = status # The tags. self.tags_shrink = tags_shrink # The user ID used to filter jobs. self.user_id_for_filter = user_id_for_filter # The username used to filter jobs. Fuzzy search is supported. Wildcards are not supported. The default value null indicates that jobs are not filtered by username. self.username = username # The workspace ID. self.workspace_id = workspace_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.accessibility is not None: result['Accessibility'] = self.accessibility if self.business_user_id is not None: result['BusinessUserId'] = self.business_user_id if self.caller is not None: result['Caller'] = self.caller if self.display_name is not None: result['DisplayName'] = self.display_name if self.end_time is not None: result['EndTime'] = self.end_time if self.from_all_workspaces is not None: result['FromAllWorkspaces'] = self.from_all_workspaces if self.job_id is not None: result['JobId'] = self.job_id if self.job_ids is not None: result['JobIds'] = self.job_ids if self.job_type is not None: result['JobType'] = self.job_type if self.order is not None: result['Order'] = self.order if self.oversold_info is not None: result['OversoldInfo'] = self.oversold_info if self.page_number is not None: result['PageNumber'] = self.page_number if self.page_size is not None: result['PageSize'] = self.page_size if self.payment_type is not None: result['PaymentType'] = self.payment_type if self.pipeline_id is not None: result['PipelineId'] = self.pipeline_id if self.resource_id is not None: result['ResourceId'] = self.resource_id if self.resource_quota_name is not None: result['ResourceQuotaName'] = self.resource_quota_name if self.show_own is not None: result['ShowOwn'] = self.show_own if self.sort_by is not None: result['SortBy'] = self.sort_by if self.start_time is not None: result['StartTime'] = self.start_time if self.status is not None: result['Status'] = self.status if self.tags_shrink is not None: result['Tags'] = self.tags_shrink if self.user_id_for_filter is not None: result['UserIdForFilter'] = self.user_id_for_filter if self.username is not None: result['Username'] = self.username if self.workspace_id is not None: result['WorkspaceId'] = self.workspace_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('Accessibility') is not None: self.accessibility = m.get('Accessibility') if m.get('BusinessUserId') is not None: self.business_user_id = m.get('BusinessUserId') if m.get('Caller') is not None: self.caller = m.get('Caller') if m.get('DisplayName') is not None: self.display_name = m.get('DisplayName') if m.get('EndTime') is not None: self.end_time = m.get('EndTime') if m.get('FromAllWorkspaces') is not None: self.from_all_workspaces = m.get('FromAllWorkspaces') if m.get('JobId') is not None: self.job_id = m.get('JobId') if m.get('JobIds') is not None: self.job_ids = m.get('JobIds') if m.get('JobType') is not None: self.job_type = m.get('JobType') if m.get('Order') is not None: self.order = m.get('Order') if m.get('OversoldInfo') is not None: self.oversold_info = m.get('OversoldInfo') if m.get('PageNumber') is not None: self.page_number = m.get('PageNumber') if m.get('PageSize') is not None: self.page_size = m.get('PageSize') if m.get('PaymentType') is not None: self.payment_type = m.get('PaymentType') if m.get('PipelineId') is not None: self.pipeline_id = m.get('PipelineId') if m.get('ResourceId') is not None: self.resource_id = m.get('ResourceId') if m.get('ResourceQuotaName') is not None: self.resource_quota_name = m.get('ResourceQuotaName') if m.get('ShowOwn') is not None: self.show_own = m.get('ShowOwn') if m.get('SortBy') is not None: self.sort_by = m.get('SortBy') if m.get('StartTime') is not None: self.start_time = m.get('StartTime') if m.get('Status') is not None: self.status = m.get('Status') if m.get('Tags') is not None: self.tags_shrink = m.get('Tags') if m.get('UserIdForFilter') is not None: self.user_id_for_filter = m.get('UserIdForFilter') if m.get('Username') is not None: self.username = m.get('Username') if m.get('WorkspaceId') is not None: self.workspace_id = m.get('WorkspaceId') return self class ListJobsResponseBody(TeaModel): def __init__( self, jobs: List[JobItem] = None, request_id: str = None, total_count: int = None, ): # The jobs. self.jobs = jobs # The request ID used to troubleshoot issues. self.request_id = request_id # The total number of jobs that meet the filter conditions. self.total_count = total_count def validate(self): if self.jobs: for k in self.jobs: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() result['Jobs'] = [] if self.jobs is not None: for k in self.jobs: result['Jobs'].append(k.to_map() if k else None) if self.request_id is not None: result['RequestId'] = self.request_id if self.total_count is not None: result['TotalCount'] = self.total_count return result def from_map(self, m: dict = None): m = m or dict() self.jobs = [] if m.get('Jobs') is not None: for k in m.get('Jobs'): temp_model = JobItem() self.jobs.append(temp_model.from_map(k)) if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('TotalCount') is not None: self.total_count = m.get('TotalCount') return self class ListJobsResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: ListJobsResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = ListJobsResponseBody() self.body = temp_model.from_map(m['body']) return self class ListTensorboardsRequest(TeaModel): def __init__( self, accessibility: str = None, display_name: str = None, end_time: str = None, job_id: str = None, order: str = None, page_number: int = None, page_size: int = None, payment_type: str = None, quota_id: str = None, show_own: bool = None, sort_by: str = None, source_id: str = None, source_type: str = None, start_time: str = None, status: str = None, tensorboard_id: str = None, user_id: str = None, username: str = None, verbose: bool = None, workspace_id: str = None, ): # The instance visibility. # # * PUBLIC: TensorBoard instances are visible to all members in the workspace. # * PRIVATE: TensorBoard instances are visible only to you and the administrator of the workspace. self.accessibility = accessibility # The TensorBoard instance name. self.display_name = display_name # The end time of the query. Use the UTC time when the TensorBoard instance is created to filter data. If you leave this parameter empty, the default value is the current time. self.end_time = end_time # The job ID used to filter TensorBoard instances. For more information about how to obtain the ID of a job, see [ListJobs](https://help.aliyun.com/document_detail/459676.html). self.job_id = job_id # The sorting order. # # * desc # * asc self.order = order # The page number. Minimum value: 1. self.page_number = page_number # The number of TensorBoard instances per page. self.page_size = page_size # The billing method of TensorBoard instances. # # * Free: the TensorBoard instance that uses free resources. # * Postpaid: the TensorBoard instance that uses pay-as-you-go resources. self.payment_type = payment_type # The resource quota ID. # # > # # * Only whitelisted users can use resource quotas to create TensorBoard instances. If you want to use this feature, contact us. # # * This parameter takes effect only when TensorBoard instances use resource quotas. self.quota_id = quota_id # Specifies whether to return only the TensorBoard instances created by the current logon account. self.show_own = show_own # The returned field used to sort TensorBoard instances. # # * DisplayName: the name of the TensorBoard instance. # * GmtCreateTime: the time when the TensorBoard instance is created. self.sort_by = sort_by # The data source ID. For more information about how to obtain the ID of a job, see [ListJobs](https://help.aliyun.com/document_detail/459676.html). self.source_id = source_id # The data source associated with the TensorBoard instance. This parameter is no longer used. Only Deep Learning Containers (DLC) training jobs are supported. self.source_type = source_type # The start time of the query. Use the UTC time when the TensorBoard instance is created to filter data. If you leave this parameter empty, the default value is seven days before the current time. self.start_time = start_time # The TensorBoard instance status. Valid values: # # * Creating # * Running # * Stopped # * Succeeded # * Failed self.status = status # The TensorBoard instance ID used to filter TensorBoard instances. self.tensorboard_id = tensorboard_id # The user ID. self.user_id = user_id # The username. self.username = username # Specifies whether to return the information about the TensorBoard instance. # # * true # * false self.verbose = verbose # The workspace ID. Obtain a list of TensorBoard instances based on the workspace ID. # <props="china">For more information, see [ListWorkspaces](https://help.aliyun.com/document_detail/449124.html). self.workspace_id = workspace_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.accessibility is not None: result['Accessibility'] = self.accessibility if self.display_name is not None: result['DisplayName'] = self.display_name if self.end_time is not None: result['EndTime'] = self.end_time if self.job_id is not None: result['JobId'] = self.job_id if self.order is not None: result['Order'] = self.order if self.page_number is not None: result['PageNumber'] = self.page_number if self.page_size is not None: result['PageSize'] = self.page_size if self.payment_type is not None: result['PaymentType'] = self.payment_type if self.quota_id is not None: result['QuotaId'] = self.quota_id if self.show_own is not None: result['ShowOwn'] = self.show_own if self.sort_by is not None: result['SortBy'] = self.sort_by if self.source_id is not None: result['SourceId'] = self.source_id if self.source_type is not None: result['SourceType'] = self.source_type if self.start_time is not None: result['StartTime'] = self.start_time if self.status is not None: result['Status'] = self.status if self.tensorboard_id is not None: result['TensorboardId'] = self.tensorboard_id if self.user_id is not None: result['UserId'] = self.user_id if self.username is not None: result['Username'] = self.username if self.verbose is not None: result['Verbose'] = self.verbose if self.workspace_id is not None: result['WorkspaceId'] = self.workspace_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('Accessibility') is not None: self.accessibility = m.get('Accessibility') if m.get('DisplayName') is not None: self.display_name = m.get('DisplayName') if m.get('EndTime') is not None: self.end_time = m.get('EndTime') if m.get('JobId') is not None: self.job_id = m.get('JobId') if m.get('Order') is not None: self.order = m.get('Order') if m.get('PageNumber') is not None: self.page_number = m.get('PageNumber') if m.get('PageSize') is not None: self.page_size = m.get('PageSize') if m.get('PaymentType') is not None: self.payment_type = m.get('PaymentType') if m.get('QuotaId') is not None: self.quota_id = m.get('QuotaId') if m.get('ShowOwn') is not None: self.show_own = m.get('ShowOwn') if m.get('SortBy') is not None: self.sort_by = m.get('SortBy') if m.get('SourceId') is not None: self.source_id = m.get('SourceId') if m.get('SourceType') is not None: self.source_type = m.get('SourceType') if m.get('StartTime') is not None: self.start_time = m.get('StartTime') if m.get('Status') is not None: self.status = m.get('Status') if m.get('TensorboardId') is not None: self.tensorboard_id = m.get('TensorboardId') if m.get('UserId') is not None: self.user_id = m.get('UserId') if m.get('Username') is not None: self.username = m.get('Username') if m.get('Verbose') is not None: self.verbose = m.get('Verbose') if m.get('WorkspaceId') is not None: self.workspace_id = m.get('WorkspaceId') return self class ListTensorboardsResponseBody(TeaModel): def __init__( self, request_id: str = None, tensorboards: List[Tensorboard] = None, total_count: int = None, ): # The request ID. self.request_id = request_id # The TensorBoard instances. self.tensorboards = tensorboards # The total number of data sources that meet the conditions. self.total_count = total_count def validate(self): if self.tensorboards: for k in self.tensorboards: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.request_id is not None: result['RequestId'] = self.request_id result['Tensorboards'] = [] if self.tensorboards is not None: for k in self.tensorboards: result['Tensorboards'].append(k.to_map() if k else None) if self.total_count is not None: result['TotalCount'] = self.total_count return result def from_map(self, m: dict = None): m = m or dict() if m.get('RequestId') is not None: self.request_id = m.get('RequestId') self.tensorboards = [] if m.get('Tensorboards') is not None: for k in m.get('Tensorboards'): temp_model = Tensorboard() self.tensorboards.append(temp_model.from_map(k)) if m.get('TotalCount') is not None: self.total_count = m.get('TotalCount') return self class ListTensorboardsResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: ListTensorboardsResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = ListTensorboardsResponseBody() self.body = temp_model.from_map(m['body']) return self class StartTensorboardRequest(TeaModel): def __init__( self, workspace_id: str = None, ): # The workspace ID. self.workspace_id = workspace_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.workspace_id is not None: result['WorkspaceId'] = self.workspace_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('WorkspaceId') is not None: self.workspace_id = m.get('WorkspaceId') return self class StartTensorboardResponseBody(TeaModel): def __init__( self, request_id: str = None, tensorboard_id: str = None, ): # The request ID. self.request_id = request_id # The TensorBoard instance ID. self.tensorboard_id = tensorboard_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.request_id is not None: result['RequestId'] = self.request_id if self.tensorboard_id is not None: result['TensorboardId'] = self.tensorboard_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('TensorboardId') is not None: self.tensorboard_id = m.get('TensorboardId') return self class StartTensorboardResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: StartTensorboardResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = StartTensorboardResponseBody() self.body = temp_model.from_map(m['body']) return self class StopJobResponseBody(TeaModel): def __init__( self, job_id: str = None, request_id: str = None, ): # The job ID. self.job_id = job_id # The request ID. You can troubleshoot issues based on the request ID. self.request_id = request_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.job_id is not None: result['JobId'] = self.job_id if self.request_id is not None: result['RequestId'] = self.request_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('JobId') is not None: self.job_id = m.get('JobId') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') return self class StopJobResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: StopJobResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = StopJobResponseBody() self.body = temp_model.from_map(m['body']) return self class StopTensorboardRequest(TeaModel): def __init__( self, workspace_id: str = None, ): # The workspace ID. # <props="china">For more information about how to query the workspace ID, see [ListWorkspaces](https://help.aliyun.com/document_detail/449124.html). self.workspace_id = workspace_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.workspace_id is not None: result['WorkspaceId'] = self.workspace_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('WorkspaceId') is not None: self.workspace_id = m.get('WorkspaceId') return self class StopTensorboardResponseBody(TeaModel): def __init__( self, request_id: str = None, tensorboard_id: str = None, ): # The ID of the request. self.request_id = request_id # The ID of the TensorBoard instance. self.tensorboard_id = tensorboard_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.request_id is not None: result['RequestId'] = self.request_id if self.tensorboard_id is not None: result['TensorboardId'] = self.tensorboard_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('TensorboardId') is not None: self.tensorboard_id = m.get('TensorboardId') return self class StopTensorboardResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: StopTensorboardResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = StopTensorboardResponseBody() self.body = temp_model.from_map(m['body']) return self class UpdateJobRequest(TeaModel): def __init__( self, accessibility: str = None, priority: int = None, ): # The job visibility. Valid values: # # * PUBLIC: The job is visible to all members in the workspace. # * PRIVATE: The job is visible only to you and the administrator of the workspace. self.accessibility = accessibility # The job priority. Valid values: 1 to 9. # # * 1: the lowest priority. # * 9: the highest priority. self.priority = priority def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.accessibility is not None: result['Accessibility'] = self.accessibility if self.priority is not None: result['Priority'] = self.priority return result def from_map(self, m: dict = None): m = m or dict() if m.get('Accessibility') is not None: self.accessibility = m.get('Accessibility') if m.get('Priority') is not None: self.priority = m.get('Priority') return self class UpdateJobResponseBody(TeaModel): def __init__( self, job_id: str = None, request_id: str = None, ): # The job ID. self.job_id = job_id # The request ID, which is used for diagnostics and Q\\&A. self.request_id = request_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.job_id is not None: result['JobId'] = self.job_id if self.request_id is not None: result['RequestId'] = self.request_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('JobId') is not None: self.job_id = m.get('JobId') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') return self class UpdateJobResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: UpdateJobResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = UpdateJobResponseBody() self.body = temp_model.from_map(m['body']) return self class UpdateTensorboardRequest(TeaModel): def __init__( self, accessibility: str = None, max_running_time_minutes: int = None, priority: str = None, workspace_id: str = None, ): # The visibility of the jobs. Valid values: # # * PUBLIC: The jobs are public in the workspace. # * PRIVATE: The jobs are visible only to you and the administrator of the workspace. self.accessibility = accessibility # The maximum running time. Unit: minutes. self.max_running_time_minutes = max_running_time_minutes self.priority = priority # The workspace ID. # <props="china">For more information about how to query the workspace ID, see [ListWorkspaces](https://help.aliyun.com/document_detail/449124.html). self.workspace_id = workspace_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.accessibility is not None: result['Accessibility'] = self.accessibility if self.max_running_time_minutes is not None: result['MaxRunningTimeMinutes'] = self.max_running_time_minutes if self.priority is not None: result['Priority'] = self.priority if self.workspace_id is not None: result['WorkspaceId'] = self.workspace_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('Accessibility') is not None: self.accessibility = m.get('Accessibility') if m.get('MaxRunningTimeMinutes') is not None: self.max_running_time_minutes = m.get('MaxRunningTimeMinutes') if m.get('Priority') is not None: self.priority = m.get('Priority') if m.get('WorkspaceId') is not None: self.workspace_id = m.get('WorkspaceId') return self class UpdateTensorboardResponseBody(TeaModel): def __init__( self, request_id: str = None, tensorboard_id: str = None, ): # The ID of the request. self.request_id = request_id # The ID of the TensorBoard instance. self.tensorboard_id = tensorboard_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.request_id is not None: result['RequestId'] = self.request_id if self.tensorboard_id is not None: result['TensorboardId'] = self.tensorboard_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('TensorboardId') is not None: self.tensorboard_id = m.get('TensorboardId') return self class UpdateTensorboardResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: UpdateTensorboardResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = UpdateTensorboardResponseBody() self.body = temp_model.from_map(m['body']) return self