From 3259f94b4c841ad0f48e1f5fe4439de614fecb82 Mon Sep 17 00:00:00 2001 From: Everett Li Date: Thu, 7 Nov 2024 11:56:41 +0800 Subject: [PATCH 01/13] update aiworkspace openapi to 5.0.1 --- .../__init__.py | 2 +- .../client.py | 4571 ++++++++++------- .../models.py | 1602 +++++- 3 files changed, 4310 insertions(+), 1865 deletions(-) diff --git a/pai/libs/alibabacloud_aiworkspace20210204/__init__.py b/pai/libs/alibabacloud_aiworkspace20210204/__init__.py index b63d968..5ec5ff3 100644 --- a/pai/libs/alibabacloud_aiworkspace20210204/__init__.py +++ b/pai/libs/alibabacloud_aiworkspace20210204/__init__.py @@ -1 +1 @@ -__version__ = '3.0.6' \ No newline at end of file +__version__ = '5.0.1' \ No newline at end of file diff --git a/pai/libs/alibabacloud_aiworkspace20210204/client.py b/pai/libs/alibabacloud_aiworkspace20210204/client.py index 58455b8..60bd9d8 100644 --- a/pai/libs/alibabacloud_aiworkspace20210204/client.py +++ b/pai/libs/alibabacloud_aiworkspace20210204/client.py @@ -16,14 +16,16 @@ class Client(OpenApiClient): """ *\ """ + def __init__( - self, + self, config: open_api_models.Config, ): super().__init__(config) self._endpoint_rule = '' self.check_config(config) - self._endpoint = self.get_endpoint('aiworkspace', self._region_id, self._endpoint_rule, self._network, self._suffix, self._endpoint_map, self._endpoint) + self._endpoint = self.get_endpoint('aiworkspace', self._region_id, self._endpoint_rule, self._network, + self._suffix, self._endpoint_map, self._endpoint) def get_endpoint( self, @@ -49,7 +51,7 @@ def add_image_with_options( ) -> aiwork_space_20210204_models.AddImageResponse: """ @summary 增加 Image - + @param request: AddImageRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -101,7 +103,7 @@ async def add_image_with_options_async( ) -> aiwork_space_20210204_models.AddImageResponse: """ @summary 增加 Image - + @param request: AddImageRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -151,7 +153,7 @@ def add_image( ) -> aiwork_space_20210204_models.AddImageResponse: """ @summary 增加 Image - + @param request: AddImageRequest @return: AddImageResponse """ @@ -165,7 +167,7 @@ async def add_image_async( ) -> aiwork_space_20210204_models.AddImageResponse: """ @summary 增加 Image - + @param request: AddImageRequest @return: AddImageResponse """ @@ -182,7 +184,7 @@ def add_image_labels_with_options( ) -> aiwork_space_20210204_models.AddImageLabelsResponse: """ @summary 增加 Image 的标签 - + @param request: AddImageLabelsRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -221,7 +223,7 @@ async def add_image_labels_with_options_async( ) -> aiwork_space_20210204_models.AddImageLabelsResponse: """ @summary 增加 Image 的标签 - + @param request: AddImageLabelsRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -258,7 +260,7 @@ def add_image_labels( ) -> aiwork_space_20210204_models.AddImageLabelsResponse: """ @summary 增加 Image 的标签 - + @param request: AddImageLabelsRequest @return: AddImageLabelsResponse """ @@ -273,7 +275,7 @@ async def add_image_labels_async( ) -> aiwork_space_20210204_models.AddImageLabelsResponse: """ @summary 增加 Image 的标签 - + @param request: AddImageLabelsRequest @return: AddImageLabelsResponse """ @@ -291,7 +293,7 @@ def add_member_role_with_options( ) -> aiwork_space_20210204_models.AddMemberRoleResponse: """ @summary 增加成员角色 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: AddMemberRoleResponse @@ -325,7 +327,7 @@ async def add_member_role_with_options_async( ) -> aiwork_space_20210204_models.AddMemberRoleResponse: """ @summary 增加成员角色 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: AddMemberRoleResponse @@ -357,7 +359,7 @@ def add_member_role( ) -> aiwork_space_20210204_models.AddMemberRoleResponse: """ @summary 增加成员角色 - + @return: AddMemberRoleResponse """ runtime = util_models.RuntimeOptions() @@ -372,7 +374,7 @@ async def add_member_role_async( ) -> aiwork_space_20210204_models.AddMemberRoleResponse: """ @summary 增加成员角色 - + @return: AddMemberRoleResponse """ runtime = util_models.RuntimeOptions() @@ -388,7 +390,7 @@ def add_workspace_quota_with_options( ) -> aiwork_space_20210204_models.AddWorkspaceQuotaResponse: """ @summary 添加资源实例配额 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: AddWorkspaceQuotaResponse @@ -421,7 +423,7 @@ async def add_workspace_quota_with_options_async( ) -> aiwork_space_20210204_models.AddWorkspaceQuotaResponse: """ @summary 添加资源实例配额 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: AddWorkspaceQuotaResponse @@ -452,7 +454,7 @@ def add_workspace_quota( ) -> aiwork_space_20210204_models.AddWorkspaceQuotaResponse: """ @summary 添加资源实例配额 - + @return: AddWorkspaceQuotaResponse """ runtime = util_models.RuntimeOptions() @@ -466,7 +468,7 @@ async def add_workspace_quota_async( ) -> aiwork_space_20210204_models.AddWorkspaceQuotaResponse: """ @summary 添加资源实例配额 - + @return: AddWorkspaceQuotaResponse """ runtime = util_models.RuntimeOptions() @@ -481,7 +483,7 @@ def assume_service_identity_role_with_options( ) -> aiwork_space_20210204_models.AssumeServiceIdentityRoleResponse: """ @summary 用PAI服务账户扮演角色 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: AssumeServiceIdentityRoleResponse @@ -513,7 +515,7 @@ async def assume_service_identity_role_with_options_async( ) -> aiwork_space_20210204_models.AssumeServiceIdentityRoleResponse: """ @summary 用PAI服务账户扮演角色 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: AssumeServiceIdentityRoleResponse @@ -543,7 +545,7 @@ def assume_service_identity_role( ) -> aiwork_space_20210204_models.AssumeServiceIdentityRoleResponse: """ @summary 用PAI服务账户扮演角色 - + @return: AssumeServiceIdentityRoleResponse """ runtime = util_models.RuntimeOptions() @@ -556,7 +558,7 @@ async def assume_service_identity_role_async( ) -> aiwork_space_20210204_models.AssumeServiceIdentityRoleResponse: """ @summary 用PAI服务账户扮演角色 - + @return: AssumeServiceIdentityRoleResponse """ runtime = util_models.RuntimeOptions() @@ -572,7 +574,7 @@ def change_dataset_owner_with_options( ) -> aiwork_space_20210204_models.ChangeDatasetOwnerResponse: """ @summary 修改API的所有者 - + @param request: ChangeDatasetOwnerRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -611,7 +613,7 @@ async def change_dataset_owner_with_options_async( ) -> aiwork_space_20210204_models.ChangeDatasetOwnerResponse: """ @summary 修改API的所有者 - + @param request: ChangeDatasetOwnerRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -648,7 +650,7 @@ def change_dataset_owner( ) -> aiwork_space_20210204_models.ChangeDatasetOwnerResponse: """ @summary 修改API的所有者 - + @param request: ChangeDatasetOwnerRequest @return: ChangeDatasetOwnerResponse """ @@ -663,7 +665,7 @@ async def change_dataset_owner_async( ) -> aiwork_space_20210204_models.ChangeDatasetOwnerResponse: """ @summary 修改API的所有者 - + @param request: ChangeDatasetOwnerRequest @return: ChangeDatasetOwnerResponse """ @@ -679,7 +681,7 @@ def create_code_source_with_options( ) -> aiwork_space_20210204_models.CreateCodeSourceResponse: """ @summary 创建一个代码源配置 - + @param request: CreateCodeSourceRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -733,7 +735,7 @@ async def create_code_source_with_options_async( ) -> aiwork_space_20210204_models.CreateCodeSourceResponse: """ @summary 创建一个代码源配置 - + @param request: CreateCodeSourceRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -785,7 +787,7 @@ def create_code_source( ) -> aiwork_space_20210204_models.CreateCodeSourceResponse: """ @summary 创建一个代码源配置 - + @param request: CreateCodeSourceRequest @return: CreateCodeSourceResponse """ @@ -799,7 +801,7 @@ async def create_code_source_async( ) -> aiwork_space_20210204_models.CreateCodeSourceResponse: """ @summary 创建一个代码源配置 - + @param request: CreateCodeSourceRequest @return: CreateCodeSourceResponse """ @@ -815,7 +817,7 @@ def create_collection_with_options( ) -> aiwork_space_20210204_models.CreateCollectionResponse: """ @summary 创建Collection - + @param request: CreateCollectionRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -853,7 +855,7 @@ async def create_collection_with_options_async( ) -> aiwork_space_20210204_models.CreateCollectionResponse: """ @summary 创建Collection - + @param request: CreateCollectionRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -889,7 +891,7 @@ def create_collection( ) -> aiwork_space_20210204_models.CreateCollectionResponse: """ @summary 创建Collection - + @param request: CreateCollectionRequest @return: CreateCollectionResponse """ @@ -903,7 +905,7 @@ async def create_collection_async( ) -> aiwork_space_20210204_models.CreateCollectionResponse: """ @summary 创建Collection - + @param request: CreateCollectionRequest @return: CreateCollectionResponse """ @@ -919,7 +921,7 @@ def create_dataset_with_options( ) -> aiwork_space_20210204_models.CreateDatasetResponse: """ @summary 创建数据集 - + @param request: CreateDatasetRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -929,6 +931,10 @@ def create_dataset_with_options( body = {} if not UtilClient.is_unset(request.accessibility): body['Accessibility'] = request.accessibility + if not UtilClient.is_unset(request.data_count): + body['DataCount'] = request.data_count + if not UtilClient.is_unset(request.data_size): + body['DataSize'] = request.data_size if not UtilClient.is_unset(request.data_source_type): body['DataSourceType'] = request.data_source_type if not UtilClient.is_unset(request.data_type): @@ -947,6 +953,10 @@ def create_dataset_with_options( body['Provider'] = request.provider if not UtilClient.is_unset(request.provider_type): body['ProviderType'] = request.provider_type + if not UtilClient.is_unset(request.source_dataset_id): + body['SourceDatasetId'] = request.source_dataset_id + if not UtilClient.is_unset(request.source_dataset_version): + body['SourceDatasetVersion'] = request.source_dataset_version if not UtilClient.is_unset(request.source_id): body['SourceId'] = request.source_id if not UtilClient.is_unset(request.source_type): @@ -955,6 +965,10 @@ def create_dataset_with_options( body['Uri'] = request.uri if not UtilClient.is_unset(request.user_id): body['UserId'] = request.user_id + if not UtilClient.is_unset(request.version_description): + body['VersionDescription'] = request.version_description + if not UtilClient.is_unset(request.version_labels): + body['VersionLabels'] = request.version_labels if not UtilClient.is_unset(request.workspace_id): body['WorkspaceId'] = request.workspace_id req = open_api_models.OpenApiRequest( @@ -985,7 +999,7 @@ async def create_dataset_with_options_async( ) -> aiwork_space_20210204_models.CreateDatasetResponse: """ @summary 创建数据集 - + @param request: CreateDatasetRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -995,6 +1009,10 @@ async def create_dataset_with_options_async( body = {} if not UtilClient.is_unset(request.accessibility): body['Accessibility'] = request.accessibility + if not UtilClient.is_unset(request.data_count): + body['DataCount'] = request.data_count + if not UtilClient.is_unset(request.data_size): + body['DataSize'] = request.data_size if not UtilClient.is_unset(request.data_source_type): body['DataSourceType'] = request.data_source_type if not UtilClient.is_unset(request.data_type): @@ -1013,6 +1031,10 @@ async def create_dataset_with_options_async( body['Provider'] = request.provider if not UtilClient.is_unset(request.provider_type): body['ProviderType'] = request.provider_type + if not UtilClient.is_unset(request.source_dataset_id): + body['SourceDatasetId'] = request.source_dataset_id + if not UtilClient.is_unset(request.source_dataset_version): + body['SourceDatasetVersion'] = request.source_dataset_version if not UtilClient.is_unset(request.source_id): body['SourceId'] = request.source_id if not UtilClient.is_unset(request.source_type): @@ -1021,6 +1043,10 @@ async def create_dataset_with_options_async( body['Uri'] = request.uri if not UtilClient.is_unset(request.user_id): body['UserId'] = request.user_id + if not UtilClient.is_unset(request.version_description): + body['VersionDescription'] = request.version_description + if not UtilClient.is_unset(request.version_labels): + body['VersionLabels'] = request.version_labels if not UtilClient.is_unset(request.workspace_id): body['WorkspaceId'] = request.workspace_id req = open_api_models.OpenApiRequest( @@ -1049,7 +1075,7 @@ def create_dataset( ) -> aiwork_space_20210204_models.CreateDatasetResponse: """ @summary 创建数据集 - + @param request: CreateDatasetRequest @return: CreateDatasetResponse """ @@ -1063,7 +1089,7 @@ async def create_dataset_async( ) -> aiwork_space_20210204_models.CreateDatasetResponse: """ @summary 创建数据集 - + @param request: CreateDatasetRequest @return: CreateDatasetResponse """ @@ -1080,7 +1106,7 @@ def create_dataset_labels_with_options( ) -> aiwork_space_20210204_models.CreateDatasetLabelsResponse: """ @summary 创建或更新 Dataset 的标签 - + @param request: CreateDatasetLabelsRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -1119,7 +1145,7 @@ async def create_dataset_labels_with_options_async( ) -> aiwork_space_20210204_models.CreateDatasetLabelsResponse: """ @summary 创建或更新 Dataset 的标签 - + @param request: CreateDatasetLabelsRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -1156,7 +1182,7 @@ def create_dataset_labels( ) -> aiwork_space_20210204_models.CreateDatasetLabelsResponse: """ @summary 创建或更新 Dataset 的标签 - + @param request: CreateDatasetLabelsRequest @return: CreateDatasetLabelsResponse """ @@ -1171,7 +1197,7 @@ async def create_dataset_labels_async( ) -> aiwork_space_20210204_models.CreateDatasetLabelsResponse: """ @summary 创建或更新 Dataset 的标签 - + @param request: CreateDatasetLabelsRequest @return: CreateDatasetLabelsResponse """ @@ -1179,6 +1205,263 @@ async def create_dataset_labels_async( headers = {} return await self.create_dataset_labels_with_options_async(dataset_id, request, headers, runtime) + def create_dataset_version_with_options( + self, + dataset_id: str, + request: aiwork_space_20210204_models.CreateDatasetVersionRequest, + headers: Dict[str, str], + runtime: util_models.RuntimeOptions, + ) -> aiwork_space_20210204_models.CreateDatasetVersionResponse: + """ + @summary 创建数据集版本 + + @param request: CreateDatasetVersionRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: CreateDatasetVersionResponse + """ + UtilClient.validate_model(request) + body = {} + if not UtilClient.is_unset(request.data_count): + body['DataCount'] = request.data_count + if not UtilClient.is_unset(request.data_size): + body['DataSize'] = request.data_size + if not UtilClient.is_unset(request.data_source_type): + body['DataSourceType'] = request.data_source_type + if not UtilClient.is_unset(request.description): + body['Description'] = request.description + if not UtilClient.is_unset(request.labels): + body['Labels'] = request.labels + if not UtilClient.is_unset(request.options): + body['Options'] = request.options + if not UtilClient.is_unset(request.property): + body['Property'] = request.property + if not UtilClient.is_unset(request.source_id): + body['SourceId'] = request.source_id + if not UtilClient.is_unset(request.source_type): + body['SourceType'] = request.source_type + if not UtilClient.is_unset(request.uri): + body['Uri'] = request.uri + req = open_api_models.OpenApiRequest( + headers=headers, + body=OpenApiUtilClient.parse_to_map(body) + ) + params = open_api_models.Params( + action='CreateDatasetVersion', + version='2021-02-04', + protocol='HTTPS', + pathname=f'/api/v1/datasets/{OpenApiUtilClient.get_encode_param(dataset_id)}/versions', + method='POST', + auth_type='AK', + style='ROA', + req_body_type='json', + body_type='json' + ) + return TeaCore.from_map( + aiwork_space_20210204_models.CreateDatasetVersionResponse(), + self.call_api(params, req, runtime) + ) + + async def create_dataset_version_with_options_async( + self, + dataset_id: str, + request: aiwork_space_20210204_models.CreateDatasetVersionRequest, + headers: Dict[str, str], + runtime: util_models.RuntimeOptions, + ) -> aiwork_space_20210204_models.CreateDatasetVersionResponse: + """ + @summary 创建数据集版本 + + @param request: CreateDatasetVersionRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: CreateDatasetVersionResponse + """ + UtilClient.validate_model(request) + body = {} + if not UtilClient.is_unset(request.data_count): + body['DataCount'] = request.data_count + if not UtilClient.is_unset(request.data_size): + body['DataSize'] = request.data_size + if not UtilClient.is_unset(request.data_source_type): + body['DataSourceType'] = request.data_source_type + if not UtilClient.is_unset(request.description): + body['Description'] = request.description + if not UtilClient.is_unset(request.labels): + body['Labels'] = request.labels + if not UtilClient.is_unset(request.options): + body['Options'] = request.options + if not UtilClient.is_unset(request.property): + body['Property'] = request.property + if not UtilClient.is_unset(request.source_id): + body['SourceId'] = request.source_id + if not UtilClient.is_unset(request.source_type): + body['SourceType'] = request.source_type + if not UtilClient.is_unset(request.uri): + body['Uri'] = request.uri + req = open_api_models.OpenApiRequest( + headers=headers, + body=OpenApiUtilClient.parse_to_map(body) + ) + params = open_api_models.Params( + action='CreateDatasetVersion', + version='2021-02-04', + protocol='HTTPS', + pathname=f'/api/v1/datasets/{OpenApiUtilClient.get_encode_param(dataset_id)}/versions', + method='POST', + auth_type='AK', + style='ROA', + req_body_type='json', + body_type='json' + ) + return TeaCore.from_map( + aiwork_space_20210204_models.CreateDatasetVersionResponse(), + await self.call_api_async(params, req, runtime) + ) + + def create_dataset_version( + self, + dataset_id: str, + request: aiwork_space_20210204_models.CreateDatasetVersionRequest, + ) -> aiwork_space_20210204_models.CreateDatasetVersionResponse: + """ + @summary 创建数据集版本 + + @param request: CreateDatasetVersionRequest + @return: CreateDatasetVersionResponse + """ + runtime = util_models.RuntimeOptions() + headers = {} + return self.create_dataset_version_with_options(dataset_id, request, headers, runtime) + + async def create_dataset_version_async( + self, + dataset_id: str, + request: aiwork_space_20210204_models.CreateDatasetVersionRequest, + ) -> aiwork_space_20210204_models.CreateDatasetVersionResponse: + """ + @summary 创建数据集版本 + + @param request: CreateDatasetVersionRequest + @return: CreateDatasetVersionResponse + """ + runtime = util_models.RuntimeOptions() + headers = {} + return await self.create_dataset_version_with_options_async(dataset_id, request, headers, runtime) + + def create_dataset_version_labels_with_options( + self, + dataset_id: str, + version_name: str, + request: aiwork_space_20210204_models.CreateDatasetVersionLabelsRequest, + headers: Dict[str, str], + runtime: util_models.RuntimeOptions, + ) -> aiwork_space_20210204_models.CreateDatasetVersionLabelsResponse: + """ + @summary 创建数据集版本的标签 + + @param request: CreateDatasetVersionLabelsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: CreateDatasetVersionLabelsResponse + """ + UtilClient.validate_model(request) + body = {} + if not UtilClient.is_unset(request.labels): + body['Labels'] = request.labels + req = open_api_models.OpenApiRequest( + headers=headers, + body=OpenApiUtilClient.parse_to_map(body) + ) + params = open_api_models.Params( + action='CreateDatasetVersionLabels', + version='2021-02-04', + protocol='HTTPS', + pathname=f'/api/v1/datasets/{OpenApiUtilClient.get_encode_param(dataset_id)}/versions/{OpenApiUtilClient.get_encode_param(version_name)}/labels', + method='PUT', + auth_type='AK', + style='ROA', + req_body_type='json', + body_type='json' + ) + return TeaCore.from_map( + aiwork_space_20210204_models.CreateDatasetVersionLabelsResponse(), + self.call_api(params, req, runtime) + ) + + async def create_dataset_version_labels_with_options_async( + self, + dataset_id: str, + version_name: str, + request: aiwork_space_20210204_models.CreateDatasetVersionLabelsRequest, + headers: Dict[str, str], + runtime: util_models.RuntimeOptions, + ) -> aiwork_space_20210204_models.CreateDatasetVersionLabelsResponse: + """ + @summary 创建数据集版本的标签 + + @param request: CreateDatasetVersionLabelsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: CreateDatasetVersionLabelsResponse + """ + UtilClient.validate_model(request) + body = {} + if not UtilClient.is_unset(request.labels): + body['Labels'] = request.labels + req = open_api_models.OpenApiRequest( + headers=headers, + body=OpenApiUtilClient.parse_to_map(body) + ) + params = open_api_models.Params( + action='CreateDatasetVersionLabels', + version='2021-02-04', + protocol='HTTPS', + pathname=f'/api/v1/datasets/{OpenApiUtilClient.get_encode_param(dataset_id)}/versions/{OpenApiUtilClient.get_encode_param(version_name)}/labels', + method='PUT', + auth_type='AK', + style='ROA', + req_body_type='json', + body_type='json' + ) + return TeaCore.from_map( + aiwork_space_20210204_models.CreateDatasetVersionLabelsResponse(), + await self.call_api_async(params, req, runtime) + ) + + def create_dataset_version_labels( + self, + dataset_id: str, + version_name: str, + request: aiwork_space_20210204_models.CreateDatasetVersionLabelsRequest, + ) -> aiwork_space_20210204_models.CreateDatasetVersionLabelsResponse: + """ + @summary 创建数据集版本的标签 + + @param request: CreateDatasetVersionLabelsRequest + @return: CreateDatasetVersionLabelsResponse + """ + runtime = util_models.RuntimeOptions() + headers = {} + return self.create_dataset_version_labels_with_options(dataset_id, version_name, request, headers, runtime) + + async def create_dataset_version_labels_async( + self, + dataset_id: str, + version_name: str, + request: aiwork_space_20210204_models.CreateDatasetVersionLabelsRequest, + ) -> aiwork_space_20210204_models.CreateDatasetVersionLabelsResponse: + """ + @summary 创建数据集版本的标签 + + @param request: CreateDatasetVersionLabelsRequest + @return: CreateDatasetVersionLabelsResponse + """ + runtime = util_models.RuntimeOptions() + headers = {} + return await self.create_dataset_version_labels_with_options_async(dataset_id, version_name, request, headers, + runtime) + def create_default_workspace_with_options( self, request: aiwork_space_20210204_models.CreateDefaultWorkspaceRequest, @@ -1187,7 +1470,7 @@ def create_default_workspace_with_options( ) -> aiwork_space_20210204_models.CreateDefaultWorkspaceResponse: """ @summary 创建默认工作空间 - + @param request: CreateDefaultWorkspaceRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -1231,7 +1514,7 @@ async def create_default_workspace_with_options_async( ) -> aiwork_space_20210204_models.CreateDefaultWorkspaceResponse: """ @summary 创建默认工作空间 - + @param request: CreateDefaultWorkspaceRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -1273,7 +1556,7 @@ def create_default_workspace( ) -> aiwork_space_20210204_models.CreateDefaultWorkspaceResponse: """ @summary 创建默认工作空间 - + @param request: CreateDefaultWorkspaceRequest @return: CreateDefaultWorkspaceResponse """ @@ -1287,7 +1570,7 @@ async def create_default_workspace_async( ) -> aiwork_space_20210204_models.CreateDefaultWorkspaceResponse: """ @summary 创建默认工作空间 - + @param request: CreateDefaultWorkspaceRequest @return: CreateDefaultWorkspaceResponse """ @@ -1303,7 +1586,7 @@ def create_ding_talk_robot_message_with_options( ) -> aiwork_space_20210204_models.CreateDingTalkRobotMessageResponse: """ @summary 发送特定格式的消息给钉钉机器人 - + @param request: CreateDingTalkRobotMessageRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -1345,7 +1628,7 @@ async def create_ding_talk_robot_message_with_options_async( ) -> aiwork_space_20210204_models.CreateDingTalkRobotMessageResponse: """ @summary 发送特定格式的消息给钉钉机器人 - + @param request: CreateDingTalkRobotMessageRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -1385,7 +1668,7 @@ def create_ding_talk_robot_message( ) -> aiwork_space_20210204_models.CreateDingTalkRobotMessageResponse: """ @summary 发送特定格式的消息给钉钉机器人 - + @param request: CreateDingTalkRobotMessageRequest @return: CreateDingTalkRobotMessageResponse """ @@ -1399,7 +1682,7 @@ async def create_ding_talk_robot_message_async( ) -> aiwork_space_20210204_models.CreateDingTalkRobotMessageResponse: """ @summary 发送特定格式的消息给钉钉机器人 - + @param request: CreateDingTalkRobotMessageRequest @return: CreateDingTalkRobotMessageResponse """ @@ -1415,7 +1698,7 @@ def create_experiment_with_options( ) -> aiwork_space_20210204_models.CreateExperimentResponse: """ @summary 创建实验 - + @param request: CreateExperimentRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -1461,7 +1744,7 @@ async def create_experiment_with_options_async( ) -> aiwork_space_20210204_models.CreateExperimentResponse: """ @summary 创建实验 - + @param request: CreateExperimentRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -1505,7 +1788,7 @@ def create_experiment( ) -> aiwork_space_20210204_models.CreateExperimentResponse: """ @summary 创建实验 - + @param request: CreateExperimentRequest @return: CreateExperimentResponse """ @@ -1519,7 +1802,7 @@ async def create_experiment_async( ) -> aiwork_space_20210204_models.CreateExperimentResponse: """ @summary 创建实验 - + @param request: CreateExperimentRequest @return: CreateExperimentResponse """ @@ -1536,7 +1819,7 @@ def create_member_with_options( ) -> aiwork_space_20210204_models.CreateMemberResponse: """ @summary 创建成员 - + @param request: CreateMemberRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -1575,7 +1858,7 @@ async def create_member_with_options_async( ) -> aiwork_space_20210204_models.CreateMemberResponse: """ @summary 创建成员 - + @param request: CreateMemberRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -1612,7 +1895,7 @@ def create_member( ) -> aiwork_space_20210204_models.CreateMemberResponse: """ @summary 创建成员 - + @param request: CreateMemberRequest @return: CreateMemberResponse """ @@ -1627,7 +1910,7 @@ async def create_member_async( ) -> aiwork_space_20210204_models.CreateMemberResponse: """ @summary 创建成员 - + @param request: CreateMemberRequest @return: CreateMemberResponse """ @@ -1643,7 +1926,7 @@ def create_model_with_options( ) -> aiwork_space_20210204_models.CreateModelResponse: """ @summary 创建模型 - + @param request: CreateModelRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -1703,7 +1986,7 @@ async def create_model_with_options_async( ) -> aiwork_space_20210204_models.CreateModelResponse: """ @summary 创建模型 - + @param request: CreateModelRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -1761,7 +2044,7 @@ def create_model( ) -> aiwork_space_20210204_models.CreateModelResponse: """ @summary 创建模型 - + @param request: CreateModelRequest @return: CreateModelResponse """ @@ -1775,7 +2058,7 @@ async def create_model_async( ) -> aiwork_space_20210204_models.CreateModelResponse: """ @summary 创建模型 - + @param request: CreateModelRequest @return: CreateModelResponse """ @@ -1792,7 +2075,7 @@ def create_model_labels_with_options( ) -> aiwork_space_20210204_models.CreateModelLabelsResponse: """ @summary 创建或更新模型的标签 - + @param request: CreateModelLabelsRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -1831,7 +2114,7 @@ async def create_model_labels_with_options_async( ) -> aiwork_space_20210204_models.CreateModelLabelsResponse: """ @summary 创建或更新模型的标签 - + @param request: CreateModelLabelsRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -1868,7 +2151,7 @@ def create_model_labels( ) -> aiwork_space_20210204_models.CreateModelLabelsResponse: """ @summary 创建或更新模型的标签 - + @param request: CreateModelLabelsRequest @return: CreateModelLabelsResponse """ @@ -1883,7 +2166,7 @@ async def create_model_labels_async( ) -> aiwork_space_20210204_models.CreateModelLabelsResponse: """ @summary 创建或更新模型的标签 - + @param request: CreateModelLabelsRequest @return: CreateModelLabelsResponse """ @@ -1900,7 +2183,7 @@ def create_model_release_with_options( ) -> aiwork_space_20210204_models.CreateModelReleaseResponse: """ @summary 发布模型 - + @param request: CreateModelReleaseRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -1943,7 +2226,7 @@ async def create_model_release_with_options_async( ) -> aiwork_space_20210204_models.CreateModelReleaseResponse: """ @summary 发布模型 - + @param request: CreateModelReleaseRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -1984,7 +2267,7 @@ def create_model_release( ) -> aiwork_space_20210204_models.CreateModelReleaseResponse: """ @summary 发布模型 - + @param request: CreateModelReleaseRequest @return: CreateModelReleaseResponse """ @@ -1999,7 +2282,7 @@ async def create_model_release_async( ) -> aiwork_space_20210204_models.CreateModelReleaseResponse: """ @summary 发布模型 - + @param request: CreateModelReleaseRequest @return: CreateModelReleaseResponse """ @@ -2016,7 +2299,7 @@ def create_model_version_with_options( ) -> aiwork_space_20210204_models.CreateModelVersionResponse: """ @summary 创建模型版本 - + @param request: CreateModelVersionRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -2085,7 +2368,7 @@ async def create_model_version_with_options_async( ) -> aiwork_space_20210204_models.CreateModelVersionResponse: """ @summary 创建模型版本 - + @param request: CreateModelVersionRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -2152,7 +2435,7 @@ def create_model_version( ) -> aiwork_space_20210204_models.CreateModelVersionResponse: """ @summary 创建模型版本 - + @param request: CreateModelVersionRequest @return: CreateModelVersionResponse """ @@ -2167,7 +2450,7 @@ async def create_model_version_async( ) -> aiwork_space_20210204_models.CreateModelVersionResponse: """ @summary 创建模型版本 - + @param request: CreateModelVersionRequest @return: CreateModelVersionResponse """ @@ -2185,7 +2468,7 @@ def create_model_version_labels_with_options( ) -> aiwork_space_20210204_models.CreateModelVersionLabelsResponse: """ @summary 创建或更新模型版本的标签 - + @param request: CreateModelVersionLabelsRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -2225,7 +2508,7 @@ async def create_model_version_labels_with_options_async( ) -> aiwork_space_20210204_models.CreateModelVersionLabelsResponse: """ @summary 创建或更新模型版本的标签 - + @param request: CreateModelVersionLabelsRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -2263,7 +2546,7 @@ def create_model_version_labels( ) -> aiwork_space_20210204_models.CreateModelVersionLabelsResponse: """ @summary 创建或更新模型版本的标签 - + @param request: CreateModelVersionLabelsRequest @return: CreateModelVersionLabelsResponse """ @@ -2279,13 +2562,14 @@ async def create_model_version_labels_async( ) -> aiwork_space_20210204_models.CreateModelVersionLabelsResponse: """ @summary 创建或更新模型版本的标签 - + @param request: CreateModelVersionLabelsRequest @return: CreateModelVersionLabelsResponse """ runtime = util_models.RuntimeOptions() headers = {} - return await self.create_model_version_labels_with_options_async(model_id, version_name, request, headers, runtime) + return await self.create_model_version_labels_with_options_async(model_id, version_name, request, headers, + runtime) def create_model_version_release_with_options( self, @@ -2297,7 +2581,7 @@ def create_model_version_release_with_options( ) -> aiwork_space_20210204_models.CreateModelVersionReleaseResponse: """ @summary 发布模型版本 - + @param request: CreateModelVersionReleaseRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -2339,7 +2623,7 @@ async def create_model_version_release_with_options_async( ) -> aiwork_space_20210204_models.CreateModelVersionReleaseResponse: """ @summary 发布模型版本 - + @param request: CreateModelVersionReleaseRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -2379,7 +2663,7 @@ def create_model_version_release( ) -> aiwork_space_20210204_models.CreateModelVersionReleaseResponse: """ @summary 发布模型版本 - + @param request: CreateModelVersionReleaseRequest @return: CreateModelVersionReleaseResponse """ @@ -2395,13 +2679,14 @@ async def create_model_version_release_async( ) -> aiwork_space_20210204_models.CreateModelVersionReleaseResponse: """ @summary 发布模型版本 - + @param request: CreateModelVersionReleaseRequest @return: CreateModelVersionReleaseResponse """ runtime = util_models.RuntimeOptions() headers = {} - return await self.create_model_version_release_with_options_async(model_id, version_name, request, headers, runtime) + return await self.create_model_version_release_with_options_async(model_id, version_name, request, headers, + runtime) def create_product_orders_with_options( self, @@ -2411,7 +2696,7 @@ def create_product_orders_with_options( ) -> aiwork_space_20210204_models.CreateProductOrdersResponse: """ @summary 创建产品订单 - + @param request: CreateProductOrdersRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -2451,7 +2736,7 @@ async def create_product_orders_with_options_async( ) -> aiwork_space_20210204_models.CreateProductOrdersResponse: """ @summary 创建产品订单 - + @param request: CreateProductOrdersRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -2489,7 +2774,7 @@ def create_product_orders( ) -> aiwork_space_20210204_models.CreateProductOrdersResponse: """ @summary 创建产品订单 - + @param request: CreateProductOrdersRequest @return: CreateProductOrdersResponse """ @@ -2503,7 +2788,7 @@ async def create_product_orders_async( ) -> aiwork_space_20210204_models.CreateProductOrdersResponse: """ @summary 创建产品订单 - + @param request: CreateProductOrdersRequest @return: CreateProductOrdersResponse """ @@ -2519,7 +2804,7 @@ def create_service_identity_role_with_options( ) -> aiwork_space_20210204_models.CreateServiceIdentityRoleResponse: """ @summary 创建被PAI服务账户扮演的角色 - + @param request: CreateServiceIdentityRoleRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -2557,7 +2842,7 @@ async def create_service_identity_role_with_options_async( ) -> aiwork_space_20210204_models.CreateServiceIdentityRoleResponse: """ @summary 创建被PAI服务账户扮演的角色 - + @param request: CreateServiceIdentityRoleRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -2593,7 +2878,7 @@ def create_service_identity_role( ) -> aiwork_space_20210204_models.CreateServiceIdentityRoleResponse: """ @summary 创建被PAI服务账户扮演的角色 - + @param request: CreateServiceIdentityRoleRequest @return: CreateServiceIdentityRoleResponse """ @@ -2607,7 +2892,7 @@ async def create_service_identity_role_async( ) -> aiwork_space_20210204_models.CreateServiceIdentityRoleResponse: """ @summary 创建被PAI服务账户扮演的角色 - + @param request: CreateServiceIdentityRoleRequest @return: CreateServiceIdentityRoleResponse """ @@ -2623,7 +2908,7 @@ def create_service_template_with_options( ) -> aiwork_space_20210204_models.CreateServiceTemplateResponse: """ @summary 创建服务模版 - + @param request: CreateServiceTemplateRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -2673,7 +2958,7 @@ async def create_service_template_with_options_async( ) -> aiwork_space_20210204_models.CreateServiceTemplateResponse: """ @summary 创建服务模版 - + @param request: CreateServiceTemplateRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -2721,7 +3006,7 @@ def create_service_template( ) -> aiwork_space_20210204_models.CreateServiceTemplateResponse: """ @summary 创建服务模版 - + @param request: CreateServiceTemplateRequest @return: CreateServiceTemplateResponse """ @@ -2735,7 +3020,7 @@ async def create_service_template_async( ) -> aiwork_space_20210204_models.CreateServiceTemplateResponse: """ @summary 创建服务模版 - + @param request: CreateServiceTemplateRequest @return: CreateServiceTemplateResponse """ @@ -2752,7 +3037,7 @@ def create_service_template_labels_with_options( ) -> aiwork_space_20210204_models.CreateServiceTemplateLabelsResponse: """ @summary 创建或更新服务模版的标签 - + @param request: CreateServiceTemplateLabelsRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -2791,7 +3076,7 @@ async def create_service_template_labels_with_options_async( ) -> aiwork_space_20210204_models.CreateServiceTemplateLabelsResponse: """ @summary 创建或更新服务模版的标签 - + @param request: CreateServiceTemplateLabelsRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -2828,7 +3113,7 @@ def create_service_template_labels( ) -> aiwork_space_20210204_models.CreateServiceTemplateLabelsResponse: """ @summary 创建或更新服务模版的标签 - + @param request: CreateServiceTemplateLabelsRequest @return: CreateServiceTemplateLabelsResponse """ @@ -2843,13 +3128,14 @@ async def create_service_template_labels_async( ) -> aiwork_space_20210204_models.CreateServiceTemplateLabelsResponse: """ @summary 创建或更新服务模版的标签 - + @param request: CreateServiceTemplateLabelsRequest @return: CreateServiceTemplateLabelsResponse """ runtime = util_models.RuntimeOptions() headers = {} - return await self.create_service_template_labels_with_options_async(service_template_id, request, headers, runtime) + return await self.create_service_template_labels_with_options_async(service_template_id, request, headers, + runtime) def create_trial_with_options( self, @@ -2859,7 +3145,7 @@ def create_trial_with_options( ) -> aiwork_space_20210204_models.CreateTrialResponse: """ @summary 创建Trial - + @param request: CreateTrialRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -2905,7 +3191,7 @@ async def create_trial_with_options_async( ) -> aiwork_space_20210204_models.CreateTrialResponse: """ @summary 创建Trial - + @param request: CreateTrialRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -2949,7 +3235,7 @@ def create_trial( ) -> aiwork_space_20210204_models.CreateTrialResponse: """ @summary 创建Trial - + @param request: CreateTrialRequest @return: CreateTrialResponse """ @@ -2963,7 +3249,7 @@ async def create_trial_async( ) -> aiwork_space_20210204_models.CreateTrialResponse: """ @summary 创建Trial - + @param request: CreateTrialRequest @return: CreateTrialResponse """ @@ -2978,7 +3264,7 @@ def create_user_with_options( ) -> aiwork_space_20210204_models.CreateUserResponse: """ @summary 创建用户 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: CreateUserResponse @@ -3009,7 +3295,7 @@ async def create_user_with_options_async( ) -> aiwork_space_20210204_models.CreateUserResponse: """ @summary 创建用户 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: CreateUserResponse @@ -3036,7 +3322,7 @@ async def create_user_with_options_async( def create_user(self) -> aiwork_space_20210204_models.CreateUserResponse: """ @summary 创建用户 - + @return: CreateUserResponse """ runtime = util_models.RuntimeOptions() @@ -3046,7 +3332,7 @@ def create_user(self) -> aiwork_space_20210204_models.CreateUserResponse: async def create_user_async(self) -> aiwork_space_20210204_models.CreateUserResponse: """ @summary 创建用户 - + @return: CreateUserResponse """ runtime = util_models.RuntimeOptions() @@ -3061,7 +3347,7 @@ def create_workspace_with_options( ) -> aiwork_space_20210204_models.CreateWorkspaceResponse: """ @summary 创建工作空间 - + @param request: CreateWorkspaceRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -3105,7 +3391,7 @@ async def create_workspace_with_options_async( ) -> aiwork_space_20210204_models.CreateWorkspaceResponse: """ @summary 创建工作空间 - + @param request: CreateWorkspaceRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -3147,7 +3433,7 @@ def create_workspace( ) -> aiwork_space_20210204_models.CreateWorkspaceResponse: """ @summary 创建工作空间 - + @param request: CreateWorkspaceRequest @return: CreateWorkspaceResponse """ @@ -3161,7 +3447,7 @@ async def create_workspace_async( ) -> aiwork_space_20210204_models.CreateWorkspaceResponse: """ @summary 创建工作空间 - + @param request: CreateWorkspaceRequest @return: CreateWorkspaceResponse """ @@ -3178,7 +3464,7 @@ def create_workspace_resource_with_options( ) -> aiwork_space_20210204_models.CreateWorkspaceResourceResponse: """ @summary 创建资源 - + @param request: CreateWorkspaceResourceRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -3219,7 +3505,7 @@ async def create_workspace_resource_with_options_async( ) -> aiwork_space_20210204_models.CreateWorkspaceResourceResponse: """ @summary 创建资源 - + @param request: CreateWorkspaceResourceRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -3258,7 +3544,7 @@ def create_workspace_resource( ) -> aiwork_space_20210204_models.CreateWorkspaceResourceResponse: """ @summary 创建资源 - + @param request: CreateWorkspaceResourceRequest @return: CreateWorkspaceResourceResponse """ @@ -3273,7 +3559,7 @@ async def create_workspace_resource_async( ) -> aiwork_space_20210204_models.CreateWorkspaceResourceResponse: """ @summary 创建资源 - + @param request: CreateWorkspaceResourceRequest @return: CreateWorkspaceResourceResponse """ @@ -3289,7 +3575,7 @@ def delete_code_source_with_options( ) -> aiwork_space_20210204_models.DeleteCodeSourceResponse: """ @summary 删除一个代码源配置 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: DeleteCodeSourceResponse @@ -3321,7 +3607,7 @@ async def delete_code_source_with_options_async( ) -> aiwork_space_20210204_models.DeleteCodeSourceResponse: """ @summary 删除一个代码源配置 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: DeleteCodeSourceResponse @@ -3351,7 +3637,7 @@ def delete_code_source( ) -> aiwork_space_20210204_models.DeleteCodeSourceResponse: """ @summary 删除一个代码源配置 - + @return: DeleteCodeSourceResponse """ runtime = util_models.RuntimeOptions() @@ -3364,7 +3650,7 @@ async def delete_code_source_async( ) -> aiwork_space_20210204_models.DeleteCodeSourceResponse: """ @summary 删除一个代码源配置 - + @return: DeleteCodeSourceResponse """ runtime = util_models.RuntimeOptions() @@ -3379,7 +3665,7 @@ def delete_collection_with_options( ) -> aiwork_space_20210204_models.DeleteCollectionResponse: """ @summary 删除Collection - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: DeleteCollectionResponse @@ -3411,7 +3697,7 @@ async def delete_collection_with_options_async( ) -> aiwork_space_20210204_models.DeleteCollectionResponse: """ @summary 删除Collection - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: DeleteCollectionResponse @@ -3441,7 +3727,7 @@ def delete_collection( ) -> aiwork_space_20210204_models.DeleteCollectionResponse: """ @summary 删除Collection - + @return: DeleteCollectionResponse """ runtime = util_models.RuntimeOptions() @@ -3454,7 +3740,7 @@ async def delete_collection_async( ) -> aiwork_space_20210204_models.DeleteCollectionResponse: """ @summary 删除Collection - + @return: DeleteCollectionResponse """ runtime = util_models.RuntimeOptions() @@ -3471,7 +3757,7 @@ def delete_config_with_options( ) -> aiwork_space_20210204_models.DeleteConfigResponse: """ @summary 删除配置 - + @param request: DeleteConfigRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -3511,7 +3797,7 @@ async def delete_config_with_options_async( ) -> aiwork_space_20210204_models.DeleteConfigResponse: """ @summary 删除配置 - + @param request: DeleteConfigRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -3549,7 +3835,7 @@ def delete_config( ) -> aiwork_space_20210204_models.DeleteConfigResponse: """ @summary 删除配置 - + @param request: DeleteConfigRequest @return: DeleteConfigResponse """ @@ -3565,7 +3851,7 @@ async def delete_config_async( ) -> aiwork_space_20210204_models.DeleteConfigResponse: """ @summary 删除配置 - + @param request: DeleteConfigRequest @return: DeleteConfigResponse """ @@ -3581,7 +3867,7 @@ def delete_dataset_with_options( ) -> aiwork_space_20210204_models.DeleteDatasetResponse: """ @summary 删除数据集 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: DeleteDatasetResponse @@ -3613,7 +3899,7 @@ async def delete_dataset_with_options_async( ) -> aiwork_space_20210204_models.DeleteDatasetResponse: """ @summary 删除数据集 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: DeleteDatasetResponse @@ -3643,7 +3929,7 @@ def delete_dataset( ) -> aiwork_space_20210204_models.DeleteDatasetResponse: """ @summary 删除数据集 - + @return: DeleteDatasetResponse """ runtime = util_models.RuntimeOptions() @@ -3656,7 +3942,7 @@ async def delete_dataset_async( ) -> aiwork_space_20210204_models.DeleteDatasetResponse: """ @summary 删除数据集 - + @return: DeleteDatasetResponse """ runtime = util_models.RuntimeOptions() @@ -3672,7 +3958,7 @@ def delete_dataset_labels_with_options( ) -> aiwork_space_20210204_models.DeleteDatasetLabelsResponse: """ @summary 删除 Dataset 的标签 - + @param request: DeleteDatasetLabelsRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -3680,8 +3966,6 @@ def delete_dataset_labels_with_options( """ UtilClient.validate_model(request) query = {} - if not UtilClient.is_unset(request.keys): - query['Keys'] = request.keys if not UtilClient.is_unset(request.label_keys): query['LabelKeys'] = request.label_keys req = open_api_models.OpenApiRequest( @@ -3713,7 +3997,7 @@ async def delete_dataset_labels_with_options_async( ) -> aiwork_space_20210204_models.DeleteDatasetLabelsResponse: """ @summary 删除 Dataset 的标签 - + @param request: DeleteDatasetLabelsRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -3721,8 +4005,6 @@ async def delete_dataset_labels_with_options_async( """ UtilClient.validate_model(request) query = {} - if not UtilClient.is_unset(request.keys): - query['Keys'] = request.keys if not UtilClient.is_unset(request.label_keys): query['LabelKeys'] = request.label_keys req = open_api_models.OpenApiRequest( @@ -3752,7 +4034,7 @@ def delete_dataset_labels( ) -> aiwork_space_20210204_models.DeleteDatasetLabelsResponse: """ @summary 删除 Dataset 的标签 - + @param request: DeleteDatasetLabelsRequest @return: DeleteDatasetLabelsResponse """ @@ -3767,7 +4049,7 @@ async def delete_dataset_labels_async( ) -> aiwork_space_20210204_models.DeleteDatasetLabelsResponse: """ @summary 删除 Dataset 的标签 - + @param request: DeleteDatasetLabelsRequest @return: DeleteDatasetLabelsResponse """ @@ -3775,6 +4057,213 @@ async def delete_dataset_labels_async( headers = {} return await self.delete_dataset_labels_with_options_async(dataset_id, request, headers, runtime) + def delete_dataset_version_with_options( + self, + dataset_id: str, + version_name: str, + headers: Dict[str, str], + runtime: util_models.RuntimeOptions, + ) -> aiwork_space_20210204_models.DeleteDatasetVersionResponse: + """ + @summary 删除指定版本的数据集信息,如果删除的版本是该数据集的仅存版本,版本删除后会联动删除dataset 表中的数据集信息 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: DeleteDatasetVersionResponse + """ + req = open_api_models.OpenApiRequest( + headers=headers + ) + params = open_api_models.Params( + action='DeleteDatasetVersion', + version='2021-02-04', + protocol='HTTPS', + pathname=f'/api/v1/datasets/{OpenApiUtilClient.get_encode_param(dataset_id)}/versions/{OpenApiUtilClient.get_encode_param(version_name)}', + method='DELETE', + auth_type='AK', + style='ROA', + req_body_type='json', + body_type='json' + ) + return TeaCore.from_map( + aiwork_space_20210204_models.DeleteDatasetVersionResponse(), + self.call_api(params, req, runtime) + ) + + async def delete_dataset_version_with_options_async( + self, + dataset_id: str, + version_name: str, + headers: Dict[str, str], + runtime: util_models.RuntimeOptions, + ) -> aiwork_space_20210204_models.DeleteDatasetVersionResponse: + """ + @summary 删除指定版本的数据集信息,如果删除的版本是该数据集的仅存版本,版本删除后会联动删除dataset 表中的数据集信息 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: DeleteDatasetVersionResponse + """ + req = open_api_models.OpenApiRequest( + headers=headers + ) + params = open_api_models.Params( + action='DeleteDatasetVersion', + version='2021-02-04', + protocol='HTTPS', + pathname=f'/api/v1/datasets/{OpenApiUtilClient.get_encode_param(dataset_id)}/versions/{OpenApiUtilClient.get_encode_param(version_name)}', + method='DELETE', + auth_type='AK', + style='ROA', + req_body_type='json', + body_type='json' + ) + return TeaCore.from_map( + aiwork_space_20210204_models.DeleteDatasetVersionResponse(), + await self.call_api_async(params, req, runtime) + ) + + def delete_dataset_version( + self, + dataset_id: str, + version_name: str, + ) -> aiwork_space_20210204_models.DeleteDatasetVersionResponse: + """ + @summary 删除指定版本的数据集信息,如果删除的版本是该数据集的仅存版本,版本删除后会联动删除dataset 表中的数据集信息 + + @return: DeleteDatasetVersionResponse + """ + runtime = util_models.RuntimeOptions() + headers = {} + return self.delete_dataset_version_with_options(dataset_id, version_name, headers, runtime) + + async def delete_dataset_version_async( + self, + dataset_id: str, + version_name: str, + ) -> aiwork_space_20210204_models.DeleteDatasetVersionResponse: + """ + @summary 删除指定版本的数据集信息,如果删除的版本是该数据集的仅存版本,版本删除后会联动删除dataset 表中的数据集信息 + + @return: DeleteDatasetVersionResponse + """ + runtime = util_models.RuntimeOptions() + headers = {} + return await self.delete_dataset_version_with_options_async(dataset_id, version_name, headers, runtime) + + def delete_dataset_version_labels_with_options( + self, + dataset_id: str, + version_name: str, + request: aiwork_space_20210204_models.DeleteDatasetVersionLabelsRequest, + headers: Dict[str, str], + runtime: util_models.RuntimeOptions, + ) -> aiwork_space_20210204_models.DeleteDatasetVersionLabelsResponse: + """ + @summary 删除数据集版本的标签。 + + @param request: DeleteDatasetVersionLabelsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: DeleteDatasetVersionLabelsResponse + """ + UtilClient.validate_model(request) + query = {} + if not UtilClient.is_unset(request.keys): + query['Keys'] = request.keys + req = open_api_models.OpenApiRequest( + headers=headers, + query=OpenApiUtilClient.query(query) + ) + params = open_api_models.Params( + action='DeleteDatasetVersionLabels', + version='2021-02-04', + protocol='HTTPS', + pathname=f'/api/v1/datasets/{OpenApiUtilClient.get_encode_param(dataset_id)}/versions/{OpenApiUtilClient.get_encode_param(version_name)}/labels', + method='DELETE', + auth_type='AK', + style='ROA', + req_body_type='json', + body_type='json' + ) + return TeaCore.from_map( + aiwork_space_20210204_models.DeleteDatasetVersionLabelsResponse(), + self.call_api(params, req, runtime) + ) + + async def delete_dataset_version_labels_with_options_async( + self, + dataset_id: str, + version_name: str, + request: aiwork_space_20210204_models.DeleteDatasetVersionLabelsRequest, + headers: Dict[str, str], + runtime: util_models.RuntimeOptions, + ) -> aiwork_space_20210204_models.DeleteDatasetVersionLabelsResponse: + """ + @summary 删除数据集版本的标签。 + + @param request: DeleteDatasetVersionLabelsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: DeleteDatasetVersionLabelsResponse + """ + UtilClient.validate_model(request) + query = {} + if not UtilClient.is_unset(request.keys): + query['Keys'] = request.keys + req = open_api_models.OpenApiRequest( + headers=headers, + query=OpenApiUtilClient.query(query) + ) + params = open_api_models.Params( + action='DeleteDatasetVersionLabels', + version='2021-02-04', + protocol='HTTPS', + pathname=f'/api/v1/datasets/{OpenApiUtilClient.get_encode_param(dataset_id)}/versions/{OpenApiUtilClient.get_encode_param(version_name)}/labels', + method='DELETE', + auth_type='AK', + style='ROA', + req_body_type='json', + body_type='json' + ) + return TeaCore.from_map( + aiwork_space_20210204_models.DeleteDatasetVersionLabelsResponse(), + await self.call_api_async(params, req, runtime) + ) + + def delete_dataset_version_labels( + self, + dataset_id: str, + version_name: str, + request: aiwork_space_20210204_models.DeleteDatasetVersionLabelsRequest, + ) -> aiwork_space_20210204_models.DeleteDatasetVersionLabelsResponse: + """ + @summary 删除数据集版本的标签。 + + @param request: DeleteDatasetVersionLabelsRequest + @return: DeleteDatasetVersionLabelsResponse + """ + runtime = util_models.RuntimeOptions() + headers = {} + return self.delete_dataset_version_labels_with_options(dataset_id, version_name, request, headers, runtime) + + async def delete_dataset_version_labels_async( + self, + dataset_id: str, + version_name: str, + request: aiwork_space_20210204_models.DeleteDatasetVersionLabelsRequest, + ) -> aiwork_space_20210204_models.DeleteDatasetVersionLabelsResponse: + """ + @summary 删除数据集版本的标签。 + + @param request: DeleteDatasetVersionLabelsRequest + @return: DeleteDatasetVersionLabelsResponse + """ + runtime = util_models.RuntimeOptions() + headers = {} + return await self.delete_dataset_version_labels_with_options_async(dataset_id, version_name, request, headers, + runtime) + def delete_experiment_with_options( self, experiment_id: str, @@ -3783,7 +4272,7 @@ def delete_experiment_with_options( ) -> aiwork_space_20210204_models.DeleteExperimentResponse: """ @summary 删除实验 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: DeleteExperimentResponse @@ -3815,7 +4304,7 @@ async def delete_experiment_with_options_async( ) -> aiwork_space_20210204_models.DeleteExperimentResponse: """ @summary 删除实验 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: DeleteExperimentResponse @@ -3845,7 +4334,7 @@ def delete_experiment( ) -> aiwork_space_20210204_models.DeleteExperimentResponse: """ @summary 删除实验 - + @return: DeleteExperimentResponse """ runtime = util_models.RuntimeOptions() @@ -3858,7 +4347,7 @@ async def delete_experiment_async( ) -> aiwork_space_20210204_models.DeleteExperimentResponse: """ @summary 删除实验 - + @return: DeleteExperimentResponse """ runtime = util_models.RuntimeOptions() @@ -3874,7 +4363,7 @@ def delete_experiment_label_with_options( ) -> aiwork_space_20210204_models.DeleteExperimentLabelResponse: """ @summary 删除实验标签 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: DeleteExperimentLabelResponse @@ -3907,7 +4396,7 @@ async def delete_experiment_label_with_options_async( ) -> aiwork_space_20210204_models.DeleteExperimentLabelResponse: """ @summary 删除实验标签 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: DeleteExperimentLabelResponse @@ -3938,7 +4427,7 @@ def delete_experiment_label( ) -> aiwork_space_20210204_models.DeleteExperimentLabelResponse: """ @summary 删除实验标签 - + @return: DeleteExperimentLabelResponse """ runtime = util_models.RuntimeOptions() @@ -3952,7 +4441,7 @@ async def delete_experiment_label_async( ) -> aiwork_space_20210204_models.DeleteExperimentLabelResponse: """ @summary 删除实验标签 - + @return: DeleteExperimentLabelResponse """ runtime = util_models.RuntimeOptions() @@ -3968,7 +4457,7 @@ def delete_members_with_options( ) -> aiwork_space_20210204_models.DeleteMembersResponse: """ @summary 删除工作空间成员 - + @param request: DeleteMembersRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -4007,7 +4496,7 @@ async def delete_members_with_options_async( ) -> aiwork_space_20210204_models.DeleteMembersResponse: """ @summary 删除工作空间成员 - + @param request: DeleteMembersRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -4044,7 +4533,7 @@ def delete_members( ) -> aiwork_space_20210204_models.DeleteMembersResponse: """ @summary 删除工作空间成员 - + @param request: DeleteMembersRequest @return: DeleteMembersResponse """ @@ -4059,7 +4548,7 @@ async def delete_members_async( ) -> aiwork_space_20210204_models.DeleteMembersResponse: """ @summary 删除工作空间成员 - + @param request: DeleteMembersRequest @return: DeleteMembersResponse """ @@ -4075,7 +4564,7 @@ def delete_model_with_options( ) -> aiwork_space_20210204_models.DeleteModelResponse: """ @summary 删除模型 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: DeleteModelResponse @@ -4107,7 +4596,7 @@ async def delete_model_with_options_async( ) -> aiwork_space_20210204_models.DeleteModelResponse: """ @summary 删除模型 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: DeleteModelResponse @@ -4137,7 +4626,7 @@ def delete_model( ) -> aiwork_space_20210204_models.DeleteModelResponse: """ @summary 删除模型 - + @return: DeleteModelResponse """ runtime = util_models.RuntimeOptions() @@ -4150,7 +4639,7 @@ async def delete_model_async( ) -> aiwork_space_20210204_models.DeleteModelResponse: """ @summary 删除模型 - + @return: DeleteModelResponse """ runtime = util_models.RuntimeOptions() @@ -4166,7 +4655,7 @@ def delete_model_domain_with_options( ) -> aiwork_space_20210204_models.DeleteModelDomainResponse: """ @summary 删除模型领域 - + @param request: DeleteModelDomainRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -4205,7 +4694,7 @@ async def delete_model_domain_with_options_async( ) -> aiwork_space_20210204_models.DeleteModelDomainResponse: """ @summary 删除模型领域 - + @param request: DeleteModelDomainRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -4242,7 +4731,7 @@ def delete_model_domain( ) -> aiwork_space_20210204_models.DeleteModelDomainResponse: """ @summary 删除模型领域 - + @param request: DeleteModelDomainRequest @return: DeleteModelDomainResponse """ @@ -4257,7 +4746,7 @@ async def delete_model_domain_async( ) -> aiwork_space_20210204_models.DeleteModelDomainResponse: """ @summary 删除模型领域 - + @param request: DeleteModelDomainRequest @return: DeleteModelDomainResponse """ @@ -4274,7 +4763,7 @@ def delete_model_labels_with_options( ) -> aiwork_space_20210204_models.DeleteModelLabelsResponse: """ @summary 删除模型的标签 - + @param request: DeleteModelLabelsRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -4315,7 +4804,7 @@ async def delete_model_labels_with_options_async( ) -> aiwork_space_20210204_models.DeleteModelLabelsResponse: """ @summary 删除模型的标签 - + @param request: DeleteModelLabelsRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -4354,7 +4843,7 @@ def delete_model_labels( ) -> aiwork_space_20210204_models.DeleteModelLabelsResponse: """ @summary 删除模型的标签 - + @param request: DeleteModelLabelsRequest @return: DeleteModelLabelsResponse """ @@ -4369,7 +4858,7 @@ async def delete_model_labels_async( ) -> aiwork_space_20210204_models.DeleteModelLabelsResponse: """ @summary 删除模型的标签 - + @param request: DeleteModelLabelsRequest @return: DeleteModelLabelsResponse """ @@ -4386,7 +4875,7 @@ def delete_model_version_with_options( ) -> aiwork_space_20210204_models.DeleteModelVersionResponse: """ @summary 删除模型版本 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: DeleteModelVersionResponse @@ -4419,7 +4908,7 @@ async def delete_model_version_with_options_async( ) -> aiwork_space_20210204_models.DeleteModelVersionResponse: """ @summary 删除模型版本 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: DeleteModelVersionResponse @@ -4450,7 +4939,7 @@ def delete_model_version( ) -> aiwork_space_20210204_models.DeleteModelVersionResponse: """ @summary 删除模型版本 - + @return: DeleteModelVersionResponse """ runtime = util_models.RuntimeOptions() @@ -4464,7 +4953,7 @@ async def delete_model_version_async( ) -> aiwork_space_20210204_models.DeleteModelVersionResponse: """ @summary 删除模型版本 - + @return: DeleteModelVersionResponse """ runtime = util_models.RuntimeOptions() @@ -4481,7 +4970,7 @@ def delete_model_version_labels_with_options( ) -> aiwork_space_20210204_models.DeleteModelVersionLabelsResponse: """ @summary 删除模型版本的标签 - + @param request: DeleteModelVersionLabelsRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -4523,7 +5012,7 @@ async def delete_model_version_labels_with_options_async( ) -> aiwork_space_20210204_models.DeleteModelVersionLabelsResponse: """ @summary 删除模型版本的标签 - + @param request: DeleteModelVersionLabelsRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -4563,7 +5052,7 @@ def delete_model_version_labels( ) -> aiwork_space_20210204_models.DeleteModelVersionLabelsResponse: """ @summary 删除模型版本的标签 - + @param request: DeleteModelVersionLabelsRequest @return: DeleteModelVersionLabelsResponse """ @@ -4579,13 +5068,14 @@ async def delete_model_version_labels_async( ) -> aiwork_space_20210204_models.DeleteModelVersionLabelsResponse: """ @summary 删除模型版本的标签 - + @param request: DeleteModelVersionLabelsRequest @return: DeleteModelVersionLabelsResponse """ runtime = util_models.RuntimeOptions() headers = {} - return await self.delete_model_version_labels_with_options_async(model_id, version_name, request, headers, runtime) + return await self.delete_model_version_labels_with_options_async(model_id, version_name, request, headers, + runtime) def delete_service_template_with_options( self, @@ -4595,7 +5085,7 @@ def delete_service_template_with_options( ) -> aiwork_space_20210204_models.DeleteServiceTemplateResponse: """ @summary 删除服务模版 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: DeleteServiceTemplateResponse @@ -4627,7 +5117,7 @@ async def delete_service_template_with_options_async( ) -> aiwork_space_20210204_models.DeleteServiceTemplateResponse: """ @summary 删除服务模版 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: DeleteServiceTemplateResponse @@ -4657,7 +5147,7 @@ def delete_service_template( ) -> aiwork_space_20210204_models.DeleteServiceTemplateResponse: """ @summary 删除服务模版 - + @return: DeleteServiceTemplateResponse """ runtime = util_models.RuntimeOptions() @@ -4670,7 +5160,7 @@ async def delete_service_template_async( ) -> aiwork_space_20210204_models.DeleteServiceTemplateResponse: """ @summary 删除服务模版 - + @return: DeleteServiceTemplateResponse """ runtime = util_models.RuntimeOptions() @@ -4686,7 +5176,7 @@ def delete_service_template_labels_with_options( ) -> aiwork_space_20210204_models.DeleteServiceTemplateLabelsResponse: """ @summary 删除服务模版的标签 - + @param request: DeleteServiceTemplateLabelsRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -4725,7 +5215,7 @@ async def delete_service_template_labels_with_options_async( ) -> aiwork_space_20210204_models.DeleteServiceTemplateLabelsResponse: """ @summary 删除服务模版的标签 - + @param request: DeleteServiceTemplateLabelsRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -4762,7 +5252,7 @@ def delete_service_template_labels( ) -> aiwork_space_20210204_models.DeleteServiceTemplateLabelsResponse: """ @summary 删除服务模版的标签 - + @param request: DeleteServiceTemplateLabelsRequest @return: DeleteServiceTemplateLabelsResponse """ @@ -4777,13 +5267,14 @@ async def delete_service_template_labels_async( ) -> aiwork_space_20210204_models.DeleteServiceTemplateLabelsResponse: """ @summary 删除服务模版的标签 - + @param request: DeleteServiceTemplateLabelsRequest @return: DeleteServiceTemplateLabelsResponse """ runtime = util_models.RuntimeOptions() headers = {} - return await self.delete_service_template_labels_with_options_async(service_template_id, request, headers, runtime) + return await self.delete_service_template_labels_with_options_async(service_template_id, request, headers, + runtime) def delete_user_config_with_options( self, @@ -4794,7 +5285,7 @@ def delete_user_config_with_options( ) -> aiwork_space_20210204_models.DeleteUserConfigResponse: """ @summary 删除用户配置 - + @param request: DeleteUserConfigRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -4833,7 +5324,7 @@ async def delete_user_config_with_options_async( ) -> aiwork_space_20210204_models.DeleteUserConfigResponse: """ @summary 删除用户配置 - + @param request: DeleteUserConfigRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -4870,7 +5361,7 @@ def delete_user_config( ) -> aiwork_space_20210204_models.DeleteUserConfigResponse: """ @summary 删除用户配置 - + @param request: DeleteUserConfigRequest @return: DeleteUserConfigResponse """ @@ -4885,7 +5376,7 @@ async def delete_user_config_async( ) -> aiwork_space_20210204_models.DeleteUserConfigResponse: """ @summary 删除用户配置 - + @param request: DeleteUserConfigRequest @return: DeleteUserConfigResponse """ @@ -4901,7 +5392,7 @@ def delete_workspace_with_options( ) -> aiwork_space_20210204_models.DeleteWorkspaceResponse: """ @summary 删除工作空间 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: DeleteWorkspaceResponse @@ -4933,7 +5424,7 @@ async def delete_workspace_with_options_async( ) -> aiwork_space_20210204_models.DeleteWorkspaceResponse: """ @summary 删除工作空间 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: DeleteWorkspaceResponse @@ -4963,7 +5454,7 @@ def delete_workspace( ) -> aiwork_space_20210204_models.DeleteWorkspaceResponse: """ @summary 删除工作空间 - + @return: DeleteWorkspaceResponse """ runtime = util_models.RuntimeOptions() @@ -4976,7 +5467,7 @@ async def delete_workspace_async( ) -> aiwork_space_20210204_models.DeleteWorkspaceResponse: """ @summary 删除工作空间 - + @return: DeleteWorkspaceResponse """ runtime = util_models.RuntimeOptions() @@ -4992,7 +5483,7 @@ def delete_workspace_resource_with_options( ) -> aiwork_space_20210204_models.DeleteWorkspaceResourceResponse: """ @summary 删除工作空间资源 - + @param request: DeleteWorkspaceResourceRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -5041,7 +5532,7 @@ async def delete_workspace_resource_with_options_async( ) -> aiwork_space_20210204_models.DeleteWorkspaceResourceResponse: """ @summary 删除工作空间资源 - + @param request: DeleteWorkspaceResourceRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -5088,7 +5579,7 @@ def delete_workspace_resource( ) -> aiwork_space_20210204_models.DeleteWorkspaceResourceResponse: """ @summary 删除工作空间资源 - + @param request: DeleteWorkspaceResourceRequest @return: DeleteWorkspaceResourceResponse """ @@ -5103,7 +5594,7 @@ async def delete_workspace_resource_async( ) -> aiwork_space_20210204_models.DeleteWorkspaceResourceResponse: """ @summary 删除工作空间资源 - + @param request: DeleteWorkspaceResourceRequest @return: DeleteWorkspaceResourceResponse """ @@ -5120,7 +5611,7 @@ def delete_workspace_roles_with_options( ) -> aiwork_space_20210204_models.DeleteWorkspaceRolesResponse: """ @summary 批量删除工作空间角色 - + @param request: DeleteWorkspaceRolesRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -5159,7 +5650,7 @@ async def delete_workspace_roles_with_options_async( ) -> aiwork_space_20210204_models.DeleteWorkspaceRolesResponse: """ @summary 批量删除工作空间角色 - + @param request: DeleteWorkspaceRolesRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -5196,7 +5687,7 @@ def delete_workspace_roles( ) -> aiwork_space_20210204_models.DeleteWorkspaceRolesResponse: """ @summary 批量删除工作空间角色 - + @param request: DeleteWorkspaceRolesRequest @return: DeleteWorkspaceRolesResponse """ @@ -5211,7 +5702,7 @@ async def delete_workspace_roles_async( ) -> aiwork_space_20210204_models.DeleteWorkspaceRolesResponse: """ @summary 批量删除工作空间角色 - + @param request: DeleteWorkspaceRolesRequest @return: DeleteWorkspaceRolesResponse """ @@ -5227,7 +5718,7 @@ def describe_pricing_module_with_options( ) -> aiwork_space_20210204_models.DescribePricingModuleResponse: """ @summary 查询阿里云商品对应模块信息 - + @param request: DescribePricingModuleRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -5269,7 +5760,7 @@ async def describe_pricing_module_with_options_async( ) -> aiwork_space_20210204_models.DescribePricingModuleResponse: """ @summary 查询阿里云商品对应模块信息 - + @param request: DescribePricingModuleRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -5309,7 +5800,7 @@ def describe_pricing_module( ) -> aiwork_space_20210204_models.DescribePricingModuleResponse: """ @summary 查询阿里云商品对应模块信息 - + @param request: DescribePricingModuleRequest @return: DescribePricingModuleResponse """ @@ -5323,7 +5814,7 @@ async def describe_pricing_module_async( ) -> aiwork_space_20210204_models.DescribePricingModuleResponse: """ @summary 查询阿里云商品对应模块信息 - + @param request: DescribePricingModuleRequest @return: DescribePricingModuleResponse """ @@ -5339,7 +5830,7 @@ def get_code_source_with_options( ) -> aiwork_space_20210204_models.GetCodeSourceResponse: """ @summary 获取一个代码源配置 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: GetCodeSourceResponse @@ -5371,7 +5862,7 @@ async def get_code_source_with_options_async( ) -> aiwork_space_20210204_models.GetCodeSourceResponse: """ @summary 获取一个代码源配置 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: GetCodeSourceResponse @@ -5401,7 +5892,7 @@ def get_code_source( ) -> aiwork_space_20210204_models.GetCodeSourceResponse: """ @summary 获取一个代码源配置 - + @return: GetCodeSourceResponse """ runtime = util_models.RuntimeOptions() @@ -5414,7 +5905,7 @@ async def get_code_source_async( ) -> aiwork_space_20210204_models.GetCodeSourceResponse: """ @summary 获取一个代码源配置 - + @return: GetCodeSourceResponse """ runtime = util_models.RuntimeOptions() @@ -5429,7 +5920,7 @@ def get_code_sources_statistics_with_options( ) -> aiwork_space_20210204_models.GetCodeSourcesStatisticsResponse: """ @summary 获取当前工作空间下的CodeSources的统计信息 - + @param request: GetCodeSourcesStatisticsRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -5467,7 +5958,7 @@ async def get_code_sources_statistics_with_options_async( ) -> aiwork_space_20210204_models.GetCodeSourcesStatisticsResponse: """ @summary 获取当前工作空间下的CodeSources的统计信息 - + @param request: GetCodeSourcesStatisticsRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -5503,7 +5994,7 @@ def get_code_sources_statistics( ) -> aiwork_space_20210204_models.GetCodeSourcesStatisticsResponse: """ @summary 获取当前工作空间下的CodeSources的统计信息 - + @param request: GetCodeSourcesStatisticsRequest @return: GetCodeSourcesStatisticsResponse """ @@ -5517,7 +6008,7 @@ async def get_code_sources_statistics_async( ) -> aiwork_space_20210204_models.GetCodeSourcesStatisticsResponse: """ @summary 获取当前工作空间下的CodeSources的统计信息 - + @param request: GetCodeSourcesStatisticsRequest @return: GetCodeSourcesStatisticsResponse """ @@ -5533,7 +6024,7 @@ def get_collection_with_options( ) -> aiwork_space_20210204_models.GetCollectionResponse: """ @summary 获取Collection - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: GetCollectionResponse @@ -5565,7 +6056,7 @@ async def get_collection_with_options_async( ) -> aiwork_space_20210204_models.GetCollectionResponse: """ @summary 获取Collection - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: GetCollectionResponse @@ -5595,7 +6086,7 @@ def get_collection( ) -> aiwork_space_20210204_models.GetCollectionResponse: """ @summary 获取Collection - + @return: GetCollectionResponse """ runtime = util_models.RuntimeOptions() @@ -5608,7 +6099,7 @@ async def get_collection_async( ) -> aiwork_space_20210204_models.GetCollectionResponse: """ @summary 获取Collection - + @return: GetCollectionResponse """ runtime = util_models.RuntimeOptions() @@ -5623,7 +6114,7 @@ def get_dataset_with_options( ) -> aiwork_space_20210204_models.GetDatasetResponse: """ @summary 获取数据集 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: GetDatasetResponse @@ -5655,7 +6146,7 @@ async def get_dataset_with_options_async( ) -> aiwork_space_20210204_models.GetDatasetResponse: """ @summary 获取数据集 - + @param headers: map @param runtime: runtime options for this request RuntimeOptions @return: GetDatasetResponse @@ -5685,7 +6176,7 @@ def get_dataset( ) -> aiwork_space_20210204_models.GetDatasetResponse: """ @summary 获取数据集 - + @return: GetDatasetResponse """ runtime = util_models.RuntimeOptions() @@ -5698,7 +6189,7 @@ async def get_dataset_async( ) -> aiwork_space_20210204_models.GetDatasetResponse: """ @summary 获取数据集 - + @return: GetDatasetResponse """ runtime = util_models.RuntimeOptions() @@ -5713,7 +6204,7 @@ def get_datasets_statistics_with_options( ) -> aiwork_space_20210204_models.GetDatasetsStatisticsResponse: """ @summary 获取数据集总数 - + @param request: GetDatasetsStatisticsRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -5751,7 +6242,7 @@ async def get_datasets_statistics_with_options_async( ) -> aiwork_space_20210204_models.GetDatasetsStatisticsResponse: """ @summary 获取数据集总数 - + @param request: GetDatasetsStatisticsRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions @@ -5787,7 +6278,7 @@ def get_datasets_statistics( ) -> aiwork_space_20210204_models.GetDatasetsStatisticsResponse: """ @summary 获取数据集总数 - + @param request: GetDatasetsStatisticsRequest @return: GetDatasetsStatisticsResponse """ @@ -5801,7 +6292,7 @@ async def get_datasets_statistics_async( ) -> aiwork_space_20210204_models.GetDatasetsStatisticsResponse: """ @summary 获取数据集总数 - + @param request: GetDatasetsStatisticsRequest @return: GetDatasetsStatisticsResponse """ @@ -5809,6 +6300,100 @@ async def get_datasets_statistics_async( headers = {} return await self.get_datasets_statistics_with_options_async(request, headers, runtime) + def get_dataset_version_with_options( + self, + dataset_id: str, + version_name: str, + headers: Dict[str, str], + runtime: util_models.RuntimeOptions, + ) -> aiwork_space_20210204_models.GetDatasetVersionResponse: + """ + @summary 获取指定版本的数据集信息 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetDatasetVersionResponse + """ + req = open_api_models.OpenApiRequest( + headers=headers + ) + params = open_api_models.Params( + action='GetDatasetVersion', + version='2021-02-04', + protocol='HTTPS', + pathname=f'/api/v1/datasets/{OpenApiUtilClient.get_encode_param(dataset_id)}/versions/{OpenApiUtilClient.get_encode_param(version_name)}', + method='GET', + auth_type='AK', + style='ROA', + req_body_type='json', + body_type='json' + ) + return TeaCore.from_map( + aiwork_space_20210204_models.GetDatasetVersionResponse(), + self.call_api(params, req, runtime) + ) + + async def get_dataset_version_with_options_async( + self, + dataset_id: str, + version_name: str, + headers: Dict[str, str], + runtime: util_models.RuntimeOptions, + ) -> aiwork_space_20210204_models.GetDatasetVersionResponse: + """ + @summary 获取指定版本的数据集信息 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetDatasetVersionResponse + """ + req = open_api_models.OpenApiRequest( + headers=headers + ) + params = open_api_models.Params( + action='GetDatasetVersion', + version='2021-02-04', + protocol='HTTPS', + pathname=f'/api/v1/datasets/{OpenApiUtilClient.get_encode_param(dataset_id)}/versions/{OpenApiUtilClient.get_encode_param(version_name)}', + method='GET', + auth_type='AK', + style='ROA', + req_body_type='json', + body_type='json' + ) + return TeaCore.from_map( + aiwork_space_20210204_models.GetDatasetVersionResponse(), + await self.call_api_async(params, req, runtime) + ) + + def get_dataset_version( + self, + dataset_id: str, + version_name: str, + ) -> aiwork_space_20210204_models.GetDatasetVersionResponse: + """ + @summary 获取指定版本的数据集信息 + + @return: GetDatasetVersionResponse + """ + runtime = util_models.RuntimeOptions() + headers = {} + return self.get_dataset_version_with_options(dataset_id, version_name, headers, runtime) + + async def get_dataset_version_async( + self, + dataset_id: str, + version_name: str, + ) -> aiwork_space_20210204_models.GetDatasetVersionResponse: + """ + @summary 获取指定版本的数据集信息 + + @return: GetDatasetVersionResponse + """ + runtime = util_models.RuntimeOptions() + headers = {} + return await self.get_dataset_version_with_options_async(dataset_id, version_name, headers, runtime) + def get_default_workspace_with_options( self, request: aiwork_space_20210204_models.GetDefaultWorkspaceRequest, @@ -5816,13 +6401,13 @@ def get_default_workspace_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetDefaultWorkspaceResponse: """ - @summary 获取默认工作空间 - - @param request: GetDefaultWorkspaceRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetDefaultWorkspaceResponse - """ + @summary 获取默认工作空间 + + @param request: GetDefaultWorkspaceRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetDefaultWorkspaceResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.verbose): @@ -5854,13 +6439,13 @@ async def get_default_workspace_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetDefaultWorkspaceResponse: """ - @summary 获取默认工作空间 - - @param request: GetDefaultWorkspaceRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetDefaultWorkspaceResponse - """ + @summary 获取默认工作空间 + + @param request: GetDefaultWorkspaceRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetDefaultWorkspaceResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.verbose): @@ -5890,11 +6475,11 @@ def get_default_workspace( request: aiwork_space_20210204_models.GetDefaultWorkspaceRequest, ) -> aiwork_space_20210204_models.GetDefaultWorkspaceResponse: """ - @summary 获取默认工作空间 - - @param request: GetDefaultWorkspaceRequest - @return: GetDefaultWorkspaceResponse - """ + @summary 获取默认工作空间 + + @param request: GetDefaultWorkspaceRequest + @return: GetDefaultWorkspaceResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.get_default_workspace_with_options(request, headers, runtime) @@ -5904,11 +6489,11 @@ async def get_default_workspace_async( request: aiwork_space_20210204_models.GetDefaultWorkspaceRequest, ) -> aiwork_space_20210204_models.GetDefaultWorkspaceResponse: """ - @summary 获取默认工作空间 - - @param request: GetDefaultWorkspaceRequest - @return: GetDefaultWorkspaceResponse - """ + @summary 获取默认工作空间 + + @param request: GetDefaultWorkspaceRequest + @return: GetDefaultWorkspaceResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.get_default_workspace_with_options_async(request, headers, runtime) @@ -5920,12 +6505,12 @@ def get_experiment_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetExperimentResponse: """ - @summary 获取实验 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetExperimentResponse - """ + @summary 获取实验 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetExperimentResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -5952,12 +6537,12 @@ async def get_experiment_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetExperimentResponse: """ - @summary 获取实验 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetExperimentResponse - """ + @summary 获取实验 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetExperimentResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -5982,10 +6567,10 @@ def get_experiment( experiment_id: str, ) -> aiwork_space_20210204_models.GetExperimentResponse: """ - @summary 获取实验 - - @return: GetExperimentResponse - """ + @summary 获取实验 + + @return: GetExperimentResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.get_experiment_with_options(experiment_id, headers, runtime) @@ -5995,10 +6580,10 @@ async def get_experiment_async( experiment_id: str, ) -> aiwork_space_20210204_models.GetExperimentResponse: """ - @summary 获取实验 - - @return: GetExperimentResponse - """ + @summary 获取实验 + + @return: GetExperimentResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.get_experiment_with_options_async(experiment_id, headers, runtime) @@ -6011,13 +6596,13 @@ def get_image_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetImageResponse: """ - @summary 获取镜像 - - @param request: GetImageRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetImageResponse - """ + @summary 获取镜像 + + @param request: GetImageRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetImageResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.verbose): @@ -6050,13 +6635,13 @@ async def get_image_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetImageResponse: """ - @summary 获取镜像 - - @param request: GetImageRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetImageResponse - """ + @summary 获取镜像 + + @param request: GetImageRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetImageResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.verbose): @@ -6087,11 +6672,11 @@ def get_image( request: aiwork_space_20210204_models.GetImageRequest, ) -> aiwork_space_20210204_models.GetImageResponse: """ - @summary 获取镜像 - - @param request: GetImageRequest - @return: GetImageResponse - """ + @summary 获取镜像 + + @param request: GetImageRequest + @return: GetImageResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.get_image_with_options(image_id, request, headers, runtime) @@ -6102,11 +6687,11 @@ async def get_image_async( request: aiwork_space_20210204_models.GetImageRequest, ) -> aiwork_space_20210204_models.GetImageResponse: """ - @summary 获取镜像 - - @param request: GetImageRequest - @return: GetImageResponse - """ + @summary 获取镜像 + + @param request: GetImageRequest + @return: GetImageResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.get_image_with_options_async(image_id, request, headers, runtime) @@ -6118,13 +6703,13 @@ def get_images_statistics_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetImagesStatisticsResponse: """ - @summary 获取镜像统计 - - @param request: GetImagesStatisticsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetImagesStatisticsResponse - """ + @summary 获取镜像统计 + + @param request: GetImagesStatisticsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetImagesStatisticsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.workspace_id): @@ -6156,13 +6741,13 @@ async def get_images_statistics_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetImagesStatisticsResponse: """ - @summary 获取镜像统计 - - @param request: GetImagesStatisticsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetImagesStatisticsResponse - """ + @summary 获取镜像统计 + + @param request: GetImagesStatisticsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetImagesStatisticsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.workspace_id): @@ -6192,11 +6777,11 @@ def get_images_statistics( request: aiwork_space_20210204_models.GetImagesStatisticsRequest, ) -> aiwork_space_20210204_models.GetImagesStatisticsResponse: """ - @summary 获取镜像统计 - - @param request: GetImagesStatisticsRequest - @return: GetImagesStatisticsResponse - """ + @summary 获取镜像统计 + + @param request: GetImagesStatisticsRequest + @return: GetImagesStatisticsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.get_images_statistics_with_options(request, headers, runtime) @@ -6206,11 +6791,11 @@ async def get_images_statistics_async( request: aiwork_space_20210204_models.GetImagesStatisticsRequest, ) -> aiwork_space_20210204_models.GetImagesStatisticsResponse: """ - @summary 获取镜像统计 - - @param request: GetImagesStatisticsRequest - @return: GetImagesStatisticsResponse - """ + @summary 获取镜像统计 + + @param request: GetImagesStatisticsRequest + @return: GetImagesStatisticsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.get_images_statistics_with_options_async(request, headers, runtime) @@ -6222,12 +6807,12 @@ def get_instance_job_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetInstanceJobResponse: """ - @summary 获取任务 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetInstanceJobResponse - """ + @summary 获取任务 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetInstanceJobResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -6254,12 +6839,12 @@ async def get_instance_job_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetInstanceJobResponse: """ - @summary 获取任务 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetInstanceJobResponse - """ + @summary 获取任务 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetInstanceJobResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -6284,10 +6869,10 @@ def get_instance_job( instance_job_id: str, ) -> aiwork_space_20210204_models.GetInstanceJobResponse: """ - @summary 获取任务 - - @return: GetInstanceJobResponse - """ + @summary 获取任务 + + @return: GetInstanceJobResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.get_instance_job_with_options(instance_job_id, headers, runtime) @@ -6297,10 +6882,10 @@ async def get_instance_job_async( instance_job_id: str, ) -> aiwork_space_20210204_models.GetInstanceJobResponse: """ - @summary 获取任务 - - @return: GetInstanceJobResponse - """ + @summary 获取任务 + + @return: GetInstanceJobResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.get_instance_job_with_options_async(instance_job_id, headers, runtime) @@ -6312,13 +6897,13 @@ def get_instance_statistics_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetInstanceStatisticsResponse: """ - @summary 获得工作空间下实例统计数据 - - @param request: GetInstanceStatisticsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetInstanceStatisticsResponse - """ + @summary 获得工作空间下实例统计数据 + + @param request: GetInstanceStatisticsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetInstanceStatisticsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.option): @@ -6354,13 +6939,13 @@ async def get_instance_statistics_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetInstanceStatisticsResponse: """ - @summary 获得工作空间下实例统计数据 - - @param request: GetInstanceStatisticsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetInstanceStatisticsResponse - """ + @summary 获得工作空间下实例统计数据 + + @param request: GetInstanceStatisticsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetInstanceStatisticsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.option): @@ -6394,11 +6979,11 @@ def get_instance_statistics( request: aiwork_space_20210204_models.GetInstanceStatisticsRequest, ) -> aiwork_space_20210204_models.GetInstanceStatisticsResponse: """ - @summary 获得工作空间下实例统计数据 - - @param request: GetInstanceStatisticsRequest - @return: GetInstanceStatisticsResponse - """ + @summary 获得工作空间下实例统计数据 + + @param request: GetInstanceStatisticsRequest + @return: GetInstanceStatisticsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.get_instance_statistics_with_options(request, headers, runtime) @@ -6408,11 +6993,11 @@ async def get_instance_statistics_async( request: aiwork_space_20210204_models.GetInstanceStatisticsRequest, ) -> aiwork_space_20210204_models.GetInstanceStatisticsResponse: """ - @summary 获得工作空间下实例统计数据 - - @param request: GetInstanceStatisticsRequest - @return: GetInstanceStatisticsResponse - """ + @summary 获得工作空间下实例统计数据 + + @param request: GetInstanceStatisticsRequest + @return: GetInstanceStatisticsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.get_instance_statistics_with_options_async(request, headers, runtime) @@ -6425,13 +7010,13 @@ def get_member_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetMemberResponse: """ - @summary 获取成员 - - @param request: GetMemberRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetMemberResponse - """ + @summary 获取成员 + + @param request: GetMemberRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetMemberResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.member_id): @@ -6466,13 +7051,13 @@ async def get_member_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetMemberResponse: """ - @summary 获取成员 - - @param request: GetMemberRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetMemberResponse - """ + @summary 获取成员 + + @param request: GetMemberRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetMemberResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.member_id): @@ -6505,11 +7090,11 @@ def get_member( request: aiwork_space_20210204_models.GetMemberRequest, ) -> aiwork_space_20210204_models.GetMemberResponse: """ - @summary 获取成员 - - @param request: GetMemberRequest - @return: GetMemberResponse - """ + @summary 获取成员 + + @param request: GetMemberRequest + @return: GetMemberResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.get_member_with_options(workspace_id, request, headers, runtime) @@ -6520,11 +7105,11 @@ async def get_member_async( request: aiwork_space_20210204_models.GetMemberRequest, ) -> aiwork_space_20210204_models.GetMemberResponse: """ - @summary 获取成员 - - @param request: GetMemberRequest - @return: GetMemberResponse - """ + @summary 获取成员 + + @param request: GetMemberRequest + @return: GetMemberResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.get_member_with_options_async(workspace_id, request, headers, runtime) @@ -6536,12 +7121,12 @@ def get_model_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetModelResponse: """ - @summary 获取模型 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetModelResponse - """ + @summary 获取模型 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetModelResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -6568,12 +7153,12 @@ async def get_model_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetModelResponse: """ - @summary 获取模型 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetModelResponse - """ + @summary 获取模型 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetModelResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -6598,10 +7183,10 @@ def get_model( model_id: str, ) -> aiwork_space_20210204_models.GetModelResponse: """ - @summary 获取模型 - - @return: GetModelResponse - """ + @summary 获取模型 + + @return: GetModelResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.get_model_with_options(model_id, headers, runtime) @@ -6611,10 +7196,10 @@ async def get_model_async( model_id: str, ) -> aiwork_space_20210204_models.GetModelResponse: """ - @summary 获取模型 - - @return: GetModelResponse - """ + @summary 获取模型 + + @return: GetModelResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.get_model_with_options_async(model_id, headers, runtime) @@ -6627,12 +7212,12 @@ def get_model_version_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetModelVersionResponse: """ - @summary 获取模型版本 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetModelVersionResponse - """ + @summary 获取模型版本 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetModelVersionResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -6660,12 +7245,12 @@ async def get_model_version_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetModelVersionResponse: """ - @summary 获取模型版本 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetModelVersionResponse - """ + @summary 获取模型版本 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetModelVersionResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -6691,10 +7276,10 @@ def get_model_version( version_name: str, ) -> aiwork_space_20210204_models.GetModelVersionResponse: """ - @summary 获取模型版本 - - @return: GetModelVersionResponse - """ + @summary 获取模型版本 + + @return: GetModelVersionResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.get_model_version_with_options(model_id, version_name, headers, runtime) @@ -6705,10 +7290,10 @@ async def get_model_version_async( version_name: str, ) -> aiwork_space_20210204_models.GetModelVersionResponse: """ - @summary 获取模型版本 - - @return: GetModelVersionResponse - """ + @summary 获取模型版本 + + @return: GetModelVersionResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.get_model_version_with_options_async(model_id, version_name, headers, runtime) @@ -6720,13 +7305,13 @@ def get_pay_as_you_go_price_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetPayAsYouGoPriceResponse: """ - @summary 查询阿里云商品后付费价格 - - @param request: GetPayAsYouGoPriceRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetPayAsYouGoPriceResponse - """ + @summary 查询阿里云商品后付费价格 + + @param request: GetPayAsYouGoPriceRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetPayAsYouGoPriceResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.module_list): @@ -6764,13 +7349,13 @@ async def get_pay_as_you_go_price_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetPayAsYouGoPriceResponse: """ - @summary 查询阿里云商品后付费价格 - - @param request: GetPayAsYouGoPriceRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetPayAsYouGoPriceResponse - """ + @summary 查询阿里云商品后付费价格 + + @param request: GetPayAsYouGoPriceRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetPayAsYouGoPriceResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.module_list): @@ -6806,11 +7391,11 @@ def get_pay_as_you_go_price( request: aiwork_space_20210204_models.GetPayAsYouGoPriceRequest, ) -> aiwork_space_20210204_models.GetPayAsYouGoPriceResponse: """ - @summary 查询阿里云商品后付费价格 - - @param request: GetPayAsYouGoPriceRequest - @return: GetPayAsYouGoPriceResponse - """ + @summary 查询阿里云商品后付费价格 + + @param request: GetPayAsYouGoPriceRequest + @return: GetPayAsYouGoPriceResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.get_pay_as_you_go_price_with_options(request, headers, runtime) @@ -6820,11 +7405,11 @@ async def get_pay_as_you_go_price_async( request: aiwork_space_20210204_models.GetPayAsYouGoPriceRequest, ) -> aiwork_space_20210204_models.GetPayAsYouGoPriceResponse: """ - @summary 查询阿里云商品后付费价格 - - @param request: GetPayAsYouGoPriceRequest - @return: GetPayAsYouGoPriceResponse - """ + @summary 查询阿里云商品后付费价格 + + @param request: GetPayAsYouGoPriceRequest + @return: GetPayAsYouGoPriceResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.get_pay_as_you_go_price_with_options_async(request, headers, runtime) @@ -6838,13 +7423,13 @@ def get_permission_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetPermissionResponse: """ - @summary 获取权限,若无权限则返回错误 - - @param request: GetPermissionRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetPermissionResponse - """ + @summary 获取权限,若无权限则返回错误 + + @param request: GetPermissionRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetPermissionResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.accessibility): @@ -6884,13 +7469,13 @@ async def get_permission_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetPermissionResponse: """ - @summary 获取权限,若无权限则返回错误 - - @param request: GetPermissionRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetPermissionResponse - """ + @summary 获取权限,若无权限则返回错误 + + @param request: GetPermissionRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetPermissionResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.accessibility): @@ -6928,11 +7513,11 @@ def get_permission( request: aiwork_space_20210204_models.GetPermissionRequest, ) -> aiwork_space_20210204_models.GetPermissionResponse: """ - @summary 获取权限,若无权限则返回错误 - - @param request: GetPermissionRequest - @return: GetPermissionResponse - """ + @summary 获取权限,若无权限则返回错误 + + @param request: GetPermissionRequest + @return: GetPermissionResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.get_permission_with_options(workspace_id, permission_code, request, headers, runtime) @@ -6944,11 +7529,11 @@ async def get_permission_async( request: aiwork_space_20210204_models.GetPermissionRequest, ) -> aiwork_space_20210204_models.GetPermissionResponse: """ - @summary 获取权限,若无权限则返回错误 - - @param request: GetPermissionRequest - @return: GetPermissionResponse - """ + @summary 获取权限,若无权限则返回错误 + + @param request: GetPermissionRequest + @return: GetPermissionResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.get_permission_with_options_async(workspace_id, permission_code, request, headers, runtime) @@ -6962,13 +7547,13 @@ def get_resource_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetResourceResponse: """ - @summary 获取工作空间资源 - - @param request: GetResourceRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetResourceResponse - """ + @summary 获取工作空间资源 + + @param request: GetResourceRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetResourceResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.resource_type): @@ -7002,13 +7587,13 @@ async def get_resource_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetResourceResponse: """ - @summary 获取工作空间资源 - - @param request: GetResourceRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetResourceResponse - """ + @summary 获取工作空间资源 + + @param request: GetResourceRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetResourceResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.resource_type): @@ -7040,11 +7625,11 @@ def get_resource( request: aiwork_space_20210204_models.GetResourceRequest, ) -> aiwork_space_20210204_models.GetResourceResponse: """ - @summary 获取工作空间资源 - - @param request: GetResourceRequest - @return: GetResourceResponse - """ + @summary 获取工作空间资源 + + @param request: GetResourceRequest + @return: GetResourceResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.get_resource_with_options(resource_id, workspace_id, request, headers, runtime) @@ -7056,11 +7641,11 @@ async def get_resource_async( request: aiwork_space_20210204_models.GetResourceRequest, ) -> aiwork_space_20210204_models.GetResourceResponse: """ - @summary 获取工作空间资源 - - @param request: GetResourceRequest - @return: GetResourceResponse - """ + @summary 获取工作空间资源 + + @param request: GetResourceRequest + @return: GetResourceResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.get_resource_with_options_async(resource_id, workspace_id, request, headers, runtime) @@ -7072,13 +7657,13 @@ def get_role_statistics_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetRoleStatisticsResponse: """ - @summary 获得角色统计 - - @param request: GetRoleStatisticsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetRoleStatisticsResponse - """ + @summary 获得角色统计 + + @param request: GetRoleStatisticsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetRoleStatisticsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.workspace_id): @@ -7110,13 +7695,13 @@ async def get_role_statistics_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetRoleStatisticsResponse: """ - @summary 获得角色统计 - - @param request: GetRoleStatisticsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetRoleStatisticsResponse - """ + @summary 获得角色统计 + + @param request: GetRoleStatisticsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetRoleStatisticsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.workspace_id): @@ -7146,11 +7731,11 @@ def get_role_statistics( request: aiwork_space_20210204_models.GetRoleStatisticsRequest, ) -> aiwork_space_20210204_models.GetRoleStatisticsResponse: """ - @summary 获得角色统计 - - @param request: GetRoleStatisticsRequest - @return: GetRoleStatisticsResponse - """ + @summary 获得角色统计 + + @param request: GetRoleStatisticsRequest + @return: GetRoleStatisticsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.get_role_statistics_with_options(request, headers, runtime) @@ -7160,11 +7745,11 @@ async def get_role_statistics_async( request: aiwork_space_20210204_models.GetRoleStatisticsRequest, ) -> aiwork_space_20210204_models.GetRoleStatisticsResponse: """ - @summary 获得角色统计 - - @param request: GetRoleStatisticsRequest - @return: GetRoleStatisticsResponse - """ + @summary 获得角色统计 + + @param request: GetRoleStatisticsRequest + @return: GetRoleStatisticsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.get_role_statistics_with_options_async(request, headers, runtime) @@ -7176,12 +7761,12 @@ def get_service_template_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetServiceTemplateResponse: """ - @summary 获取服务模版 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetServiceTemplateResponse - """ + @summary 获取服务模版 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetServiceTemplateResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -7208,12 +7793,12 @@ async def get_service_template_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetServiceTemplateResponse: """ - @summary 获取服务模版 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetServiceTemplateResponse - """ + @summary 获取服务模版 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetServiceTemplateResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -7238,10 +7823,10 @@ def get_service_template( service_template_id: str, ) -> aiwork_space_20210204_models.GetServiceTemplateResponse: """ - @summary 获取服务模版 - - @return: GetServiceTemplateResponse - """ + @summary 获取服务模版 + + @return: GetServiceTemplateResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.get_service_template_with_options(service_template_id, headers, runtime) @@ -7251,10 +7836,10 @@ async def get_service_template_async( service_template_id: str, ) -> aiwork_space_20210204_models.GetServiceTemplateResponse: """ - @summary 获取服务模版 - - @return: GetServiceTemplateResponse - """ + @summary 获取服务模版 + + @return: GetServiceTemplateResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.get_service_template_with_options_async(service_template_id, headers, runtime) @@ -7266,12 +7851,12 @@ def get_trial_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetTrialResponse: """ - @summary Get trial - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetTrialResponse - """ + @summary Get trial + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetTrialResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -7298,12 +7883,12 @@ async def get_trial_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetTrialResponse: """ - @summary Get trial - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetTrialResponse - """ + @summary Get trial + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetTrialResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -7328,10 +7913,10 @@ def get_trial( trial_id: str, ) -> aiwork_space_20210204_models.GetTrialResponse: """ - @summary Get trial - - @return: GetTrialResponse - """ + @summary Get trial + + @return: GetTrialResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.get_trial_with_options(trial_id, headers, runtime) @@ -7341,10 +7926,10 @@ async def get_trial_async( trial_id: str, ) -> aiwork_space_20210204_models.GetTrialResponse: """ - @summary Get trial - - @return: GetTrialResponse - """ + @summary Get trial + + @return: GetTrialResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.get_trial_with_options_async(trial_id, headers, runtime) @@ -7357,13 +7942,13 @@ def get_workspace_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetWorkspaceResponse: """ - @summary 获取工作空间 - - @param request: GetWorkspaceRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetWorkspaceResponse - """ + @summary 获取工作空间 + + @param request: GetWorkspaceRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetWorkspaceResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.verbose): @@ -7396,13 +7981,13 @@ async def get_workspace_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetWorkspaceResponse: """ - @summary 获取工作空间 - - @param request: GetWorkspaceRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetWorkspaceResponse - """ + @summary 获取工作空间 + + @param request: GetWorkspaceRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetWorkspaceResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.verbose): @@ -7433,11 +8018,11 @@ def get_workspace( request: aiwork_space_20210204_models.GetWorkspaceRequest, ) -> aiwork_space_20210204_models.GetWorkspaceResponse: """ - @summary 获取工作空间 - - @param request: GetWorkspaceRequest - @return: GetWorkspaceResponse - """ + @summary 获取工作空间 + + @param request: GetWorkspaceRequest + @return: GetWorkspaceResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.get_workspace_with_options(workspace_id, request, headers, runtime) @@ -7448,11 +8033,11 @@ async def get_workspace_async( request: aiwork_space_20210204_models.GetWorkspaceRequest, ) -> aiwork_space_20210204_models.GetWorkspaceResponse: """ - @summary 获取工作空间 - - @param request: GetWorkspaceRequest - @return: GetWorkspaceResponse - """ + @summary 获取工作空间 + + @param request: GetWorkspaceRequest + @return: GetWorkspaceResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.get_workspace_with_options_async(workspace_id, request, headers, runtime) @@ -7465,12 +8050,12 @@ def get_workspace_role_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetWorkspaceRoleResponse: """ - @summary 获取工作空间角色 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetWorkspaceRoleResponse - """ + @summary 获取工作空间角色 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetWorkspaceRoleResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -7498,12 +8083,12 @@ async def get_workspace_role_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.GetWorkspaceRoleResponse: """ - @summary 获取工作空间角色 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: GetWorkspaceRoleResponse - """ + @summary 获取工作空间角色 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: GetWorkspaceRoleResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -7529,10 +8114,10 @@ def get_workspace_role( role_id: str, ) -> aiwork_space_20210204_models.GetWorkspaceRoleResponse: """ - @summary 获取工作空间角色 - - @return: GetWorkspaceRoleResponse - """ + @summary 获取工作空间角色 + + @return: GetWorkspaceRoleResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.get_workspace_role_with_options(workspace_id, role_id, headers, runtime) @@ -7543,10 +8128,10 @@ async def get_workspace_role_async( role_id: str, ) -> aiwork_space_20210204_models.GetWorkspaceRoleResponse: """ - @summary 获取工作空间角色 - - @return: GetWorkspaceRoleResponse - """ + @summary 获取工作空间角色 + + @return: GetWorkspaceRoleResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.get_workspace_role_with_options_async(workspace_id, role_id, headers, runtime) @@ -7558,13 +8143,13 @@ def list_code_sources_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListCodeSourcesResponse: """ - @summary 获取代码源配置列表 - - @param request: ListCodeSourcesRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListCodeSourcesResponse - """ + @summary 获取代码源配置列表 + + @param request: ListCodeSourcesRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListCodeSourcesResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.display_name): @@ -7606,13 +8191,13 @@ async def list_code_sources_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListCodeSourcesResponse: """ - @summary 获取代码源配置列表 - - @param request: ListCodeSourcesRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListCodeSourcesResponse - """ + @summary 获取代码源配置列表 + + @param request: ListCodeSourcesRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListCodeSourcesResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.display_name): @@ -7652,11 +8237,11 @@ def list_code_sources( request: aiwork_space_20210204_models.ListCodeSourcesRequest, ) -> aiwork_space_20210204_models.ListCodeSourcesResponse: """ - @summary 获取代码源配置列表 - - @param request: ListCodeSourcesRequest - @return: ListCodeSourcesResponse - """ + @summary 获取代码源配置列表 + + @param request: ListCodeSourcesRequest + @return: ListCodeSourcesResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_code_sources_with_options(request, headers, runtime) @@ -7666,11 +8251,11 @@ async def list_code_sources_async( request: aiwork_space_20210204_models.ListCodeSourcesRequest, ) -> aiwork_space_20210204_models.ListCodeSourcesResponse: """ - @summary 获取代码源配置列表 - - @param request: ListCodeSourcesRequest - @return: ListCodeSourcesResponse - """ + @summary 获取代码源配置列表 + + @param request: ListCodeSourcesRequest + @return: ListCodeSourcesResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_code_sources_with_options_async(request, headers, runtime) @@ -7682,13 +8267,13 @@ def list_collections_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListCollectionsResponse: """ - @summary 获取Collection列表 - - @param request: ListCollectionsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListCollectionsResponse - """ + @summary 获取Collection列表 + + @param request: ListCollectionsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListCollectionsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.page_number): @@ -7722,13 +8307,13 @@ async def list_collections_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListCollectionsResponse: """ - @summary 获取Collection列表 - - @param request: ListCollectionsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListCollectionsResponse - """ + @summary 获取Collection列表 + + @param request: ListCollectionsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListCollectionsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.page_number): @@ -7760,11 +8345,11 @@ def list_collections( request: aiwork_space_20210204_models.ListCollectionsRequest, ) -> aiwork_space_20210204_models.ListCollectionsResponse: """ - @summary 获取Collection列表 - - @param request: ListCollectionsRequest - @return: ListCollectionsResponse - """ + @summary 获取Collection列表 + + @param request: ListCollectionsRequest + @return: ListCollectionsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_collections_with_options(request, headers, runtime) @@ -7774,11 +8359,11 @@ async def list_collections_async( request: aiwork_space_20210204_models.ListCollectionsRequest, ) -> aiwork_space_20210204_models.ListCollectionsResponse: """ - @summary 获取Collection列表 - - @param request: ListCollectionsRequest - @return: ListCollectionsResponse - """ + @summary 获取Collection列表 + + @param request: ListCollectionsRequest + @return: ListCollectionsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_collections_with_options_async(request, headers, runtime) @@ -7791,13 +8376,13 @@ def list_configs_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListConfigsResponse: """ - @summary 获取配置 - - @param request: ListConfigsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListConfigsResponse - """ + @summary 获取配置 + + @param request: ListConfigsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListConfigsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.config_keys): @@ -7834,13 +8419,13 @@ async def list_configs_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListConfigsResponse: """ - @summary 获取配置 - - @param request: ListConfigsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListConfigsResponse - """ + @summary 获取配置 + + @param request: ListConfigsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListConfigsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.config_keys): @@ -7875,11 +8460,11 @@ def list_configs( request: aiwork_space_20210204_models.ListConfigsRequest, ) -> aiwork_space_20210204_models.ListConfigsResponse: """ - @summary 获取配置 - - @param request: ListConfigsRequest - @return: ListConfigsResponse - """ + @summary 获取配置 + + @param request: ListConfigsRequest + @return: ListConfigsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_configs_with_options(workspace_id, request, headers, runtime) @@ -7890,15 +8475,159 @@ async def list_configs_async( request: aiwork_space_20210204_models.ListConfigsRequest, ) -> aiwork_space_20210204_models.ListConfigsResponse: """ - @summary 获取配置 - - @param request: ListConfigsRequest - @return: ListConfigsResponse - """ + @summary 获取配置 + + @param request: ListConfigsRequest + @return: ListConfigsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_configs_with_options_async(workspace_id, request, headers, runtime) + def list_dataset_versions_with_options( + self, + dataset_id: str, + request: aiwork_space_20210204_models.ListDatasetVersionsRequest, + headers: Dict[str, str], + runtime: util_models.RuntimeOptions, + ) -> aiwork_space_20210204_models.ListDatasetVersionsResponse: + """ + @summary 获取数据集版本列表 + + @param request: ListDatasetVersionsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListDatasetVersionsResponse + """ + UtilClient.validate_model(request) + query = {} + if not UtilClient.is_unset(request.data_sources_types): + query['DataSourcesTypes'] = request.data_sources_types + if not UtilClient.is_unset(request.label_keys): + query['LabelKeys'] = request.label_keys + if not UtilClient.is_unset(request.lable_values): + query['LableValues'] = request.lable_values + if not UtilClient.is_unset(request.order): + query['Order'] = request.order + if not UtilClient.is_unset(request.page_number): + query['PageNumber'] = request.page_number + if not UtilClient.is_unset(request.page_size): + query['PageSize'] = request.page_size + if not UtilClient.is_unset(request.properties): + query['Properties'] = request.properties + if not UtilClient.is_unset(request.sort_by): + query['SortBy'] = request.sort_by + if not UtilClient.is_unset(request.source_id): + query['SourceId'] = request.source_id + if not UtilClient.is_unset(request.source_types): + query['SourceTypes'] = request.source_types + req = open_api_models.OpenApiRequest( + headers=headers, + query=OpenApiUtilClient.query(query) + ) + params = open_api_models.Params( + action='ListDatasetVersions', + version='2021-02-04', + protocol='HTTPS', + pathname=f'/api/v1/datasets/{OpenApiUtilClient.get_encode_param(dataset_id)}/versions', + method='GET', + auth_type='AK', + style='ROA', + req_body_type='json', + body_type='json' + ) + return TeaCore.from_map( + aiwork_space_20210204_models.ListDatasetVersionsResponse(), + self.call_api(params, req, runtime) + ) + + async def list_dataset_versions_with_options_async( + self, + dataset_id: str, + request: aiwork_space_20210204_models.ListDatasetVersionsRequest, + headers: Dict[str, str], + runtime: util_models.RuntimeOptions, + ) -> aiwork_space_20210204_models.ListDatasetVersionsResponse: + """ + @summary 获取数据集版本列表 + + @param request: ListDatasetVersionsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListDatasetVersionsResponse + """ + UtilClient.validate_model(request) + query = {} + if not UtilClient.is_unset(request.data_sources_types): + query['DataSourcesTypes'] = request.data_sources_types + if not UtilClient.is_unset(request.label_keys): + query['LabelKeys'] = request.label_keys + if not UtilClient.is_unset(request.lable_values): + query['LableValues'] = request.lable_values + if not UtilClient.is_unset(request.order): + query['Order'] = request.order + if not UtilClient.is_unset(request.page_number): + query['PageNumber'] = request.page_number + if not UtilClient.is_unset(request.page_size): + query['PageSize'] = request.page_size + if not UtilClient.is_unset(request.properties): + query['Properties'] = request.properties + if not UtilClient.is_unset(request.sort_by): + query['SortBy'] = request.sort_by + if not UtilClient.is_unset(request.source_id): + query['SourceId'] = request.source_id + if not UtilClient.is_unset(request.source_types): + query['SourceTypes'] = request.source_types + req = open_api_models.OpenApiRequest( + headers=headers, + query=OpenApiUtilClient.query(query) + ) + params = open_api_models.Params( + action='ListDatasetVersions', + version='2021-02-04', + protocol='HTTPS', + pathname=f'/api/v1/datasets/{OpenApiUtilClient.get_encode_param(dataset_id)}/versions', + method='GET', + auth_type='AK', + style='ROA', + req_body_type='json', + body_type='json' + ) + return TeaCore.from_map( + aiwork_space_20210204_models.ListDatasetVersionsResponse(), + await self.call_api_async(params, req, runtime) + ) + + def list_dataset_versions( + self, + dataset_id: str, + request: aiwork_space_20210204_models.ListDatasetVersionsRequest, + ) -> aiwork_space_20210204_models.ListDatasetVersionsResponse: + """ + @summary 获取数据集版本列表 + + @param request: ListDatasetVersionsRequest + @return: ListDatasetVersionsResponse + """ + runtime = util_models.RuntimeOptions() + headers = {} + return self.list_dataset_versions_with_options(dataset_id, request, headers, runtime) + + async def list_dataset_versions_async( + self, + dataset_id: str, + request: aiwork_space_20210204_models.ListDatasetVersionsRequest, + ) -> aiwork_space_20210204_models.ListDatasetVersionsResponse: + """ + @summary 获取数据集版本列表 + + @param request: ListDatasetVersionsRequest + @return: ListDatasetVersionsResponse + """ + runtime = util_models.RuntimeOptions() + headers = {} + return await self.list_dataset_versions_with_options_async(dataset_id, request, headers, runtime) + def list_datasets_with_options( self, request: aiwork_space_20210204_models.ListDatasetsRequest, @@ -7906,13 +8635,13 @@ def list_datasets_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListDatasetsResponse: """ - @summary 获取数据集列表 - - @param request: ListDatasetsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListDatasetsResponse - """ + @summary 获取数据集列表 + + @param request: ListDatasetsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListDatasetsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.data_source_types): @@ -7921,10 +8650,6 @@ def list_datasets_with_options( query['DataTypes'] = request.data_types if not UtilClient.is_unset(request.label): query['Label'] = request.label - if not UtilClient.is_unset(request.label_keys): - query['LabelKeys'] = request.label_keys - if not UtilClient.is_unset(request.label_values): - query['LabelValues'] = request.label_values if not UtilClient.is_unset(request.name): query['Name'] = request.name if not UtilClient.is_unset(request.order): @@ -7937,6 +8662,8 @@ def list_datasets_with_options( query['Properties'] = request.properties if not UtilClient.is_unset(request.provider): query['Provider'] = request.provider + if not UtilClient.is_unset(request.source_dataset_id): + query['SourceDatasetId'] = request.source_dataset_id if not UtilClient.is_unset(request.source_id): query['SourceId'] = request.source_id if not UtilClient.is_unset(request.source_types): @@ -7970,13 +8697,13 @@ async def list_datasets_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListDatasetsResponse: """ - @summary 获取数据集列表 - - @param request: ListDatasetsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListDatasetsResponse - """ + @summary 获取数据集列表 + + @param request: ListDatasetsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListDatasetsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.data_source_types): @@ -7985,10 +8712,6 @@ async def list_datasets_with_options_async( query['DataTypes'] = request.data_types if not UtilClient.is_unset(request.label): query['Label'] = request.label - if not UtilClient.is_unset(request.label_keys): - query['LabelKeys'] = request.label_keys - if not UtilClient.is_unset(request.label_values): - query['LabelValues'] = request.label_values if not UtilClient.is_unset(request.name): query['Name'] = request.name if not UtilClient.is_unset(request.order): @@ -8001,6 +8724,8 @@ async def list_datasets_with_options_async( query['Properties'] = request.properties if not UtilClient.is_unset(request.provider): query['Provider'] = request.provider + if not UtilClient.is_unset(request.source_dataset_id): + query['SourceDatasetId'] = request.source_dataset_id if not UtilClient.is_unset(request.source_id): query['SourceId'] = request.source_id if not UtilClient.is_unset(request.source_types): @@ -8032,11 +8757,11 @@ def list_datasets( request: aiwork_space_20210204_models.ListDatasetsRequest, ) -> aiwork_space_20210204_models.ListDatasetsResponse: """ - @summary 获取数据集列表 - - @param request: ListDatasetsRequest - @return: ListDatasetsResponse - """ + @summary 获取数据集列表 + + @param request: ListDatasetsRequest + @return: ListDatasetsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_datasets_with_options(request, headers, runtime) @@ -8046,11 +8771,11 @@ async def list_datasets_async( request: aiwork_space_20210204_models.ListDatasetsRequest, ) -> aiwork_space_20210204_models.ListDatasetsResponse: """ - @summary 获取数据集列表 - - @param request: ListDatasetsRequest - @return: ListDatasetsResponse - """ + @summary 获取数据集列表 + + @param request: ListDatasetsRequest + @return: ListDatasetsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_datasets_with_options_async(request, headers, runtime) @@ -8062,13 +8787,13 @@ def list_experiment_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListExperimentResponse: """ - @summary 获取实验列表 - - @param request: ListExperimentRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListExperimentResponse - """ + @summary 获取实验列表 + + @param request: ListExperimentRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListExperimentResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.labels): @@ -8112,13 +8837,13 @@ async def list_experiment_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListExperimentResponse: """ - @summary 获取实验列表 - - @param request: ListExperimentRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListExperimentResponse - """ + @summary 获取实验列表 + + @param request: ListExperimentRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListExperimentResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.labels): @@ -8160,11 +8885,11 @@ def list_experiment( request: aiwork_space_20210204_models.ListExperimentRequest, ) -> aiwork_space_20210204_models.ListExperimentResponse: """ - @summary 获取实验列表 - - @param request: ListExperimentRequest - @return: ListExperimentResponse - """ + @summary 获取实验列表 + + @param request: ListExperimentRequest + @return: ListExperimentResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_experiment_with_options(request, headers, runtime) @@ -8174,11 +8899,11 @@ async def list_experiment_async( request: aiwork_space_20210204_models.ListExperimentRequest, ) -> aiwork_space_20210204_models.ListExperimentResponse: """ - @summary 获取实验列表 - - @param request: ListExperimentRequest - @return: ListExperimentResponse - """ + @summary 获取实验列表 + + @param request: ListExperimentRequest + @return: ListExperimentResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_experiment_with_options_async(request, headers, runtime) @@ -8190,13 +8915,13 @@ def list_features_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListFeaturesResponse: """ - @summary 列举特性 - - @param request: ListFeaturesRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListFeaturesResponse - """ + @summary 列举特性 + + @param request: ListFeaturesRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListFeaturesResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.names): @@ -8228,13 +8953,13 @@ async def list_features_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListFeaturesResponse: """ - @summary 列举特性 - - @param request: ListFeaturesRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListFeaturesResponse - """ + @summary 列举特性 + + @param request: ListFeaturesRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListFeaturesResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.names): @@ -8264,11 +8989,11 @@ def list_features( request: aiwork_space_20210204_models.ListFeaturesRequest, ) -> aiwork_space_20210204_models.ListFeaturesResponse: """ - @summary 列举特性 - - @param request: ListFeaturesRequest - @return: ListFeaturesResponse - """ + @summary 列举特性 + + @param request: ListFeaturesRequest + @return: ListFeaturesResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_features_with_options(request, headers, runtime) @@ -8278,11 +9003,11 @@ async def list_features_async( request: aiwork_space_20210204_models.ListFeaturesRequest, ) -> aiwork_space_20210204_models.ListFeaturesResponse: """ - @summary 列举特性 - - @param request: ListFeaturesRequest - @return: ListFeaturesResponse - """ + @summary 列举特性 + + @param request: ListFeaturesRequest + @return: ListFeaturesResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_features_with_options_async(request, headers, runtime) @@ -8294,13 +9019,13 @@ def list_global_permissions_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListGlobalPermissionsResponse: """ - @summary 获取用户全局权限 - - @param request: ListGlobalPermissionsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListGlobalPermissionsResponse - """ + @summary 获取用户全局权限 + + @param request: ListGlobalPermissionsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListGlobalPermissionsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.module_names): @@ -8340,13 +9065,13 @@ async def list_global_permissions_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListGlobalPermissionsResponse: """ - @summary 获取用户全局权限 - - @param request: ListGlobalPermissionsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListGlobalPermissionsResponse - """ + @summary 获取用户全局权限 + + @param request: ListGlobalPermissionsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListGlobalPermissionsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.module_names): @@ -8384,11 +9109,11 @@ def list_global_permissions( request: aiwork_space_20210204_models.ListGlobalPermissionsRequest, ) -> aiwork_space_20210204_models.ListGlobalPermissionsResponse: """ - @summary 获取用户全局权限 - - @param request: ListGlobalPermissionsRequest - @return: ListGlobalPermissionsResponse - """ + @summary 获取用户全局权限 + + @param request: ListGlobalPermissionsRequest + @return: ListGlobalPermissionsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_global_permissions_with_options(request, headers, runtime) @@ -8398,11 +9123,11 @@ async def list_global_permissions_async( request: aiwork_space_20210204_models.ListGlobalPermissionsRequest, ) -> aiwork_space_20210204_models.ListGlobalPermissionsResponse: """ - @summary 获取用户全局权限 - - @param request: ListGlobalPermissionsRequest - @return: ListGlobalPermissionsResponse - """ + @summary 获取用户全局权限 + + @param request: ListGlobalPermissionsRequest + @return: ListGlobalPermissionsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_global_permissions_with_options_async(request, headers, runtime) @@ -8414,13 +9139,13 @@ def list_image_label_keys_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListImageLabelKeysResponse: """ - @summary 列举匹配标签前缀的所有标签 - - @param request: ListImageLabelKeysRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListImageLabelKeysResponse - """ + @summary 列举匹配标签前缀的所有标签 + + @param request: ListImageLabelKeysRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListImageLabelKeysResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.label_key_prefixes): @@ -8452,13 +9177,13 @@ async def list_image_label_keys_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListImageLabelKeysResponse: """ - @summary 列举匹配标签前缀的所有标签 - - @param request: ListImageLabelKeysRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListImageLabelKeysResponse - """ + @summary 列举匹配标签前缀的所有标签 + + @param request: ListImageLabelKeysRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListImageLabelKeysResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.label_key_prefixes): @@ -8488,11 +9213,11 @@ def list_image_label_keys( request: aiwork_space_20210204_models.ListImageLabelKeysRequest, ) -> aiwork_space_20210204_models.ListImageLabelKeysResponse: """ - @summary 列举匹配标签前缀的所有标签 - - @param request: ListImageLabelKeysRequest - @return: ListImageLabelKeysResponse - """ + @summary 列举匹配标签前缀的所有标签 + + @param request: ListImageLabelKeysRequest + @return: ListImageLabelKeysResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_image_label_keys_with_options(request, headers, runtime) @@ -8502,11 +9227,11 @@ async def list_image_label_keys_async( request: aiwork_space_20210204_models.ListImageLabelKeysRequest, ) -> aiwork_space_20210204_models.ListImageLabelKeysResponse: """ - @summary 列举匹配标签前缀的所有标签 - - @param request: ListImageLabelKeysRequest - @return: ListImageLabelKeysResponse - """ + @summary 列举匹配标签前缀的所有标签 + + @param request: ListImageLabelKeysRequest + @return: ListImageLabelKeysResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_image_label_keys_with_options_async(request, headers, runtime) @@ -8518,13 +9243,13 @@ def list_image_labels_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListImageLabelsResponse: """ - @summary 列举标签 - - @param request: ListImageLabelsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListImageLabelsResponse - """ + @summary 列举标签 + + @param request: ListImageLabelsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListImageLabelsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.image_id): @@ -8564,13 +9289,13 @@ async def list_image_labels_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListImageLabelsResponse: """ - @summary 列举标签 - - @param request: ListImageLabelsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListImageLabelsResponse - """ + @summary 列举标签 + + @param request: ListImageLabelsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListImageLabelsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.image_id): @@ -8608,11 +9333,11 @@ def list_image_labels( request: aiwork_space_20210204_models.ListImageLabelsRequest, ) -> aiwork_space_20210204_models.ListImageLabelsResponse: """ - @summary 列举标签 - - @param request: ListImageLabelsRequest - @return: ListImageLabelsResponse - """ + @summary 列举标签 + + @param request: ListImageLabelsRequest + @return: ListImageLabelsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_image_labels_with_options(request, headers, runtime) @@ -8622,11 +9347,11 @@ async def list_image_labels_async( request: aiwork_space_20210204_models.ListImageLabelsRequest, ) -> aiwork_space_20210204_models.ListImageLabelsResponse: """ - @summary 列举标签 - - @param request: ListImageLabelsRequest - @return: ListImageLabelsResponse - """ + @summary 列举标签 + + @param request: ListImageLabelsRequest + @return: ListImageLabelsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_image_labels_with_options_async(request, headers, runtime) @@ -8638,13 +9363,13 @@ def list_images_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListImagesResponse: """ - @summary 列举已注册镜像 - - @param request: ListImagesRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListImagesResponse - """ + @summary 列举已注册镜像 + + @param request: ListImagesRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListImagesResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.accessibility): @@ -8698,13 +9423,13 @@ async def list_images_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListImagesResponse: """ - @summary 列举已注册镜像 - - @param request: ListImagesRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListImagesResponse - """ + @summary 列举已注册镜像 + + @param request: ListImagesRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListImagesResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.accessibility): @@ -8756,11 +9481,11 @@ def list_images( request: aiwork_space_20210204_models.ListImagesRequest, ) -> aiwork_space_20210204_models.ListImagesResponse: """ - @summary 列举已注册镜像 - - @param request: ListImagesRequest - @return: ListImagesResponse - """ + @summary 列举已注册镜像 + + @param request: ListImagesRequest + @return: ListImagesResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_images_with_options(request, headers, runtime) @@ -8770,11 +9495,11 @@ async def list_images_async( request: aiwork_space_20210204_models.ListImagesRequest, ) -> aiwork_space_20210204_models.ListImagesResponse: """ - @summary 列举已注册镜像 - - @param request: ListImagesRequest - @return: ListImagesResponse - """ + @summary 列举已注册镜像 + + @param request: ListImagesRequest + @return: ListImagesResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_images_with_options_async(request, headers, runtime) @@ -8787,13 +9512,13 @@ def list_members_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListMembersResponse: """ - @summary 列举工作空间成员 - - @param request: ListMembersRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListMembersResponse - """ + @summary 列举工作空间成员 + + @param request: ListMembersRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListMembersResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.member_name): @@ -8832,13 +9557,13 @@ async def list_members_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListMembersResponse: """ - @summary 列举工作空间成员 - - @param request: ListMembersRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListMembersResponse - """ + @summary 列举工作空间成员 + + @param request: ListMembersRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListMembersResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.member_name): @@ -8875,11 +9600,11 @@ def list_members( request: aiwork_space_20210204_models.ListMembersRequest, ) -> aiwork_space_20210204_models.ListMembersResponse: """ - @summary 列举工作空间成员 - - @param request: ListMembersRequest - @return: ListMembersResponse - """ + @summary 列举工作空间成员 + + @param request: ListMembersRequest + @return: ListMembersResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_members_with_options(workspace_id, request, headers, runtime) @@ -8890,11 +9615,11 @@ async def list_members_async( request: aiwork_space_20210204_models.ListMembersRequest, ) -> aiwork_space_20210204_models.ListMembersResponse: """ - @summary 列举工作空间成员 - - @param request: ListMembersRequest - @return: ListMembersResponse - """ + @summary 列举工作空间成员 + + @param request: ListMembersRequest + @return: ListMembersResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_members_with_options_async(workspace_id, request, headers, runtime) @@ -8906,13 +9631,13 @@ def list_model_domains_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListModelDomainsResponse: """ - @summary 获取模型领域列表 - - @param request: ListModelDomainsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListModelDomainsResponse - """ + @summary 获取模型领域列表 + + @param request: ListModelDomainsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListModelDomainsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.model_domain_ids): @@ -8944,13 +9669,13 @@ async def list_model_domains_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListModelDomainsResponse: """ - @summary 获取模型领域列表 - - @param request: ListModelDomainsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListModelDomainsResponse - """ + @summary 获取模型领域列表 + + @param request: ListModelDomainsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListModelDomainsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.model_domain_ids): @@ -8980,11 +9705,11 @@ def list_model_domains( request: aiwork_space_20210204_models.ListModelDomainsRequest, ) -> aiwork_space_20210204_models.ListModelDomainsResponse: """ - @summary 获取模型领域列表 - - @param request: ListModelDomainsRequest - @return: ListModelDomainsResponse - """ + @summary 获取模型领域列表 + + @param request: ListModelDomainsRequest + @return: ListModelDomainsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_model_domains_with_options(request, headers, runtime) @@ -8994,11 +9719,11 @@ async def list_model_domains_async( request: aiwork_space_20210204_models.ListModelDomainsRequest, ) -> aiwork_space_20210204_models.ListModelDomainsResponse: """ - @summary 获取模型领域列表 - - @param request: ListModelDomainsRequest - @return: ListModelDomainsResponse - """ + @summary 获取模型领域列表 + + @param request: ListModelDomainsRequest + @return: ListModelDomainsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_model_domains_with_options_async(request, headers, runtime) @@ -9011,13 +9736,13 @@ def list_model_versions_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListModelVersionsResponse: """ - @summary 获取模型版本列表 - - @param request: ListModelVersionsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListModelVersionsResponse - """ + @summary 获取模型版本列表 + + @param request: ListModelVersionsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListModelVersionsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.approval_status): @@ -9074,13 +9799,13 @@ async def list_model_versions_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListModelVersionsResponse: """ - @summary 获取模型版本列表 - - @param request: ListModelVersionsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListModelVersionsResponse - """ + @summary 获取模型版本列表 + + @param request: ListModelVersionsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListModelVersionsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.approval_status): @@ -9135,11 +9860,11 @@ def list_model_versions( request: aiwork_space_20210204_models.ListModelVersionsRequest, ) -> aiwork_space_20210204_models.ListModelVersionsResponse: """ - @summary 获取模型版本列表 - - @param request: ListModelVersionsRequest - @return: ListModelVersionsResponse - """ + @summary 获取模型版本列表 + + @param request: ListModelVersionsRequest + @return: ListModelVersionsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_model_versions_with_options(model_id, request, headers, runtime) @@ -9150,11 +9875,11 @@ async def list_model_versions_async( request: aiwork_space_20210204_models.ListModelVersionsRequest, ) -> aiwork_space_20210204_models.ListModelVersionsResponse: """ - @summary 获取模型版本列表 - - @param request: ListModelVersionsRequest - @return: ListModelVersionsResponse - """ + @summary 获取模型版本列表 + + @param request: ListModelVersionsRequest + @return: ListModelVersionsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_model_versions_with_options_async(model_id, request, headers, runtime) @@ -9166,13 +9891,13 @@ def list_models_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListModelsResponse: """ - @summary 获取模型列表 - - @param request: ListModelsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListModelsResponse - """ + @summary 获取模型列表 + + @param request: ListModelsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListModelsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.collections): @@ -9234,13 +9959,13 @@ async def list_models_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListModelsResponse: """ - @summary 获取模型列表 - - @param request: ListModelsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListModelsResponse - """ + @summary 获取模型列表 + + @param request: ListModelsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListModelsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.collections): @@ -9300,11 +10025,11 @@ def list_models( request: aiwork_space_20210204_models.ListModelsRequest, ) -> aiwork_space_20210204_models.ListModelsResponse: """ - @summary 获取模型列表 - - @param request: ListModelsRequest - @return: ListModelsResponse - """ + @summary 获取模型列表 + + @param request: ListModelsRequest + @return: ListModelsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_models_with_options(request, headers, runtime) @@ -9314,11 +10039,11 @@ async def list_models_async( request: aiwork_space_20210204_models.ListModelsRequest, ) -> aiwork_space_20210204_models.ListModelsResponse: """ - @summary 获取模型列表 - - @param request: ListModelsRequest - @return: ListModelsResponse - """ + @summary 获取模型列表 + + @param request: ListModelsRequest + @return: ListModelsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_models_with_options_async(request, headers, runtime) @@ -9330,13 +10055,13 @@ def list_module_configs_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListModuleConfigsResponse: """ - @summary 列举PAI云产品的配置 - - @param request: ListModuleConfigsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListModuleConfigsResponse - """ + @summary 列举PAI云产品的配置 + + @param request: ListModuleConfigsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListModuleConfigsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.module_codes): @@ -9370,13 +10095,13 @@ async def list_module_configs_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListModuleConfigsResponse: """ - @summary 列举PAI云产品的配置 - - @param request: ListModuleConfigsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListModuleConfigsResponse - """ + @summary 列举PAI云产品的配置 + + @param request: ListModuleConfigsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListModuleConfigsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.module_codes): @@ -9408,11 +10133,11 @@ def list_module_configs( request: aiwork_space_20210204_models.ListModuleConfigsRequest, ) -> aiwork_space_20210204_models.ListModuleConfigsResponse: """ - @summary 列举PAI云产品的配置 - - @param request: ListModuleConfigsRequest - @return: ListModuleConfigsResponse - """ + @summary 列举PAI云产品的配置 + + @param request: ListModuleConfigsRequest + @return: ListModuleConfigsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_module_configs_with_options(request, headers, runtime) @@ -9422,11 +10147,11 @@ async def list_module_configs_async( request: aiwork_space_20210204_models.ListModuleConfigsRequest, ) -> aiwork_space_20210204_models.ListModuleConfigsResponse: """ - @summary 列举PAI云产品的配置 - - @param request: ListModuleConfigsRequest - @return: ListModuleConfigsResponse - """ + @summary 列举PAI云产品的配置 + + @param request: ListModuleConfigsRequest + @return: ListModuleConfigsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_module_configs_with_options_async(request, headers, runtime) @@ -9439,13 +10164,13 @@ def list_operation_logs_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListOperationLogsResponse: """ - @summary 列出操作日志 - - @param request: ListOperationLogsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListOperationLogsResponse - """ + @summary 列出操作日志 + + @param request: ListOperationLogsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListOperationLogsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.entity_status): @@ -9490,13 +10215,13 @@ async def list_operation_logs_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListOperationLogsResponse: """ - @summary 列出操作日志 - - @param request: ListOperationLogsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListOperationLogsResponse - """ + @summary 列出操作日志 + + @param request: ListOperationLogsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListOperationLogsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.entity_status): @@ -9539,11 +10264,11 @@ def list_operation_logs( request: aiwork_space_20210204_models.ListOperationLogsRequest, ) -> aiwork_space_20210204_models.ListOperationLogsResponse: """ - @summary 列出操作日志 - - @param request: ListOperationLogsRequest - @return: ListOperationLogsResponse - """ + @summary 列出操作日志 + + @param request: ListOperationLogsRequest + @return: ListOperationLogsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_operation_logs_with_options(workspace_id, request, headers, runtime) @@ -9554,11 +10279,11 @@ async def list_operation_logs_async( request: aiwork_space_20210204_models.ListOperationLogsRequest, ) -> aiwork_space_20210204_models.ListOperationLogsResponse: """ - @summary 列出操作日志 - - @param request: ListOperationLogsRequest - @return: ListOperationLogsResponse - """ + @summary 列出操作日志 + + @param request: ListOperationLogsRequest + @return: ListOperationLogsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_operation_logs_with_options_async(workspace_id, request, headers, runtime) @@ -9570,12 +10295,12 @@ def list_permissions_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListPermissionsResponse: """ - @summary 列举权限 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListPermissionsResponse - """ + @summary 列举权限 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListPermissionsResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -9602,12 +10327,12 @@ async def list_permissions_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListPermissionsResponse: """ - @summary 列举权限 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListPermissionsResponse - """ + @summary 列举权限 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListPermissionsResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -9632,10 +10357,10 @@ def list_permissions( workspace_id: str, ) -> aiwork_space_20210204_models.ListPermissionsResponse: """ - @summary 列举权限 - - @return: ListPermissionsResponse - """ + @summary 列举权限 + + @return: ListPermissionsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_permissions_with_options(workspace_id, headers, runtime) @@ -9645,10 +10370,10 @@ async def list_permissions_async( workspace_id: str, ) -> aiwork_space_20210204_models.ListPermissionsResponse: """ - @summary 列举权限 - - @return: ListPermissionsResponse - """ + @summary 列举权限 + + @return: ListPermissionsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_permissions_with_options_async(workspace_id, headers, runtime) @@ -9660,13 +10385,13 @@ def list_product_authorizations_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListProductAuthorizationsResponse: """ - @summary 获取产品授权 - - @param request: ListProductAuthorizationsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListProductAuthorizationsResponse - """ + @summary 获取产品授权 + + @param request: ListProductAuthorizationsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListProductAuthorizationsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.ram_role_names): @@ -9698,13 +10423,13 @@ async def list_product_authorizations_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListProductAuthorizationsResponse: """ - @summary 获取产品授权 - - @param request: ListProductAuthorizationsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListProductAuthorizationsResponse - """ + @summary 获取产品授权 + + @param request: ListProductAuthorizationsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListProductAuthorizationsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.ram_role_names): @@ -9734,11 +10459,11 @@ def list_product_authorizations( request: aiwork_space_20210204_models.ListProductAuthorizationsRequest, ) -> aiwork_space_20210204_models.ListProductAuthorizationsResponse: """ - @summary 获取产品授权 - - @param request: ListProductAuthorizationsRequest - @return: ListProductAuthorizationsResponse - """ + @summary 获取产品授权 + + @param request: ListProductAuthorizationsRequest + @return: ListProductAuthorizationsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_product_authorizations_with_options(request, headers, runtime) @@ -9748,11 +10473,11 @@ async def list_product_authorizations_async( request: aiwork_space_20210204_models.ListProductAuthorizationsRequest, ) -> aiwork_space_20210204_models.ListProductAuthorizationsResponse: """ - @summary 获取产品授权 - - @param request: ListProductAuthorizationsRequest - @return: ListProductAuthorizationsResponse - """ + @summary 获取产品授权 + + @param request: ListProductAuthorizationsRequest + @return: ListProductAuthorizationsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_product_authorizations_with_options_async(request, headers, runtime) @@ -9764,13 +10489,13 @@ def list_products_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListProductsResponse: """ - @summary 列举产品 - - @param request: ListProductsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListProductsResponse - """ + @summary 列举产品 + + @param request: ListProductsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListProductsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.product_codes): @@ -9806,13 +10531,13 @@ async def list_products_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListProductsResponse: """ - @summary 列举产品 - - @param request: ListProductsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListProductsResponse - """ + @summary 列举产品 + + @param request: ListProductsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListProductsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.product_codes): @@ -9846,11 +10571,11 @@ def list_products( request: aiwork_space_20210204_models.ListProductsRequest, ) -> aiwork_space_20210204_models.ListProductsResponse: """ - @summary 列举产品 - - @param request: ListProductsRequest - @return: ListProductsResponse - """ + @summary 列举产品 + + @param request: ListProductsRequest + @return: ListProductsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_products_with_options(request, headers, runtime) @@ -9860,11 +10585,11 @@ async def list_products_async( request: aiwork_space_20210204_models.ListProductsRequest, ) -> aiwork_space_20210204_models.ListProductsResponse: """ - @summary 列举产品 - - @param request: ListProductsRequest - @return: ListProductsResponse - """ + @summary 列举产品 + + @param request: ListProductsRequest + @return: ListProductsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_products_with_options_async(request, headers, runtime) @@ -9876,13 +10601,13 @@ def list_quotas_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListQuotasResponse: """ - @summary 获取已有配额列表 - - @param request: ListQuotasRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListQuotasResponse - """ + @summary 获取已有配额列表 + + @param request: ListQuotasRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListQuotasResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.name): @@ -9914,13 +10639,13 @@ async def list_quotas_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListQuotasResponse: """ - @summary 获取已有配额列表 - - @param request: ListQuotasRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListQuotasResponse - """ + @summary 获取已有配额列表 + + @param request: ListQuotasRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListQuotasResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.name): @@ -9950,11 +10675,11 @@ def list_quotas( request: aiwork_space_20210204_models.ListQuotasRequest, ) -> aiwork_space_20210204_models.ListQuotasResponse: """ - @summary 获取已有配额列表 - - @param request: ListQuotasRequest - @return: ListQuotasResponse - """ + @summary 获取已有配额列表 + + @param request: ListQuotasRequest + @return: ListQuotasResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_quotas_with_options(request, headers, runtime) @@ -9964,11 +10689,11 @@ async def list_quotas_async( request: aiwork_space_20210204_models.ListQuotasRequest, ) -> aiwork_space_20210204_models.ListQuotasResponse: """ - @summary 获取已有配额列表 - - @param request: ListQuotasRequest - @return: ListQuotasResponse - """ + @summary 获取已有配额列表 + + @param request: ListQuotasRequest + @return: ListQuotasResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_quotas_with_options_async(request, headers, runtime) @@ -9980,13 +10705,13 @@ def list_resources_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListResourcesResponse: """ - @summary 列举工作空间资源 - - @param request: ListResourcesRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListResourcesResponse - """ + @summary 列举工作空间资源 + + @param request: ListResourcesRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListResourcesResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.group_name): @@ -10040,13 +10765,13 @@ async def list_resources_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListResourcesResponse: """ - @summary 列举工作空间资源 - - @param request: ListResourcesRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListResourcesResponse - """ + @summary 列举工作空间资源 + + @param request: ListResourcesRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListResourcesResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.group_name): @@ -10098,11 +10823,11 @@ def list_resources( request: aiwork_space_20210204_models.ListResourcesRequest, ) -> aiwork_space_20210204_models.ListResourcesResponse: """ - @summary 列举工作空间资源 - - @param request: ListResourcesRequest - @return: ListResourcesResponse - """ + @summary 列举工作空间资源 + + @param request: ListResourcesRequest + @return: ListResourcesResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_resources_with_options(request, headers, runtime) @@ -10112,11 +10837,11 @@ async def list_resources_async( request: aiwork_space_20210204_models.ListResourcesRequest, ) -> aiwork_space_20210204_models.ListResourcesResponse: """ - @summary 列举工作空间资源 - - @param request: ListResourcesRequest - @return: ListResourcesResponse - """ + @summary 列举工作空间资源 + + @param request: ListResourcesRequest + @return: ListResourcesResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_resources_with_options_async(request, headers, runtime) @@ -10128,13 +10853,13 @@ def list_service_templates_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListServiceTemplatesResponse: """ - @summary 获取服务模版列表 - - @param request: ListServiceTemplatesRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListServiceTemplatesResponse - """ + @summary 获取服务模版列表 + + @param request: ListServiceTemplatesRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListServiceTemplatesResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.label): @@ -10180,13 +10905,13 @@ async def list_service_templates_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListServiceTemplatesResponse: """ - @summary 获取服务模版列表 - - @param request: ListServiceTemplatesRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListServiceTemplatesResponse - """ + @summary 获取服务模版列表 + + @param request: ListServiceTemplatesRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListServiceTemplatesResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.label): @@ -10230,11 +10955,11 @@ def list_service_templates( request: aiwork_space_20210204_models.ListServiceTemplatesRequest, ) -> aiwork_space_20210204_models.ListServiceTemplatesResponse: """ - @summary 获取服务模版列表 - - @param request: ListServiceTemplatesRequest - @return: ListServiceTemplatesResponse - """ + @summary 获取服务模版列表 + + @param request: ListServiceTemplatesRequest + @return: ListServiceTemplatesResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_service_templates_with_options(request, headers, runtime) @@ -10244,11 +10969,11 @@ async def list_service_templates_async( request: aiwork_space_20210204_models.ListServiceTemplatesRequest, ) -> aiwork_space_20210204_models.ListServiceTemplatesResponse: """ - @summary 获取服务模版列表 - - @param request: ListServiceTemplatesRequest - @return: ListServiceTemplatesResponse - """ + @summary 获取服务模版列表 + + @param request: ListServiceTemplatesRequest + @return: ListServiceTemplatesResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_service_templates_with_options_async(request, headers, runtime) @@ -10260,13 +10985,13 @@ def list_user_configs_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListUserConfigsResponse: """ - @summary 获取用户配置 - - @param request: ListUserConfigsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListUserConfigsResponse - """ + @summary 获取用户配置 + + @param request: ListUserConfigsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListUserConfigsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.category_names): @@ -10300,13 +11025,13 @@ async def list_user_configs_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListUserConfigsResponse: """ - @summary 获取用户配置 - - @param request: ListUserConfigsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListUserConfigsResponse - """ + @summary 获取用户配置 + + @param request: ListUserConfigsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListUserConfigsResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.category_names): @@ -10338,11 +11063,11 @@ def list_user_configs( request: aiwork_space_20210204_models.ListUserConfigsRequest, ) -> aiwork_space_20210204_models.ListUserConfigsResponse: """ - @summary 获取用户配置 - - @param request: ListUserConfigsRequest - @return: ListUserConfigsResponse - """ + @summary 获取用户配置 + + @param request: ListUserConfigsRequest + @return: ListUserConfigsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_user_configs_with_options(request, headers, runtime) @@ -10352,11 +11077,11 @@ async def list_user_configs_async( request: aiwork_space_20210204_models.ListUserConfigsRequest, ) -> aiwork_space_20210204_models.ListUserConfigsResponse: """ - @summary 获取用户配置 - - @param request: ListUserConfigsRequest - @return: ListUserConfigsResponse - """ + @summary 获取用户配置 + + @param request: ListUserConfigsRequest + @return: ListUserConfigsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_user_configs_with_options_async(request, headers, runtime) @@ -10368,13 +11093,13 @@ def list_users_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListUsersResponse: """ - @summary 列出用户 - - @param request: ListUsersRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListUsersResponse - """ + @summary 列出用户 + + @param request: ListUsersRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListUsersResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.account_types): @@ -10414,13 +11139,13 @@ async def list_users_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListUsersResponse: """ - @summary 列出用户 - - @param request: ListUsersRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListUsersResponse - """ + @summary 列出用户 + + @param request: ListUsersRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListUsersResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.account_types): @@ -10458,11 +11183,11 @@ def list_users( request: aiwork_space_20210204_models.ListUsersRequest, ) -> aiwork_space_20210204_models.ListUsersResponse: """ - @summary 列出用户 - - @param request: ListUsersRequest - @return: ListUsersResponse - """ + @summary 列出用户 + + @param request: ListUsersRequest + @return: ListUsersResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_users_with_options(request, headers, runtime) @@ -10472,11 +11197,11 @@ async def list_users_async( request: aiwork_space_20210204_models.ListUsersRequest, ) -> aiwork_space_20210204_models.ListUsersResponse: """ - @summary 列出用户 - - @param request: ListUsersRequest - @return: ListUsersResponse - """ + @summary 列出用户 + + @param request: ListUsersRequest + @return: ListUsersResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_users_with_options_async(request, headers, runtime) @@ -10489,13 +11214,13 @@ def list_workspace_permissions_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListWorkspacePermissionsResponse: """ - @summary 批量获取权限 - - @param request: ListWorkspacePermissionsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListWorkspacePermissionsResponse - """ + @summary 批量获取权限 + + @param request: ListWorkspacePermissionsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListWorkspacePermissionsResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.options): @@ -10530,13 +11255,13 @@ async def list_workspace_permissions_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListWorkspacePermissionsResponse: """ - @summary 批量获取权限 - - @param request: ListWorkspacePermissionsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListWorkspacePermissionsResponse - """ + @summary 批量获取权限 + + @param request: ListWorkspacePermissionsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListWorkspacePermissionsResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.options): @@ -10569,11 +11294,11 @@ def list_workspace_permissions( request: aiwork_space_20210204_models.ListWorkspacePermissionsRequest, ) -> aiwork_space_20210204_models.ListWorkspacePermissionsResponse: """ - @summary 批量获取权限 - - @param request: ListWorkspacePermissionsRequest - @return: ListWorkspacePermissionsResponse - """ + @summary 批量获取权限 + + @param request: ListWorkspacePermissionsRequest + @return: ListWorkspacePermissionsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_workspace_permissions_with_options(workspace_id, request, headers, runtime) @@ -10584,11 +11309,11 @@ async def list_workspace_permissions_async( request: aiwork_space_20210204_models.ListWorkspacePermissionsRequest, ) -> aiwork_space_20210204_models.ListWorkspacePermissionsResponse: """ - @summary 批量获取权限 - - @param request: ListWorkspacePermissionsRequest - @return: ListWorkspacePermissionsResponse - """ + @summary 批量获取权限 + + @param request: ListWorkspacePermissionsRequest + @return: ListWorkspacePermissionsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_workspace_permissions_with_options_async(workspace_id, request, headers, runtime) @@ -10601,13 +11326,13 @@ def list_workspace_roles_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListWorkspaceRolesResponse: """ - @summary 列举工作空间角色 - - @param request: ListWorkspaceRolesRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListWorkspaceRolesResponse - """ + @summary 列举工作空间角色 + + @param request: ListWorkspaceRolesRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListWorkspaceRolesResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.order): @@ -10656,13 +11381,13 @@ async def list_workspace_roles_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListWorkspaceRolesResponse: """ - @summary 列举工作空间角色 - - @param request: ListWorkspaceRolesRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListWorkspaceRolesResponse - """ + @summary 列举工作空间角色 + + @param request: ListWorkspaceRolesRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListWorkspaceRolesResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.order): @@ -10709,11 +11434,11 @@ def list_workspace_roles( request: aiwork_space_20210204_models.ListWorkspaceRolesRequest, ) -> aiwork_space_20210204_models.ListWorkspaceRolesResponse: """ - @summary 列举工作空间角色 - - @param request: ListWorkspaceRolesRequest - @return: ListWorkspaceRolesResponse - """ + @summary 列举工作空间角色 + + @param request: ListWorkspaceRolesRequest + @return: ListWorkspaceRolesResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_workspace_roles_with_options(workspace_id, request, headers, runtime) @@ -10724,11 +11449,11 @@ async def list_workspace_roles_async( request: aiwork_space_20210204_models.ListWorkspaceRolesRequest, ) -> aiwork_space_20210204_models.ListWorkspaceRolesResponse: """ - @summary 列举工作空间角色 - - @param request: ListWorkspaceRolesRequest - @return: ListWorkspaceRolesResponse - """ + @summary 列举工作空间角色 + + @param request: ListWorkspaceRolesRequest + @return: ListWorkspaceRolesResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_workspace_roles_with_options_async(workspace_id, request, headers, runtime) @@ -10741,13 +11466,13 @@ def list_workspace_users_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListWorkspaceUsersResponse: """ - @summary 列出工作空间的可变为成员的用户 - - @param request: ListWorkspaceUsersRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListWorkspaceUsersResponse - """ + @summary 列出工作空间的可变为成员的用户 + + @param request: ListWorkspaceUsersRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListWorkspaceUsersResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.user_name): @@ -10780,13 +11505,13 @@ async def list_workspace_users_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListWorkspaceUsersResponse: """ - @summary 列出工作空间的可变为成员的用户 - - @param request: ListWorkspaceUsersRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListWorkspaceUsersResponse - """ + @summary 列出工作空间的可变为成员的用户 + + @param request: ListWorkspaceUsersRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListWorkspaceUsersResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.user_name): @@ -10817,11 +11542,11 @@ def list_workspace_users( request: aiwork_space_20210204_models.ListWorkspaceUsersRequest, ) -> aiwork_space_20210204_models.ListWorkspaceUsersResponse: """ - @summary 列出工作空间的可变为成员的用户 - - @param request: ListWorkspaceUsersRequest - @return: ListWorkspaceUsersResponse - """ + @summary 列出工作空间的可变为成员的用户 + + @param request: ListWorkspaceUsersRequest + @return: ListWorkspaceUsersResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_workspace_users_with_options(workspace_id, request, headers, runtime) @@ -10832,11 +11557,11 @@ async def list_workspace_users_async( request: aiwork_space_20210204_models.ListWorkspaceUsersRequest, ) -> aiwork_space_20210204_models.ListWorkspaceUsersResponse: """ - @summary 列出工作空间的可变为成员的用户 - - @param request: ListWorkspaceUsersRequest - @return: ListWorkspaceUsersResponse - """ + @summary 列出工作空间的可变为成员的用户 + + @param request: ListWorkspaceUsersRequest + @return: ListWorkspaceUsersResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_workspace_users_with_options_async(workspace_id, request, headers, runtime) @@ -10848,13 +11573,13 @@ def list_workspaces_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListWorkspacesResponse: """ - @summary 获得工作空间列表 - - @param request: ListWorkspacesRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListWorkspacesResponse - """ + @summary 获得工作空间列表 + + @param request: ListWorkspacesRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListWorkspacesResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.fields): @@ -10906,13 +11631,13 @@ async def list_workspaces_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.ListWorkspacesResponse: """ - @summary 获得工作空间列表 - - @param request: ListWorkspacesRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: ListWorkspacesResponse - """ + @summary 获得工作空间列表 + + @param request: ListWorkspacesRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: ListWorkspacesResponse + """ UtilClient.validate_model(request) query = {} if not UtilClient.is_unset(request.fields): @@ -10962,11 +11687,11 @@ def list_workspaces( request: aiwork_space_20210204_models.ListWorkspacesRequest, ) -> aiwork_space_20210204_models.ListWorkspacesResponse: """ - @summary 获得工作空间列表 - - @param request: ListWorkspacesRequest - @return: ListWorkspacesResponse - """ + @summary 获得工作空间列表 + + @param request: ListWorkspacesRequest + @return: ListWorkspacesResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.list_workspaces_with_options(request, headers, runtime) @@ -10976,11 +11701,11 @@ async def list_workspaces_async( request: aiwork_space_20210204_models.ListWorkspacesRequest, ) -> aiwork_space_20210204_models.ListWorkspacesResponse: """ - @summary 获得工作空间列表 - - @param request: ListWorkspacesRequest - @return: ListWorkspacesResponse - """ + @summary 获得工作空间列表 + + @param request: ListWorkspacesRequest + @return: ListWorkspacesResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.list_workspaces_with_options_async(request, headers, runtime) @@ -10992,13 +11717,13 @@ def migrate_datasets_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.MigrateDatasetsResponse: """ - @summary 迁移数据集 - - @param request: MigrateDatasetsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: MigrateDatasetsResponse - """ + @summary 迁移数据集 + + @param request: MigrateDatasetsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: MigrateDatasetsResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.count): @@ -11038,13 +11763,13 @@ async def migrate_datasets_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.MigrateDatasetsResponse: """ - @summary 迁移数据集 - - @param request: MigrateDatasetsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: MigrateDatasetsResponse - """ + @summary 迁移数据集 + + @param request: MigrateDatasetsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: MigrateDatasetsResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.count): @@ -11082,11 +11807,11 @@ def migrate_datasets( request: aiwork_space_20210204_models.MigrateDatasetsRequest, ) -> aiwork_space_20210204_models.MigrateDatasetsResponse: """ - @summary 迁移数据集 - - @param request: MigrateDatasetsRequest - @return: MigrateDatasetsResponse - """ + @summary 迁移数据集 + + @param request: MigrateDatasetsRequest + @return: MigrateDatasetsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.migrate_datasets_with_options(request, headers, runtime) @@ -11096,11 +11821,11 @@ async def migrate_datasets_async( request: aiwork_space_20210204_models.MigrateDatasetsRequest, ) -> aiwork_space_20210204_models.MigrateDatasetsResponse: """ - @summary 迁移数据集 - - @param request: MigrateDatasetsRequest - @return: MigrateDatasetsResponse - """ + @summary 迁移数据集 + + @param request: MigrateDatasetsRequest + @return: MigrateDatasetsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.migrate_datasets_with_options_async(request, headers, runtime) @@ -11112,12 +11837,12 @@ def publish_code_source_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.PublishCodeSourceResponse: """ - @summary 发布一个代码源配置为本工作空间下所有人可见 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: PublishCodeSourceResponse - """ + @summary 发布一个代码源配置为本工作空间下所有人可见 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: PublishCodeSourceResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -11144,12 +11869,12 @@ async def publish_code_source_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.PublishCodeSourceResponse: """ - @summary 发布一个代码源配置为本工作空间下所有人可见 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: PublishCodeSourceResponse - """ + @summary 发布一个代码源配置为本工作空间下所有人可见 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: PublishCodeSourceResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -11174,10 +11899,10 @@ def publish_code_source( code_source_id: str, ) -> aiwork_space_20210204_models.PublishCodeSourceResponse: """ - @summary 发布一个代码源配置为本工作空间下所有人可见 - - @return: PublishCodeSourceResponse - """ + @summary 发布一个代码源配置为本工作空间下所有人可见 + + @return: PublishCodeSourceResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.publish_code_source_with_options(code_source_id, headers, runtime) @@ -11187,10 +11912,10 @@ async def publish_code_source_async( code_source_id: str, ) -> aiwork_space_20210204_models.PublishCodeSourceResponse: """ - @summary 发布一个代码源配置为本工作空间下所有人可见 - - @return: PublishCodeSourceResponse - """ + @summary 发布一个代码源配置为本工作空间下所有人可见 + + @return: PublishCodeSourceResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.publish_code_source_with_options_async(code_source_id, headers, runtime) @@ -11202,12 +11927,12 @@ def publish_dataset_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.PublishDatasetResponse: """ - @summary 更新数据集 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: PublishDatasetResponse - """ + @summary 更新数据集 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: PublishDatasetResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -11234,12 +11959,12 @@ async def publish_dataset_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.PublishDatasetResponse: """ - @summary 更新数据集 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: PublishDatasetResponse - """ + @summary 更新数据集 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: PublishDatasetResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -11264,10 +11989,10 @@ def publish_dataset( dataset_id: str, ) -> aiwork_space_20210204_models.PublishDatasetResponse: """ - @summary 更新数据集 - - @return: PublishDatasetResponse - """ + @summary 更新数据集 + + @return: PublishDatasetResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.publish_dataset_with_options(dataset_id, headers, runtime) @@ -11277,10 +12002,10 @@ async def publish_dataset_async( dataset_id: str, ) -> aiwork_space_20210204_models.PublishDatasetResponse: """ - @summary 更新数据集 - - @return: PublishDatasetResponse - """ + @summary 更新数据集 + + @return: PublishDatasetResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.publish_dataset_with_options_async(dataset_id, headers, runtime) @@ -11292,12 +12017,12 @@ def publish_image_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.PublishImageResponse: """ - @summary 发布 Image - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: PublishImageResponse - """ + @summary 发布 Image + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: PublishImageResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -11324,12 +12049,12 @@ async def publish_image_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.PublishImageResponse: """ - @summary 发布 Image - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: PublishImageResponse - """ + @summary 发布 Image + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: PublishImageResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -11354,10 +12079,10 @@ def publish_image( image_id: str, ) -> aiwork_space_20210204_models.PublishImageResponse: """ - @summary 发布 Image - - @return: PublishImageResponse - """ + @summary 发布 Image + + @return: PublishImageResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.publish_image_with_options(image_id, headers, runtime) @@ -11367,27 +12092,151 @@ async def publish_image_async( image_id: str, ) -> aiwork_space_20210204_models.PublishImageResponse: """ - @summary 发布 Image - - @return: PublishImageResponse - """ + @summary 发布 Image + + @return: PublishImageResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.publish_image_with_options_async(image_id, headers, runtime) - def remove_image_with_options( + def register_lineage_with_options( self, - image_id: str, + request: aiwork_space_20210204_models.RegisterLineageRequest, headers: Dict[str, str], runtime: util_models.RuntimeOptions, - ) -> aiwork_space_20210204_models.RemoveImageResponse: + ) -> aiwork_space_20210204_models.RegisterLineageResponse: + """ + @summary 创建血缘 + + @param request: RegisterLineageRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: RegisterLineageResponse + """ + UtilClient.validate_model(request) + body = {} + if not UtilClient.is_unset(request.attributes): + body['Attributes'] = request.attributes + if not UtilClient.is_unset(request.input_entities): + body['InputEntities'] = request.input_entities + if not UtilClient.is_unset(request.name): + body['Name'] = request.name + if not UtilClient.is_unset(request.output_entities): + body['OutputEntities'] = request.output_entities + if not UtilClient.is_unset(request.qualified_name): + body['QualifiedName'] = request.qualified_name + if not UtilClient.is_unset(request.register_task_as_entity): + body['RegisterTaskAsEntity'] = request.register_task_as_entity + req = open_api_models.OpenApiRequest( + headers=headers, + body=OpenApiUtilClient.parse_to_map(body) + ) + params = open_api_models.Params( + action='RegisterLineage', + version='2021-02-04', + protocol='HTTPS', + pathname=f'/api/v1/lineages', + method='POST', + auth_type='AK', + style='ROA', + req_body_type='json', + body_type='json' + ) + return TeaCore.from_map( + aiwork_space_20210204_models.RegisterLineageResponse(), + self.call_api(params, req, runtime) + ) + + async def register_lineage_with_options_async( + self, + request: aiwork_space_20210204_models.RegisterLineageRequest, + headers: Dict[str, str], + runtime: util_models.RuntimeOptions, + ) -> aiwork_space_20210204_models.RegisterLineageResponse: """ - @summary 删除 Image - + @summary 创建血缘 + + @param request: RegisterLineageRequest @param headers: map @param runtime: runtime options for this request RuntimeOptions - @return: RemoveImageResponse + @return: RegisterLineageResponse + """ + UtilClient.validate_model(request) + body = {} + if not UtilClient.is_unset(request.attributes): + body['Attributes'] = request.attributes + if not UtilClient.is_unset(request.input_entities): + body['InputEntities'] = request.input_entities + if not UtilClient.is_unset(request.name): + body['Name'] = request.name + if not UtilClient.is_unset(request.output_entities): + body['OutputEntities'] = request.output_entities + if not UtilClient.is_unset(request.qualified_name): + body['QualifiedName'] = request.qualified_name + if not UtilClient.is_unset(request.register_task_as_entity): + body['RegisterTaskAsEntity'] = request.register_task_as_entity + req = open_api_models.OpenApiRequest( + headers=headers, + body=OpenApiUtilClient.parse_to_map(body) + ) + params = open_api_models.Params( + action='RegisterLineage', + version='2021-02-04', + protocol='HTTPS', + pathname=f'/api/v1/lineages', + method='POST', + auth_type='AK', + style='ROA', + req_body_type='json', + body_type='json' + ) + return TeaCore.from_map( + aiwork_space_20210204_models.RegisterLineageResponse(), + await self.call_api_async(params, req, runtime) + ) + + def register_lineage( + self, + request: aiwork_space_20210204_models.RegisterLineageRequest, + ) -> aiwork_space_20210204_models.RegisterLineageResponse: """ + @summary 创建血缘 + + @param request: RegisterLineageRequest + @return: RegisterLineageResponse + """ + runtime = util_models.RuntimeOptions() + headers = {} + return self.register_lineage_with_options(request, headers, runtime) + + async def register_lineage_async( + self, + request: aiwork_space_20210204_models.RegisterLineageRequest, + ) -> aiwork_space_20210204_models.RegisterLineageResponse: + """ + @summary 创建血缘 + + @param request: RegisterLineageRequest + @return: RegisterLineageResponse + """ + runtime = util_models.RuntimeOptions() + headers = {} + return await self.register_lineage_with_options_async(request, headers, runtime) + + def remove_image_with_options( + self, + image_id: str, + headers: Dict[str, str], + runtime: util_models.RuntimeOptions, + ) -> aiwork_space_20210204_models.RemoveImageResponse: + """ + @summary 删除 Image + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: RemoveImageResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -11414,12 +12263,12 @@ async def remove_image_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.RemoveImageResponse: """ - @summary 删除 Image - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: RemoveImageResponse - """ + @summary 删除 Image + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: RemoveImageResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -11444,10 +12293,10 @@ def remove_image( image_id: str, ) -> aiwork_space_20210204_models.RemoveImageResponse: """ - @summary 删除 Image - - @return: RemoveImageResponse - """ + @summary 删除 Image + + @return: RemoveImageResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.remove_image_with_options(image_id, headers, runtime) @@ -11457,10 +12306,10 @@ async def remove_image_async( image_id: str, ) -> aiwork_space_20210204_models.RemoveImageResponse: """ - @summary 删除 Image - - @return: RemoveImageResponse - """ + @summary 删除 Image + + @return: RemoveImageResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.remove_image_with_options_async(image_id, headers, runtime) @@ -11473,12 +12322,12 @@ def remove_image_labels_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.RemoveImageLabelsResponse: """ - @summary 删除 Image 的标签 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: RemoveImageLabelsResponse - """ + @summary 删除 Image 的标签 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: RemoveImageLabelsResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -11506,12 +12355,12 @@ async def remove_image_labels_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.RemoveImageLabelsResponse: """ - @summary 删除 Image 的标签 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: RemoveImageLabelsResponse - """ + @summary 删除 Image 的标签 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: RemoveImageLabelsResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -11537,10 +12386,10 @@ def remove_image_labels( label_key: str, ) -> aiwork_space_20210204_models.RemoveImageLabelsResponse: """ - @summary 删除 Image 的标签 - - @return: RemoveImageLabelsResponse - """ + @summary 删除 Image 的标签 + + @return: RemoveImageLabelsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.remove_image_labels_with_options(image_id, label_key, headers, runtime) @@ -11551,10 +12400,10 @@ async def remove_image_labels_async( label_key: str, ) -> aiwork_space_20210204_models.RemoveImageLabelsResponse: """ - @summary 删除 Image 的标签 - - @return: RemoveImageLabelsResponse - """ + @summary 删除 Image 的标签 + + @return: RemoveImageLabelsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.remove_image_labels_with_options_async(image_id, label_key, headers, runtime) @@ -11568,12 +12417,12 @@ def remove_member_role_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.RemoveMemberRoleResponse: """ - @summary 删除成员角色 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: RemoveMemberRoleResponse - """ + @summary 删除成员角色 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: RemoveMemberRoleResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -11602,12 +12451,12 @@ async def remove_member_role_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.RemoveMemberRoleResponse: """ - @summary 删除成员角色 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: RemoveMemberRoleResponse - """ + @summary 删除成员角色 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: RemoveMemberRoleResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -11634,10 +12483,10 @@ def remove_member_role( role_name: str, ) -> aiwork_space_20210204_models.RemoveMemberRoleResponse: """ - @summary 删除成员角色 - - @return: RemoveMemberRoleResponse - """ + @summary 删除成员角色 + + @return: RemoveMemberRoleResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.remove_member_role_with_options(workspace_id, member_id, role_name, headers, runtime) @@ -11649,10 +12498,10 @@ async def remove_member_role_async( role_name: str, ) -> aiwork_space_20210204_models.RemoveMemberRoleResponse: """ - @summary 删除成员角色 - - @return: RemoveMemberRoleResponse - """ + @summary 删除成员角色 + + @return: RemoveMemberRoleResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.remove_member_role_with_options_async(workspace_id, member_id, role_name, headers, runtime) @@ -11665,12 +12514,12 @@ def remove_workspace_quota_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.RemoveWorkspaceQuotaResponse: """ - @summary 移除资源实例配额 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: RemoveWorkspaceQuotaResponse - """ + @summary 移除资源实例配额 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: RemoveWorkspaceQuotaResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -11698,12 +12547,12 @@ async def remove_workspace_quota_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.RemoveWorkspaceQuotaResponse: """ - @summary 移除资源实例配额 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: RemoveWorkspaceQuotaResponse - """ + @summary 移除资源实例配额 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: RemoveWorkspaceQuotaResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -11729,10 +12578,10 @@ def remove_workspace_quota( quota_id: str, ) -> aiwork_space_20210204_models.RemoveWorkspaceQuotaResponse: """ - @summary 移除资源实例配额 - - @return: RemoveWorkspaceQuotaResponse - """ + @summary 移除资源实例配额 + + @return: RemoveWorkspaceQuotaResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.remove_workspace_quota_with_options(workspace_id, quota_id, headers, runtime) @@ -11743,10 +12592,10 @@ async def remove_workspace_quota_async( quota_id: str, ) -> aiwork_space_20210204_models.RemoveWorkspaceQuotaResponse: """ - @summary 移除资源实例配额 - - @return: RemoveWorkspaceQuotaResponse - """ + @summary 移除资源实例配额 + + @return: RemoveWorkspaceQuotaResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.remove_workspace_quota_with_options_async(workspace_id, quota_id, headers, runtime) @@ -11759,13 +12608,13 @@ def set_experiment_labels_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.SetExperimentLabelsResponse: """ - @summary 更新实验标签 - - @param request: SetExperimentLabelsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: SetExperimentLabelsResponse - """ + @summary 更新实验标签 + + @param request: SetExperimentLabelsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: SetExperimentLabelsResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.labels): @@ -11798,13 +12647,13 @@ async def set_experiment_labels_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.SetExperimentLabelsResponse: """ - @summary 更新实验标签 - - @param request: SetExperimentLabelsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: SetExperimentLabelsResponse - """ + @summary 更新实验标签 + + @param request: SetExperimentLabelsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: SetExperimentLabelsResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.labels): @@ -11835,11 +12684,11 @@ def set_experiment_labels( request: aiwork_space_20210204_models.SetExperimentLabelsRequest, ) -> aiwork_space_20210204_models.SetExperimentLabelsResponse: """ - @summary 更新实验标签 - - @param request: SetExperimentLabelsRequest - @return: SetExperimentLabelsResponse - """ + @summary 更新实验标签 + + @param request: SetExperimentLabelsRequest + @return: SetExperimentLabelsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.set_experiment_labels_with_options(experiment_id, request, headers, runtime) @@ -11850,11 +12699,11 @@ async def set_experiment_labels_async( request: aiwork_space_20210204_models.SetExperimentLabelsRequest, ) -> aiwork_space_20210204_models.SetExperimentLabelsResponse: """ - @summary 更新实验标签 - - @param request: SetExperimentLabelsRequest - @return: SetExperimentLabelsResponse - """ + @summary 更新实验标签 + + @param request: SetExperimentLabelsRequest + @return: SetExperimentLabelsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.set_experiment_labels_with_options_async(experiment_id, request, headers, runtime) @@ -11867,13 +12716,13 @@ def set_trial_labels_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.SetTrialLabelsResponse: """ - @summary 更新Trial标签 - - @param request: SetTrialLabelsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: SetTrialLabelsResponse - """ + @summary 更新Trial标签 + + @param request: SetTrialLabelsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: SetTrialLabelsResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.labels): @@ -11906,13 +12755,13 @@ async def set_trial_labels_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.SetTrialLabelsResponse: """ - @summary 更新Trial标签 - - @param request: SetTrialLabelsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: SetTrialLabelsResponse - """ + @summary 更新Trial标签 + + @param request: SetTrialLabelsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: SetTrialLabelsResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.labels): @@ -11943,11 +12792,11 @@ def set_trial_labels( request: aiwork_space_20210204_models.SetTrialLabelsRequest, ) -> aiwork_space_20210204_models.SetTrialLabelsResponse: """ - @summary 更新Trial标签 - - @param request: SetTrialLabelsRequest - @return: SetTrialLabelsResponse - """ + @summary 更新Trial标签 + + @param request: SetTrialLabelsRequest + @return: SetTrialLabelsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.set_trial_labels_with_options(trial_id, request, headers, runtime) @@ -11958,11 +12807,11 @@ async def set_trial_labels_async( request: aiwork_space_20210204_models.SetTrialLabelsRequest, ) -> aiwork_space_20210204_models.SetTrialLabelsResponse: """ - @summary 更新Trial标签 - - @param request: SetTrialLabelsRequest - @return: SetTrialLabelsResponse - """ + @summary 更新Trial标签 + + @param request: SetTrialLabelsRequest + @return: SetTrialLabelsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.set_trial_labels_with_options_async(trial_id, request, headers, runtime) @@ -11974,13 +12823,13 @@ def set_user_configs_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.SetUserConfigsResponse: """ - @summary 更新用户配置 - - @param request: SetUserConfigsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: SetUserConfigsResponse - """ + @summary 更新用户配置 + + @param request: SetUserConfigsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: SetUserConfigsResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.configs): @@ -12012,13 +12861,13 @@ async def set_user_configs_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.SetUserConfigsResponse: """ - @summary 更新用户配置 - - @param request: SetUserConfigsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: SetUserConfigsResponse - """ + @summary 更新用户配置 + + @param request: SetUserConfigsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: SetUserConfigsResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.configs): @@ -12048,11 +12897,11 @@ def set_user_configs( request: aiwork_space_20210204_models.SetUserConfigsRequest, ) -> aiwork_space_20210204_models.SetUserConfigsResponse: """ - @summary 更新用户配置 - - @param request: SetUserConfigsRequest - @return: SetUserConfigsResponse - """ + @summary 更新用户配置 + + @param request: SetUserConfigsRequest + @return: SetUserConfigsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.set_user_configs_with_options(request, headers, runtime) @@ -12062,11 +12911,11 @@ async def set_user_configs_async( request: aiwork_space_20210204_models.SetUserConfigsRequest, ) -> aiwork_space_20210204_models.SetUserConfigsResponse: """ - @summary 更新用户配置 - - @param request: SetUserConfigsRequest - @return: SetUserConfigsResponse - """ + @summary 更新用户配置 + + @param request: SetUserConfigsRequest + @return: SetUserConfigsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.set_user_configs_with_options_async(request, headers, runtime) @@ -12077,12 +12926,12 @@ def sync_users_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.SyncUsersResponse: """ - @summary 同步用户信息 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: SyncUsersResponse - """ + @summary 同步用户信息 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: SyncUsersResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -12108,12 +12957,12 @@ async def sync_users_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.SyncUsersResponse: """ - @summary 同步用户信息 - - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: SyncUsersResponse - """ + @summary 同步用户信息 + + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: SyncUsersResponse + """ req = open_api_models.OpenApiRequest( headers=headers ) @@ -12135,20 +12984,20 @@ async def sync_users_with_options_async( def sync_users(self) -> aiwork_space_20210204_models.SyncUsersResponse: """ - @summary 同步用户信息 - - @return: SyncUsersResponse - """ + @summary 同步用户信息 + + @return: SyncUsersResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.sync_users_with_options(headers, runtime) async def sync_users_async(self) -> aiwork_space_20210204_models.SyncUsersResponse: """ - @summary 同步用户信息 - - @return: SyncUsersResponse - """ + @summary 同步用户信息 + + @return: SyncUsersResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.sync_users_with_options_async(headers, runtime) @@ -12161,13 +13010,13 @@ def update_configs_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.UpdateConfigsResponse: """ - @summary 更新配置 - - @param request: UpdateConfigsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: UpdateConfigsResponse - """ + @summary 更新配置 + + @param request: UpdateConfigsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: UpdateConfigsResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.configs): @@ -12200,13 +13049,13 @@ async def update_configs_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.UpdateConfigsResponse: """ - @summary 更新配置 - - @param request: UpdateConfigsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: UpdateConfigsResponse - """ + @summary 更新配置 + + @param request: UpdateConfigsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: UpdateConfigsResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.configs): @@ -12237,11 +13086,11 @@ def update_configs( request: aiwork_space_20210204_models.UpdateConfigsRequest, ) -> aiwork_space_20210204_models.UpdateConfigsResponse: """ - @summary 更新配置 - - @param request: UpdateConfigsRequest - @return: UpdateConfigsResponse - """ + @summary 更新配置 + + @param request: UpdateConfigsRequest + @return: UpdateConfigsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.update_configs_with_options(workspace_id, request, headers, runtime) @@ -12252,11 +13101,11 @@ async def update_configs_async( request: aiwork_space_20210204_models.UpdateConfigsRequest, ) -> aiwork_space_20210204_models.UpdateConfigsResponse: """ - @summary 更新配置 - - @param request: UpdateConfigsRequest - @return: UpdateConfigsResponse - """ + @summary 更新配置 + + @param request: UpdateConfigsRequest + @return: UpdateConfigsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.update_configs_with_options_async(workspace_id, request, headers, runtime) @@ -12269,13 +13118,13 @@ def update_dataset_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.UpdateDatasetResponse: """ - @summary 更新数据集 - - @param request: UpdateDatasetRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: UpdateDatasetResponse - """ + @summary 更新数据集 + + @param request: UpdateDatasetRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: UpdateDatasetResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.description): @@ -12312,13 +13161,13 @@ async def update_dataset_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.UpdateDatasetResponse: """ - @summary 更新数据集 - - @param request: UpdateDatasetRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: UpdateDatasetResponse - """ + @summary 更新数据集 + + @param request: UpdateDatasetRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: UpdateDatasetResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.description): @@ -12353,11 +13202,11 @@ def update_dataset( request: aiwork_space_20210204_models.UpdateDatasetRequest, ) -> aiwork_space_20210204_models.UpdateDatasetResponse: """ - @summary 更新数据集 - - @param request: UpdateDatasetRequest - @return: UpdateDatasetResponse - """ + @summary 更新数据集 + + @param request: UpdateDatasetRequest + @return: UpdateDatasetResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.update_dataset_with_options(dataset_id, request, headers, runtime) @@ -12368,15 +13217,139 @@ async def update_dataset_async( request: aiwork_space_20210204_models.UpdateDatasetRequest, ) -> aiwork_space_20210204_models.UpdateDatasetResponse: """ - @summary 更新数据集 - - @param request: UpdateDatasetRequest - @return: UpdateDatasetResponse - """ + @summary 更新数据集 + + @param request: UpdateDatasetRequest + @return: UpdateDatasetResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.update_dataset_with_options_async(dataset_id, request, headers, runtime) + def update_dataset_version_with_options( + self, + dataset_id: str, + version_name: str, + request: aiwork_space_20210204_models.UpdateDatasetVersionRequest, + headers: Dict[str, str], + runtime: util_models.RuntimeOptions, + ) -> aiwork_space_20210204_models.UpdateDatasetVersionResponse: + """ + @summary 更新指定版本的数据集信息 + + @param request: UpdateDatasetVersionRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: UpdateDatasetVersionResponse + """ + UtilClient.validate_model(request) + body = {} + if not UtilClient.is_unset(request.data_count): + body['DataCount'] = request.data_count + if not UtilClient.is_unset(request.data_size): + body['DataSize'] = request.data_size + if not UtilClient.is_unset(request.description): + body['Description'] = request.description + if not UtilClient.is_unset(request.options): + body['Options'] = request.options + req = open_api_models.OpenApiRequest( + headers=headers, + body=OpenApiUtilClient.parse_to_map(body) + ) + params = open_api_models.Params( + action='UpdateDatasetVersion', + version='2021-02-04', + protocol='HTTPS', + pathname=f'/api/v1/datasets/{OpenApiUtilClient.get_encode_param(dataset_id)}/versions/{OpenApiUtilClient.get_encode_param(version_name)}', + method='PUT', + auth_type='AK', + style='ROA', + req_body_type='json', + body_type='json' + ) + return TeaCore.from_map( + aiwork_space_20210204_models.UpdateDatasetVersionResponse(), + self.call_api(params, req, runtime) + ) + + async def update_dataset_version_with_options_async( + self, + dataset_id: str, + version_name: str, + request: aiwork_space_20210204_models.UpdateDatasetVersionRequest, + headers: Dict[str, str], + runtime: util_models.RuntimeOptions, + ) -> aiwork_space_20210204_models.UpdateDatasetVersionResponse: + """ + @summary 更新指定版本的数据集信息 + + @param request: UpdateDatasetVersionRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: UpdateDatasetVersionResponse + """ + UtilClient.validate_model(request) + body = {} + if not UtilClient.is_unset(request.data_count): + body['DataCount'] = request.data_count + if not UtilClient.is_unset(request.data_size): + body['DataSize'] = request.data_size + if not UtilClient.is_unset(request.description): + body['Description'] = request.description + if not UtilClient.is_unset(request.options): + body['Options'] = request.options + req = open_api_models.OpenApiRequest( + headers=headers, + body=OpenApiUtilClient.parse_to_map(body) + ) + params = open_api_models.Params( + action='UpdateDatasetVersion', + version='2021-02-04', + protocol='HTTPS', + pathname=f'/api/v1/datasets/{OpenApiUtilClient.get_encode_param(dataset_id)}/versions/{OpenApiUtilClient.get_encode_param(version_name)}', + method='PUT', + auth_type='AK', + style='ROA', + req_body_type='json', + body_type='json' + ) + return TeaCore.from_map( + aiwork_space_20210204_models.UpdateDatasetVersionResponse(), + await self.call_api_async(params, req, runtime) + ) + + def update_dataset_version( + self, + dataset_id: str, + version_name: str, + request: aiwork_space_20210204_models.UpdateDatasetVersionRequest, + ) -> aiwork_space_20210204_models.UpdateDatasetVersionResponse: + """ + @summary 更新指定版本的数据集信息 + + @param request: UpdateDatasetVersionRequest + @return: UpdateDatasetVersionResponse + """ + runtime = util_models.RuntimeOptions() + headers = {} + return self.update_dataset_version_with_options(dataset_id, version_name, request, headers, runtime) + + async def update_dataset_version_async( + self, + dataset_id: str, + version_name: str, + request: aiwork_space_20210204_models.UpdateDatasetVersionRequest, + ) -> aiwork_space_20210204_models.UpdateDatasetVersionResponse: + """ + @summary 更新指定版本的数据集信息 + + @param request: UpdateDatasetVersionRequest + @return: UpdateDatasetVersionResponse + """ + runtime = util_models.RuntimeOptions() + headers = {} + return await self.update_dataset_version_with_options_async(dataset_id, version_name, request, headers, runtime) + def update_default_workspace_with_options( self, request: aiwork_space_20210204_models.UpdateDefaultWorkspaceRequest, @@ -12384,13 +13357,13 @@ def update_default_workspace_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.UpdateDefaultWorkspaceResponse: """ - @summary 更新默认工作空间 - - @param request: UpdateDefaultWorkspaceRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: UpdateDefaultWorkspaceResponse - """ + @summary 更新默认工作空间 + + @param request: UpdateDefaultWorkspaceRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: UpdateDefaultWorkspaceResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.workspace_id): @@ -12422,13 +13395,13 @@ async def update_default_workspace_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.UpdateDefaultWorkspaceResponse: """ - @summary 更新默认工作空间 - - @param request: UpdateDefaultWorkspaceRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: UpdateDefaultWorkspaceResponse - """ + @summary 更新默认工作空间 + + @param request: UpdateDefaultWorkspaceRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: UpdateDefaultWorkspaceResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.workspace_id): @@ -12458,11 +13431,11 @@ def update_default_workspace( request: aiwork_space_20210204_models.UpdateDefaultWorkspaceRequest, ) -> aiwork_space_20210204_models.UpdateDefaultWorkspaceResponse: """ - @summary 更新默认工作空间 - - @param request: UpdateDefaultWorkspaceRequest - @return: UpdateDefaultWorkspaceResponse - """ + @summary 更新默认工作空间 + + @param request: UpdateDefaultWorkspaceRequest + @return: UpdateDefaultWorkspaceResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.update_default_workspace_with_options(request, headers, runtime) @@ -12472,11 +13445,11 @@ async def update_default_workspace_async( request: aiwork_space_20210204_models.UpdateDefaultWorkspaceRequest, ) -> aiwork_space_20210204_models.UpdateDefaultWorkspaceResponse: """ - @summary 更新默认工作空间 - - @param request: UpdateDefaultWorkspaceRequest - @return: UpdateDefaultWorkspaceResponse - """ + @summary 更新默认工作空间 + + @param request: UpdateDefaultWorkspaceRequest + @return: UpdateDefaultWorkspaceResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.update_default_workspace_with_options_async(request, headers, runtime) @@ -12489,13 +13462,13 @@ def update_experiment_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.UpdateExperimentResponse: """ - @summary 更新实验 - - @param request: UpdateExperimentRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: UpdateExperimentResponse - """ + @summary 更新实验 + + @param request: UpdateExperimentRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: UpdateExperimentResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.accessibility): @@ -12530,13 +13503,13 @@ async def update_experiment_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.UpdateExperimentResponse: """ - @summary 更新实验 - - @param request: UpdateExperimentRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: UpdateExperimentResponse - """ + @summary 更新实验 + + @param request: UpdateExperimentRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: UpdateExperimentResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.accessibility): @@ -12569,11 +13542,11 @@ def update_experiment( request: aiwork_space_20210204_models.UpdateExperimentRequest, ) -> aiwork_space_20210204_models.UpdateExperimentResponse: """ - @summary 更新实验 - - @param request: UpdateExperimentRequest - @return: UpdateExperimentResponse - """ + @summary 更新实验 + + @param request: UpdateExperimentRequest + @return: UpdateExperimentResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.update_experiment_with_options(experiment_id, request, headers, runtime) @@ -12584,11 +13557,11 @@ async def update_experiment_async( request: aiwork_space_20210204_models.UpdateExperimentRequest, ) -> aiwork_space_20210204_models.UpdateExperimentResponse: """ - @summary 更新实验 - - @param request: UpdateExperimentRequest - @return: UpdateExperimentResponse - """ + @summary 更新实验 + + @param request: UpdateExperimentRequest + @return: UpdateExperimentResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.update_experiment_with_options_async(experiment_id, request, headers, runtime) @@ -12601,13 +13574,13 @@ def update_model_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.UpdateModelResponse: """ - @summary 更新模型 - - @param request: UpdateModelRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: UpdateModelResponse - """ + @summary 更新模型 + + @param request: UpdateModelRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: UpdateModelResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.accessibility): @@ -12658,13 +13631,13 @@ async def update_model_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.UpdateModelResponse: """ - @summary 更新模型 - - @param request: UpdateModelRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: UpdateModelResponse - """ + @summary 更新模型 + + @param request: UpdateModelRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: UpdateModelResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.accessibility): @@ -12713,11 +13686,11 @@ def update_model( request: aiwork_space_20210204_models.UpdateModelRequest, ) -> aiwork_space_20210204_models.UpdateModelResponse: """ - @summary 更新模型 - - @param request: UpdateModelRequest - @return: UpdateModelResponse - """ + @summary 更新模型 + + @param request: UpdateModelRequest + @return: UpdateModelResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.update_model_with_options(model_id, request, headers, runtime) @@ -12728,11 +13701,11 @@ async def update_model_async( request: aiwork_space_20210204_models.UpdateModelRequest, ) -> aiwork_space_20210204_models.UpdateModelResponse: """ - @summary 更新模型 - - @param request: UpdateModelRequest - @return: UpdateModelResponse - """ + @summary 更新模型 + + @param request: UpdateModelRequest + @return: UpdateModelResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.update_model_with_options_async(model_id, request, headers, runtime) @@ -12744,13 +13717,13 @@ def update_model_domains_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.UpdateModelDomainsResponse: """ - @summary 更新模型领域 - - @param request: UpdateModelDomainsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: UpdateModelDomainsResponse - """ + @summary 更新模型领域 + + @param request: UpdateModelDomainsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: UpdateModelDomainsResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.model_domains): @@ -12782,13 +13755,13 @@ async def update_model_domains_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.UpdateModelDomainsResponse: """ - @summary 更新模型领域 - - @param request: UpdateModelDomainsRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: UpdateModelDomainsResponse - """ + @summary 更新模型领域 + + @param request: UpdateModelDomainsRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: UpdateModelDomainsResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.model_domains): @@ -12818,11 +13791,11 @@ def update_model_domains( request: aiwork_space_20210204_models.UpdateModelDomainsRequest, ) -> aiwork_space_20210204_models.UpdateModelDomainsResponse: """ - @summary 更新模型领域 - - @param request: UpdateModelDomainsRequest - @return: UpdateModelDomainsResponse - """ + @summary 更新模型领域 + + @param request: UpdateModelDomainsRequest + @return: UpdateModelDomainsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.update_model_domains_with_options(request, headers, runtime) @@ -12832,11 +13805,11 @@ async def update_model_domains_async( request: aiwork_space_20210204_models.UpdateModelDomainsRequest, ) -> aiwork_space_20210204_models.UpdateModelDomainsResponse: """ - @summary 更新模型领域 - - @param request: UpdateModelDomainsRequest - @return: UpdateModelDomainsResponse - """ + @summary 更新模型领域 + + @param request: UpdateModelDomainsRequest + @return: UpdateModelDomainsResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.update_model_domains_with_options_async(request, headers, runtime) @@ -12850,13 +13823,13 @@ def update_model_version_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.UpdateModelVersionResponse: """ - @summary 更新模型版本 - - @param request: UpdateModelVersionRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: UpdateModelVersionResponse - """ + @summary 更新模型版本 + + @param request: UpdateModelVersionRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: UpdateModelVersionResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.approval_status): @@ -12910,13 +13883,13 @@ async def update_model_version_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.UpdateModelVersionResponse: """ - @summary 更新模型版本 - - @param request: UpdateModelVersionRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: UpdateModelVersionResponse - """ + @summary 更新模型版本 + + @param request: UpdateModelVersionRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: UpdateModelVersionResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.approval_status): @@ -12968,11 +13941,11 @@ def update_model_version( request: aiwork_space_20210204_models.UpdateModelVersionRequest, ) -> aiwork_space_20210204_models.UpdateModelVersionResponse: """ - @summary 更新模型版本 - - @param request: UpdateModelVersionRequest - @return: UpdateModelVersionResponse - """ + @summary 更新模型版本 + + @param request: UpdateModelVersionRequest + @return: UpdateModelVersionResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.update_model_version_with_options(model_id, version_name, request, headers, runtime) @@ -12984,11 +13957,11 @@ async def update_model_version_async( request: aiwork_space_20210204_models.UpdateModelVersionRequest, ) -> aiwork_space_20210204_models.UpdateModelVersionResponse: """ - @summary 更新模型版本 - - @param request: UpdateModelVersionRequest - @return: UpdateModelVersionResponse - """ + @summary 更新模型版本 + + @param request: UpdateModelVersionRequest + @return: UpdateModelVersionResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.update_model_version_with_options_async(model_id, version_name, request, headers, runtime) @@ -13001,13 +13974,13 @@ def update_service_template_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.UpdateServiceTemplateResponse: """ - @summary 更新服务模版 - - @param request: UpdateServiceTemplateRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: UpdateServiceTemplateResponse - """ + @summary 更新服务模版 + + @param request: UpdateServiceTemplateRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: UpdateServiceTemplateResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.inference_spec): @@ -13048,13 +14021,13 @@ async def update_service_template_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.UpdateServiceTemplateResponse: """ - @summary 更新服务模版 - - @param request: UpdateServiceTemplateRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: UpdateServiceTemplateResponse - """ + @summary 更新服务模版 + + @param request: UpdateServiceTemplateRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: UpdateServiceTemplateResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.inference_spec): @@ -13093,11 +14066,11 @@ def update_service_template( request: aiwork_space_20210204_models.UpdateServiceTemplateRequest, ) -> aiwork_space_20210204_models.UpdateServiceTemplateResponse: """ - @summary 更新服务模版 - - @param request: UpdateServiceTemplateRequest - @return: UpdateServiceTemplateResponse - """ + @summary 更新服务模版 + + @param request: UpdateServiceTemplateRequest + @return: UpdateServiceTemplateResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.update_service_template_with_options(service_template_id, request, headers, runtime) @@ -13108,11 +14081,11 @@ async def update_service_template_async( request: aiwork_space_20210204_models.UpdateServiceTemplateRequest, ) -> aiwork_space_20210204_models.UpdateServiceTemplateResponse: """ - @summary 更新服务模版 - - @param request: UpdateServiceTemplateRequest - @return: UpdateServiceTemplateResponse - """ + @summary 更新服务模版 + + @param request: UpdateServiceTemplateRequest + @return: UpdateServiceTemplateResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.update_service_template_with_options_async(service_template_id, request, headers, runtime) @@ -13125,13 +14098,13 @@ def update_workspace_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.UpdateWorkspaceResponse: """ - @summary 更新工作空间 - - @param request: UpdateWorkspaceRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: UpdateWorkspaceResponse - """ + @summary 更新工作空间 + + @param request: UpdateWorkspaceRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: UpdateWorkspaceResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.description): @@ -13166,13 +14139,13 @@ async def update_workspace_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.UpdateWorkspaceResponse: """ - @summary 更新工作空间 - - @param request: UpdateWorkspaceRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: UpdateWorkspaceResponse - """ + @summary 更新工作空间 + + @param request: UpdateWorkspaceRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: UpdateWorkspaceResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.description): @@ -13205,11 +14178,11 @@ def update_workspace( request: aiwork_space_20210204_models.UpdateWorkspaceRequest, ) -> aiwork_space_20210204_models.UpdateWorkspaceResponse: """ - @summary 更新工作空间 - - @param request: UpdateWorkspaceRequest - @return: UpdateWorkspaceResponse - """ + @summary 更新工作空间 + + @param request: UpdateWorkspaceRequest + @return: UpdateWorkspaceResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.update_workspace_with_options(workspace_id, request, headers, runtime) @@ -13220,11 +14193,11 @@ async def update_workspace_async( request: aiwork_space_20210204_models.UpdateWorkspaceRequest, ) -> aiwork_space_20210204_models.UpdateWorkspaceResponse: """ - @summary 更新工作空间 - - @param request: UpdateWorkspaceRequest - @return: UpdateWorkspaceResponse - """ + @summary 更新工作空间 + + @param request: UpdateWorkspaceRequest + @return: UpdateWorkspaceResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.update_workspace_with_options_async(workspace_id, request, headers, runtime) @@ -13237,13 +14210,13 @@ def update_workspace_resource_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.UpdateWorkspaceResourceResponse: """ - @summary 更新工作空间资源 - - @param request: UpdateWorkspaceResourceRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: UpdateWorkspaceResourceResponse - """ + @summary 更新工作空间资源 + + @param request: UpdateWorkspaceResourceRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: UpdateWorkspaceResourceResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.group_name): @@ -13288,13 +14261,13 @@ async def update_workspace_resource_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.UpdateWorkspaceResourceResponse: """ - @summary 更新工作空间资源 - - @param request: UpdateWorkspaceResourceRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: UpdateWorkspaceResourceResponse - """ + @summary 更新工作空间资源 + + @param request: UpdateWorkspaceResourceRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: UpdateWorkspaceResourceResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.group_name): @@ -13337,11 +14310,11 @@ def update_workspace_resource( request: aiwork_space_20210204_models.UpdateWorkspaceResourceRequest, ) -> aiwork_space_20210204_models.UpdateWorkspaceResourceResponse: """ - @summary 更新工作空间资源 - - @param request: UpdateWorkspaceResourceRequest - @return: UpdateWorkspaceResourceResponse - """ + @summary 更新工作空间资源 + + @param request: UpdateWorkspaceResourceRequest + @return: UpdateWorkspaceResourceResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.update_workspace_resource_with_options(workspace_id, request, headers, runtime) @@ -13352,11 +14325,11 @@ async def update_workspace_resource_async( request: aiwork_space_20210204_models.UpdateWorkspaceResourceRequest, ) -> aiwork_space_20210204_models.UpdateWorkspaceResourceResponse: """ - @summary 更新工作空间资源 - - @param request: UpdateWorkspaceResourceRequest - @return: UpdateWorkspaceResourceResponse - """ + @summary 更新工作空间资源 + + @param request: UpdateWorkspaceResourceRequest + @return: UpdateWorkspaceResourceResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.update_workspace_resource_with_options_async(workspace_id, request, headers, runtime) @@ -13370,13 +14343,13 @@ def update_workspace_role_with_options( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.UpdateWorkspaceRoleResponse: """ - @summary 更新工作空间角色 - - @param request: UpdateWorkspaceRoleRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: UpdateWorkspaceRoleResponse - """ + @summary 更新工作空间角色 + + @param request: UpdateWorkspaceRoleRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: UpdateWorkspaceRoleResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.module_permissions): @@ -13412,13 +14385,13 @@ async def update_workspace_role_with_options_async( runtime: util_models.RuntimeOptions, ) -> aiwork_space_20210204_models.UpdateWorkspaceRoleResponse: """ - @summary 更新工作空间角色 - - @param request: UpdateWorkspaceRoleRequest - @param headers: map - @param runtime: runtime options for this request RuntimeOptions - @return: UpdateWorkspaceRoleResponse - """ + @summary 更新工作空间角色 + + @param request: UpdateWorkspaceRoleRequest + @param headers: map + @param runtime: runtime options for this request RuntimeOptions + @return: UpdateWorkspaceRoleResponse + """ UtilClient.validate_model(request) body = {} if not UtilClient.is_unset(request.module_permissions): @@ -13452,11 +14425,11 @@ def update_workspace_role( request: aiwork_space_20210204_models.UpdateWorkspaceRoleRequest, ) -> aiwork_space_20210204_models.UpdateWorkspaceRoleResponse: """ - @summary 更新工作空间角色 - - @param request: UpdateWorkspaceRoleRequest - @return: UpdateWorkspaceRoleResponse - """ + @summary 更新工作空间角色 + + @param request: UpdateWorkspaceRoleRequest + @return: UpdateWorkspaceRoleResponse + """ runtime = util_models.RuntimeOptions() headers = {} return self.update_workspace_role_with_options(workspace_id, role_id, request, headers, runtime) @@ -13468,11 +14441,11 @@ async def update_workspace_role_async( request: aiwork_space_20210204_models.UpdateWorkspaceRoleRequest, ) -> aiwork_space_20210204_models.UpdateWorkspaceRoleResponse: """ - @summary 更新工作空间角色 - - @param request: UpdateWorkspaceRoleRequest - @return: UpdateWorkspaceRoleResponse - """ + @summary 更新工作空间角色 + + @param request: UpdateWorkspaceRoleRequest + @return: UpdateWorkspaceRoleResponse + """ runtime = util_models.RuntimeOptions() headers = {} return await self.update_workspace_role_with_options_async(workspace_id, role_id, request, headers, runtime) diff --git a/pai/libs/alibabacloud_aiworkspace20210204/models.py b/pai/libs/alibabacloud_aiworkspace20210204/models.py index 257494c..db46cb0 100644 --- a/pai/libs/alibabacloud_aiworkspace20210204/models.py +++ b/pai/libs/alibabacloud_aiworkspace20210204/models.py @@ -193,6 +193,113 @@ def from_map(self, m: dict = None): return self +class DatasetVersion(TeaModel): + def __init__( + self, + data_count: int = None, + data_size: int = None, + data_source_type: str = None, + description: str = None, + gmt_create_time: str = None, + gmt_modified_time: str = None, + labels: List[Label] = None, + options: str = None, + property: str = None, + source_id: str = None, + source_type: str = None, + uri: str = None, + version_name: str = None, + ): + self.data_count = data_count + self.data_size = data_size + self.data_source_type = data_source_type + self.description = description + self.gmt_create_time = gmt_create_time + self.gmt_modified_time = gmt_modified_time + self.labels = labels + self.options = options + self.property = property + self.source_id = source_id + self.source_type = source_type + self.uri = uri + self.version_name = version_name + + def validate(self): + if self.labels: + for k in self.labels: + if k: + k.validate() + + def to_map(self): + _map = super().to_map() + if _map is not None: + return _map + + result = dict() + if self.data_count is not None: + result['DataCount'] = self.data_count + if self.data_size is not None: + result['DataSize'] = self.data_size + 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.gmt_create_time is not None: + result['GmtCreateTime'] = self.gmt_create_time + if self.gmt_modified_time is not None: + result['GmtModifiedTime'] = self.gmt_modified_time + result['Labels'] = [] + if self.labels is not None: + for k in self.labels: + result['Labels'].append(k.to_map() if k else None) + if self.options is not None: + result['Options'] = self.options + if self.property is not None: + result['Property'] = self.property + 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.uri is not None: + result['Uri'] = self.uri + if self.version_name is not None: + result['VersionName'] = self.version_name + return result + + def from_map(self, m: dict = None): + m = m or dict() + if m.get('DataCount') is not None: + self.data_count = m.get('DataCount') + if m.get('DataSize') is not None: + self.data_size = m.get('DataSize') + 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('GmtCreateTime') is not None: + self.gmt_create_time = m.get('GmtCreateTime') + if m.get('GmtModifiedTime') is not None: + self.gmt_modified_time = m.get('GmtModifiedTime') + self.labels = [] + if m.get('Labels') is not None: + for k in m.get('Labels'): + temp_model = Label() + self.labels.append(temp_model.from_map(k)) + if m.get('Options') is not None: + self.options = m.get('Options') + if m.get('Property') is not None: + self.property = m.get('Property') + 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('Uri') is not None: + self.uri = m.get('Uri') + if m.get('VersionName') is not None: + self.version_name = m.get('VersionName') + return self + + class Dataset(TeaModel): def __init__( self, @@ -204,13 +311,17 @@ def __init__( gmt_create_time: str = None, gmt_modified_time: str = None, labels: List[Label] = None, + latest_version: DatasetVersion = None, name: str = None, options: str = None, owner_id: str = None, property: str = None, provider_type: str = None, + source_dataset_id: str = None, + source_dataset_version: str = None, source_id: str = None, source_type: str = None, + tag_template_type: str = None, uri: str = None, user_id: str = None, workspace_id: str = None, @@ -223,13 +334,17 @@ def __init__( self.gmt_create_time = gmt_create_time self.gmt_modified_time = gmt_modified_time self.labels = labels + self.latest_version = latest_version self.name = name self.options = options self.owner_id = owner_id self.property = property self.provider_type = provider_type + self.source_dataset_id = source_dataset_id + self.source_dataset_version = source_dataset_version self.source_id = source_id self.source_type = source_type + self.tag_template_type = tag_template_type self.uri = uri self.user_id = user_id self.workspace_id = workspace_id @@ -239,6 +354,8 @@ def validate(self): for k in self.labels: if k: k.validate() + if self.latest_version: + self.latest_version.validate() def to_map(self): _map = super().to_map() @@ -264,6 +381,8 @@ def to_map(self): if self.labels is not None: for k in self.labels: result['Labels'].append(k.to_map() if k else None) + if self.latest_version is not None: + result['LatestVersion'] = self.latest_version.to_map() if self.name is not None: result['Name'] = self.name if self.options is not None: @@ -274,10 +393,16 @@ def to_map(self): result['Property'] = self.property if self.provider_type is not None: result['ProviderType'] = self.provider_type + if self.source_dataset_id is not None: + result['SourceDatasetId'] = self.source_dataset_id + if self.source_dataset_version is not None: + result['SourceDatasetVersion'] = self.source_dataset_version 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.tag_template_type is not None: + result['TagTemplateType'] = self.tag_template_type if self.uri is not None: result['Uri'] = self.uri if self.user_id is not None: @@ -307,6 +432,9 @@ def from_map(self, m: dict = None): for k in m.get('Labels'): temp_model = Label() self.labels.append(temp_model.from_map(k)) + if m.get('LatestVersion') is not None: + temp_model = DatasetVersion() + self.latest_version = temp_model.from_map(m['LatestVersion']) if m.get('Name') is not None: self.name = m.get('Name') if m.get('Options') is not None: @@ -317,10 +445,16 @@ def from_map(self, m: dict = None): self.property = m.get('Property') if m.get('ProviderType') is not None: self.provider_type = m.get('ProviderType') + if m.get('SourceDatasetId') is not None: + self.source_dataset_id = m.get('SourceDatasetId') + if m.get('SourceDatasetVersion') is not None: + self.source_dataset_version = m.get('SourceDatasetVersion') 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('TagTemplateType') is not None: + self.tag_template_type = m.get('TagTemplateType') if m.get('Uri') is not None: self.uri = m.get('Uri') if m.get('UserId') is not None: @@ -528,6 +662,90 @@ def from_map(self, m: dict = None): return self +class LineageEntity(TeaModel): + def __init__( + self, + attributes: Dict[str, Any] = None, + entity_type: str = None, + name: str = None, + qualified_name: str = None, + ): + self.attributes = attributes + self.entity_type = entity_type + self.name = name + self.qualified_name = qualified_name + + def validate(self): + pass + + def to_map(self): + _map = super().to_map() + if _map is not None: + return _map + + result = dict() + if self.attributes is not None: + result['Attributes'] = self.attributes + if self.entity_type is not None: + result['EntityType'] = self.entity_type + if self.name is not None: + result['Name'] = self.name + if self.qualified_name is not None: + result['QualifiedName'] = self.qualified_name + return result + + def from_map(self, m: dict = None): + m = m or dict() + if m.get('Attributes') is not None: + self.attributes = m.get('Attributes') + if m.get('EntityType') is not None: + self.entity_type = m.get('EntityType') + if m.get('Name') is not None: + self.name = m.get('Name') + if m.get('QualifiedName') is not None: + self.qualified_name = m.get('QualifiedName') + return self + + +class LineageRelation(TeaModel): + def __init__( + self, + dest_entity_qualified_name: str = None, + relationship_guid: str = None, + src_entity_qualified_name: str = None, + ): + self.dest_entity_qualified_name = dest_entity_qualified_name + self.relationship_guid = relationship_guid + self.src_entity_qualified_name = src_entity_qualified_name + + def validate(self): + pass + + def to_map(self): + _map = super().to_map() + if _map is not None: + return _map + + result = dict() + if self.dest_entity_qualified_name is not None: + result['DestEntityQualifiedName'] = self.dest_entity_qualified_name + if self.relationship_guid is not None: + result['RelationshipGuid'] = self.relationship_guid + if self.src_entity_qualified_name is not None: + result['SrcEntityQualifiedName'] = self.src_entity_qualified_name + return result + + def from_map(self, m: dict = None): + m = m or dict() + if m.get('DestEntityQualifiedName') is not None: + self.dest_entity_qualified_name = m.get('DestEntityQualifiedName') + if m.get('RelationshipGuid') is not None: + self.relationship_guid = m.get('RelationshipGuid') + if m.get('SrcEntityQualifiedName') is not None: + self.src_entity_qualified_name = m.get('SrcEntityQualifiedName') + return self + + class ModelVersion(TeaModel): def __init__( self, @@ -924,6 +1142,92 @@ def from_map(self, m: dict = None): return self +class Relation(TeaModel): + def __init__( + self, + err_msg: str = None, + lineage_relation: LineageRelation = None, + result: bool = None, + ): + self.err_msg = err_msg + self.lineage_relation = lineage_relation + self.result = result + + def validate(self): + if self.lineage_relation: + self.lineage_relation.validate() + + def to_map(self): + _map = super().to_map() + if _map is not None: + return _map + + result = dict() + if self.err_msg is not None: + result['ErrMsg'] = self.err_msg + if self.lineage_relation is not None: + result['LineageRelation'] = self.lineage_relation.to_map() + if self.result is not None: + result['Result'] = self.result + return result + + def from_map(self, m: dict = None): + m = m or dict() + if m.get('ErrMsg') is not None: + self.err_msg = m.get('ErrMsg') + if m.get('LineageRelation') is not None: + temp_model = LineageRelation() + self.lineage_relation = temp_model.from_map(m['LineageRelation']) + if m.get('Result') is not None: + self.result = m.get('Result') + return self + + +class Relationship(TeaModel): + def __init__( + self, + attributes: Dict[str, Any] = None, + data_channel: str = None, + relationship_guid: str = None, + relationship_type: str = None, + ): + self.attributes = attributes + self.data_channel = data_channel + self.relationship_guid = relationship_guid + self.relationship_type = relationship_type + + def validate(self): + pass + + def to_map(self): + _map = super().to_map() + if _map is not None: + return _map + + result = dict() + if self.attributes is not None: + result['Attributes'] = self.attributes + if self.data_channel is not None: + result['DataChannel'] = self.data_channel + if self.relationship_guid is not None: + result['RelationshipGuid'] = self.relationship_guid + if self.relationship_type is not None: + result['RelationshipType'] = self.relationship_type + return result + + def from_map(self, m: dict = None): + m = m or dict() + if m.get('Attributes') is not None: + self.attributes = m.get('Attributes') + if m.get('DataChannel') is not None: + self.data_channel = m.get('DataChannel') + if m.get('RelationshipGuid') is not None: + self.relationship_guid = m.get('RelationshipGuid') + if m.get('RelationshipType') is not None: + self.relationship_type = m.get('RelationshipType') + return self + + class Trial(TeaModel): def __init__( self, @@ -1965,6 +2269,8 @@ class CreateDatasetRequest(TeaModel): def __init__( self, accessibility: str = None, + data_count: int = None, + data_size: int = None, data_source_type: str = None, data_type: str = None, description: str = None, @@ -1974,13 +2280,19 @@ def __init__( property: str = None, provider: str = None, provider_type: str = None, + source_dataset_id: str = None, + source_dataset_version: str = None, source_id: str = None, source_type: str = None, uri: str = None, user_id: str = None, + version_description: str = None, + version_labels: List[Label] = None, workspace_id: str = None, ): self.accessibility = accessibility + self.data_count = data_count + self.data_size = data_size # This parameter is required. self.data_source_type = data_source_type self.data_type = data_type @@ -1993,11 +2305,15 @@ def __init__( self.property = property self.provider = provider self.provider_type = provider_type + self.source_dataset_id = source_dataset_id + self.source_dataset_version = source_dataset_version self.source_id = source_id self.source_type = source_type # This parameter is required. self.uri = uri self.user_id = user_id + self.version_description = version_description + self.version_labels = version_labels self.workspace_id = workspace_id def validate(self): @@ -2005,6 +2321,10 @@ def validate(self): for k in self.labels: if k: k.validate() + if self.version_labels: + for k in self.version_labels: + if k: + k.validate() def to_map(self): _map = super().to_map() @@ -2014,6 +2334,10 @@ def to_map(self): result = dict() if self.accessibility is not None: result['Accessibility'] = self.accessibility + if self.data_count is not None: + result['DataCount'] = self.data_count + if self.data_size is not None: + result['DataSize'] = self.data_size if self.data_source_type is not None: result['DataSourceType'] = self.data_source_type if self.data_type is not None: @@ -2034,6 +2358,10 @@ def to_map(self): result['Provider'] = self.provider if self.provider_type is not None: result['ProviderType'] = self.provider_type + if self.source_dataset_id is not None: + result['SourceDatasetId'] = self.source_dataset_id + if self.source_dataset_version is not None: + result['SourceDatasetVersion'] = self.source_dataset_version if self.source_id is not None: result['SourceId'] = self.source_id if self.source_type is not None: @@ -2042,6 +2370,12 @@ def to_map(self): result['Uri'] = self.uri if self.user_id is not None: result['UserId'] = self.user_id + if self.version_description is not None: + result['VersionDescription'] = self.version_description + result['VersionLabels'] = [] + if self.version_labels is not None: + for k in self.version_labels: + result['VersionLabels'].append(k.to_map() if k else None) if self.workspace_id is not None: result['WorkspaceId'] = self.workspace_id return result @@ -2050,6 +2384,10 @@ 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('DataCount') is not None: + self.data_count = m.get('DataCount') + if m.get('DataSize') is not None: + self.data_size = m.get('DataSize') if m.get('DataSourceType') is not None: self.data_source_type = m.get('DataSourceType') if m.get('DataType') is not None: @@ -2071,6 +2409,10 @@ def from_map(self, m: dict = None): self.provider = m.get('Provider') if m.get('ProviderType') is not None: self.provider_type = m.get('ProviderType') + if m.get('SourceDatasetId') is not None: + self.source_dataset_id = m.get('SourceDatasetId') + if m.get('SourceDatasetVersion') is not None: + self.source_dataset_version = m.get('SourceDatasetVersion') if m.get('SourceId') is not None: self.source_id = m.get('SourceId') if m.get('SourceType') is not None: @@ -2079,6 +2421,13 @@ def from_map(self, m: dict = None): self.uri = m.get('Uri') if m.get('UserId') is not None: self.user_id = m.get('UserId') + if m.get('VersionDescription') is not None: + self.version_description = m.get('VersionDescription') + self.version_labels = [] + if m.get('VersionLabels') is not None: + for k in m.get('VersionLabels'): + temp_model = Label() + self.version_labels.append(temp_model.from_map(k)) if m.get('WorkspaceId') is not None: self.workspace_id = m.get('WorkspaceId') return self @@ -2461,16 +2810,286 @@ def to_map(self): def from_map(self, m: dict = None): m = m or dict() - if m.get('AccessToken') is not None: - self.access_token = m.get('AccessToken') - if m.get('Message') is not None: - self.message = m.get('Message') - if m.get('Secret') is not None: - self.secret = m.get('Secret') + if m.get('AccessToken') is not None: + self.access_token = m.get('AccessToken') + if m.get('Message') is not None: + self.message = m.get('Message') + if m.get('Secret') is not None: + self.secret = m.get('Secret') + return self + + +class CreateDingTalkRobotMessageResponseBody(TeaModel): + def __init__( + self, + request_id: str = None, + ): + 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.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('RequestId') is not None: + self.request_id = m.get('RequestId') + return self + + +class CreateDingTalkRobotMessageResponse(TeaModel): + def __init__( + self, + headers: Dict[str, str] = None, + status_code: int = None, + body: CreateDingTalkRobotMessageResponseBody = 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 = CreateDingTalkRobotMessageResponseBody() + self.body = temp_model.from_map(m['body']) + return self + + +class CreateDatasetVersionRequest(TeaModel): + def __init__( + self, + data_count: int = None, + data_size: int = None, + data_source_type: str = None, + description: str = None, + labels: List[Label] = None, + options: str = None, + property: str = None, + source_id: str = None, + source_type: str = None, + uri: str = None, + ): + self.data_count = data_count + self.data_size = data_size + # This parameter is required. + self.data_source_type = data_source_type + self.description = description + self.labels = labels + self.options = options + # This parameter is required. + self.property = property + self.source_id = source_id + self.source_type = source_type + # This parameter is required. + self.uri = uri + + def validate(self): + if self.labels: + for k in self.labels: + if k: + k.validate() + + def to_map(self): + _map = super().to_map() + if _map is not None: + return _map + + result = dict() + if self.data_count is not None: + result['DataCount'] = self.data_count + if self.data_size is not None: + result['DataSize'] = self.data_size + if self.data_source_type is not None: + result['DataSourceType'] = self.data_source_type + if self.description is not None: + result['Description'] = self.description + result['Labels'] = [] + if self.labels is not None: + for k in self.labels: + result['Labels'].append(k.to_map() if k else None) + if self.options is not None: + result['Options'] = self.options + if self.property is not None: + result['Property'] = self.property + 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.uri is not None: + result['Uri'] = self.uri + return result + + def from_map(self, m: dict = None): + m = m or dict() + if m.get('DataCount') is not None: + self.data_count = m.get('DataCount') + if m.get('DataSize') is not None: + self.data_size = m.get('DataSize') + 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') + self.labels = [] + if m.get('Labels') is not None: + for k in m.get('Labels'): + temp_model = Label() + self.labels.append(temp_model.from_map(k)) + if m.get('Options') is not None: + self.options = m.get('Options') + if m.get('Property') is not None: + self.property = m.get('Property') + 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('Uri') is not None: + self.uri = m.get('Uri') + return self + + +class CreateDatasetVersionResponseBody(TeaModel): + def __init__( + self, + request_id: str = None, + version_name: str = None, + ): + self.request_id = request_id + self.version_name = version_name + + 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.version_name is not None: + result['VersionName'] = self.version_name + 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('VersionName') is not None: + self.version_name = m.get('VersionName') + return self + + +class CreateDatasetVersionResponse(TeaModel): + def __init__( + self, + headers: Dict[str, str] = None, + status_code: int = None, + body: CreateDatasetVersionResponseBody = 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 = CreateDatasetVersionResponseBody() + self.body = temp_model.from_map(m['body']) + return self + + +class CreateDatasetVersionLabelsRequest(TeaModel): + def __init__( + self, + labels: List[Label] = None, + ): + # This parameter is required. + self.labels = labels + + def validate(self): + if self.labels: + for k in self.labels: + if k: + k.validate() + + def to_map(self): + _map = super().to_map() + if _map is not None: + return _map + + result = dict() + result['Labels'] = [] + if self.labels is not None: + for k in self.labels: + result['Labels'].append(k.to_map() if k else None) + return result + + def from_map(self, m: dict = None): + m = m or dict() + self.labels = [] + if m.get('Labels') is not None: + for k in m.get('Labels'): + temp_model = Label() + self.labels.append(temp_model.from_map(k)) return self -class CreateDingTalkRobotMessageResponseBody(TeaModel): +class CreateDatasetVersionLabelsResponseBody(TeaModel): def __init__( self, request_id: str = None, @@ -2497,12 +3116,12 @@ def from_map(self, m: dict = None): return self -class CreateDingTalkRobotMessageResponse(TeaModel): +class CreateDatasetVersionLabelsResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, - body: CreateDingTalkRobotMessageResponseBody = None, + body: CreateDatasetVersionLabelsResponseBody = None, ): self.headers = headers self.status_code = status_code @@ -2533,7 +3152,7 @@ def from_map(self, m: dict = None): if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: - temp_model = CreateDingTalkRobotMessageResponseBody() + temp_model = CreateDatasetVersionLabelsResponseBody() self.body = temp_model.from_map(m['body']) return self @@ -5227,10 +5846,8 @@ def from_map(self, m: dict = None): class DeleteDatasetLabelsRequest(TeaModel): def __init__( self, - keys: str = None, label_keys: str = None, ): - self.keys = keys self.label_keys = label_keys def validate(self): @@ -5242,16 +5859,12 @@ def to_map(self): return _map result = dict() - if self.keys is not None: - result['Keys'] = self.keys if self.label_keys is not None: result['LabelKeys'] = self.label_keys return result def from_map(self, m: dict = None): m = m or dict() - if m.get('Keys') is not None: - self.keys = m.get('Keys') if m.get('LabelKeys') is not None: self.label_keys = m.get('LabelKeys') return self @@ -5325,6 +5938,170 @@ def from_map(self, m: dict = None): return self +class DeleteDatasetVersionResponseBody(TeaModel): + def __init__( + self, + request_id: str = None, + ): + 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.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('RequestId') is not None: + self.request_id = m.get('RequestId') + return self + + +class DeleteDatasetVersionResponse(TeaModel): + def __init__( + self, + headers: Dict[str, str] = None, + status_code: int = None, + body: DeleteDatasetVersionResponseBody = 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 = DeleteDatasetVersionResponseBody() + self.body = temp_model.from_map(m['body']) + return self + + +class DeleteDatasetVersionLabelsRequest(TeaModel): + def __init__( + self, + keys: str = None, + ): + # This parameter is required. + self.keys = keys + + def validate(self): + pass + + def to_map(self): + _map = super().to_map() + if _map is not None: + return _map + + result = dict() + if self.keys is not None: + result['Keys'] = self.keys + return result + + def from_map(self, m: dict = None): + m = m or dict() + if m.get('Keys') is not None: + self.keys = m.get('Keys') + return self + + +class DeleteDatasetVersionLabelsResponseBody(TeaModel): + def __init__( + self, + request_id: str = None, + ): + 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.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('RequestId') is not None: + self.request_id = m.get('RequestId') + return self + + +class DeleteDatasetVersionLabelsResponse(TeaModel): + def __init__( + self, + headers: Dict[str, str] = None, + status_code: int = None, + body: DeleteDatasetVersionLabelsResponseBody = 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 = DeleteDatasetVersionLabelsResponseBody() + self.body = temp_model.from_map(m['body']) + return self + + class DeleteExperimentResponseBody(TeaModel): def __init__( self, @@ -7204,14 +7981,19 @@ def __init__( gmt_create_time: str = None, gmt_modified_time: str = None, labels: List[Label] = None, + latest_version: DatasetVersion = None, name: str = None, options: str = None, owner_id: str = None, property: str = None, + provider: str = None, provider_type: str = None, request_id: str = None, + source_dataset_id: str = None, + source_dataset_version: str = None, source_id: str = None, source_type: str = None, + tag_template_type: str = None, uri: str = None, user_id: str = None, workspace_id: str = None, @@ -7224,14 +8006,19 @@ def __init__( self.gmt_create_time = gmt_create_time self.gmt_modified_time = gmt_modified_time self.labels = labels + self.latest_version = latest_version self.name = name self.options = options self.owner_id = owner_id self.property = property + self.provider = provider self.provider_type = provider_type self.request_id = request_id + self.source_dataset_id = source_dataset_id + self.source_dataset_version = source_dataset_version self.source_id = source_id self.source_type = source_type + self.tag_template_type = tag_template_type self.uri = uri self.user_id = user_id self.workspace_id = workspace_id @@ -7241,6 +8028,8 @@ def validate(self): for k in self.labels: if k: k.validate() + if self.latest_version: + self.latest_version.validate() def to_map(self): _map = super().to_map() @@ -7266,6 +8055,8 @@ def to_map(self): if self.labels is not None: for k in self.labels: result['Labels'].append(k.to_map() if k else None) + if self.latest_version is not None: + result['LatestVersion'] = self.latest_version.to_map() if self.name is not None: result['Name'] = self.name if self.options is not None: @@ -7274,14 +8065,22 @@ def to_map(self): result['OwnerId'] = self.owner_id if self.property is not None: result['Property'] = self.property + if self.provider is not None: + result['Provider'] = self.provider if self.provider_type is not None: result['ProviderType'] = self.provider_type if self.request_id is not None: result['RequestId'] = self.request_id + if self.source_dataset_id is not None: + result['SourceDatasetId'] = self.source_dataset_id + if self.source_dataset_version is not None: + result['SourceDatasetVersion'] = self.source_dataset_version 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.tag_template_type is not None: + result['TagTemplateType'] = self.tag_template_type if self.uri is not None: result['Uri'] = self.uri if self.user_id is not None: @@ -7311,6 +8110,9 @@ def from_map(self, m: dict = None): for k in m.get('Labels'): temp_model = Label() self.labels.append(temp_model.from_map(k)) + if m.get('LatestVersion') is not None: + temp_model = DatasetVersion() + self.latest_version = temp_model.from_map(m['LatestVersion']) if m.get('Name') is not None: self.name = m.get('Name') if m.get('Options') is not None: @@ -7319,14 +8121,22 @@ def from_map(self, m: dict = None): self.owner_id = m.get('OwnerId') if m.get('Property') is not None: self.property = m.get('Property') + if m.get('Provider') is not None: + self.provider = m.get('Provider') if m.get('ProviderType') is not None: self.provider_type = m.get('ProviderType') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') + if m.get('SourceDatasetId') is not None: + self.source_dataset_id = m.get('SourceDatasetId') + if m.get('SourceDatasetVersion') is not None: + self.source_dataset_version = m.get('SourceDatasetVersion') 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('TagTemplateType') is not None: + self.tag_template_type = m.get('TagTemplateType') if m.get('Uri') is not None: self.uri = m.get('Uri') if m.get('UserId') is not None: @@ -7382,10 +8192,75 @@ def __init__( self, workspace_id: str = None, ): - self.workspace_id = 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 GetDatasetsStatisticsResponseBody(TeaModel): + def __init__( + self, + count: int = None, + request_id: str = None, + ): + self.count = count + 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.count is not None: + result['Count'] = self.count + 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('Count') is not None: + self.count = m.get('Count') + if m.get('RequestId') is not None: + self.request_id = m.get('RequestId') + return self + + +class GetDatasetsStatisticsResponse(TeaModel): + def __init__( + self, + headers: Dict[str, str] = None, + status_code: int = None, + body: GetDatasetsStatisticsResponseBody = None, + ): + self.headers = headers + self.status_code = status_code + self.body = body def validate(self): - pass + if self.body: + self.body.validate() def to_map(self): _map = super().to_map() @@ -7393,28 +8268,99 @@ def to_map(self): return _map result = dict() - if self.workspace_id is not None: - result['WorkspaceId'] = self.workspace_id + 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('WorkspaceId') is not None: - self.workspace_id = m.get('WorkspaceId') + 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 = GetDatasetsStatisticsResponseBody() + self.body = temp_model.from_map(m['body']) return self -class GetDatasetsStatisticsResponseBody(TeaModel): +class GetDatasetVersionResponseBody(TeaModel): def __init__( self, - count: int = None, + data_count: int = None, + data_size: int = None, + data_source_type: str = None, + dataset_id: str = None, + description: str = None, + gmt_create_time: str = None, + gmt_modified_time: str = None, + labels: List[Label] = None, + options: str = None, + property: str = None, request_id: str = None, + source_id: str = None, + source_type: str = None, + uri: str = None, + version_name: str = None, ): - self.count = count + # 数据集的数据量 + self.data_count = data_count + # 数据集版本的数据大小。 + self.data_size = data_size + # 数据源类型。支持以下取值: + # - OSS:阿里云对象存储(OSS)。 + # - NAS:阿里云文件存储(NAS)。 + # + # This parameter is required. + self.data_source_type = data_source_type + # 代表资源一级ID的资源属性字段 + self.dataset_id = dataset_id + # 数据集版本的描述信息。 + self.description = description + self.gmt_create_time = gmt_create_time + # 创建时间。 + self.gmt_modified_time = gmt_modified_time + # 代表资源标签的资源属性字段 + self.labels = labels + # 扩展字段,JsonString类型。 + # 当DLC使用数据集时,可通过配置mountPath字段指定数据集默认挂载路径。 + self.options = options + # 数据集的属性。支持以下取值: + # - FILE:文件。 + # - DIRECTORY:文件夹。 + # + # This parameter is required. + self.property = property self.request_id = request_id + # 数据来源ID。 + self.source_id = source_id + # 数据来源类型,默认为USER。支持以下取值: + # - PAI-PUBLIC-DATASET:PAI公共数据集。 + # - ITAG:iTAG模块标注结果生成的数据集。 + # - USER:用户注册的数据集。 + self.source_type = source_type + # Uri配置样例如下: + # - 数据源类型为OSS:`oss://bucket.endpoint/object` + # - 数据源类型为NAS: + # 通用型NAS格式为:`nas://.region/subpath/to/dir/`; + # CPFS1.0:`nas://.region/subpath/to/dir/`; + # CPFS2.0:`nas://.region//`。 + # CPFS1.0和CPFS2.0根据fsid的格式来区分:CPFS1.0 格式为cpfs-<8位ascii字符>;CPFS2.0 格式为cpfs-<16为ascii字符>。 + # + # This parameter is required. + self.uri = uri + # 代表资源名称的资源属性字段 + self.version_name = version_name def validate(self): - pass + if self.labels: + for k in self.labels: + if k: + k.validate() def to_map(self): _map = super().to_map() @@ -7422,27 +8368,84 @@ def to_map(self): return _map result = dict() - if self.count is not None: - result['Count'] = self.count + if self.data_count is not None: + result['DataCount'] = self.data_count + if self.data_size is not None: + result['DataSize'] = self.data_size + if self.data_source_type is not None: + result['DataSourceType'] = self.data_source_type + if self.dataset_id is not None: + result['DatasetId'] = self.dataset_id + if self.description is not None: + result['Description'] = self.description + if self.gmt_create_time is not None: + result['GmtCreateTime'] = self.gmt_create_time + if self.gmt_modified_time is not None: + result['GmtModifiedTime'] = self.gmt_modified_time + result['Labels'] = [] + if self.labels is not None: + for k in self.labels: + result['Labels'].append(k.to_map() if k else None) + if self.options is not None: + result['Options'] = self.options + if self.property is not None: + result['Property'] = self.property if self.request_id is not None: result['RequestId'] = self.request_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.uri is not None: + result['Uri'] = self.uri + if self.version_name is not None: + result['VersionName'] = self.version_name return result def from_map(self, m: dict = None): m = m or dict() - if m.get('Count') is not None: - self.count = m.get('Count') + if m.get('DataCount') is not None: + self.data_count = m.get('DataCount') + if m.get('DataSize') is not None: + self.data_size = m.get('DataSize') + if m.get('DataSourceType') is not None: + self.data_source_type = m.get('DataSourceType') + if m.get('DatasetId') is not None: + self.dataset_id = m.get('DatasetId') + if m.get('Description') is not None: + self.description = m.get('Description') + if m.get('GmtCreateTime') is not None: + self.gmt_create_time = m.get('GmtCreateTime') + if m.get('GmtModifiedTime') is not None: + self.gmt_modified_time = m.get('GmtModifiedTime') + self.labels = [] + if m.get('Labels') is not None: + for k in m.get('Labels'): + temp_model = Label() + self.labels.append(temp_model.from_map(k)) + if m.get('Options') is not None: + self.options = m.get('Options') + if m.get('Property') is not None: + self.property = m.get('Property') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') + 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('Uri') is not None: + self.uri = m.get('Uri') + if m.get('VersionName') is not None: + self.version_name = m.get('VersionName') return self -class GetDatasetsStatisticsResponse(TeaModel): +class GetDatasetVersionResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, - body: GetDatasetsStatisticsResponseBody = None, + body: GetDatasetVersionResponseBody = None, ): self.headers = headers self.status_code = status_code @@ -7473,7 +8476,7 @@ def from_map(self, m: dict = None): if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: - temp_model = GetDatasetsStatisticsResponseBody() + temp_model = GetDatasetVersionResponseBody() self.body = temp_model.from_map(m['body']) return self @@ -10889,20 +11892,195 @@ def from_map(self, m: dict = None): return self -class ListConfigsResponseBody(TeaModel): +class ListConfigsResponseBody(TeaModel): + def __init__( + self, + configs: List[ListConfigsResponseBodyConfigs] = None, + request_id: str = None, + total_count: int = None, + ): + self.configs = configs + self.request_id = request_id + self.total_count = total_count + + def validate(self): + if self.configs: + for k in self.configs: + if k: + k.validate() + + def to_map(self): + _map = super().to_map() + if _map is not None: + return _map + + result = dict() + result['Configs'] = [] + if self.configs is not None: + for k in self.configs: + result['Configs'].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.configs = [] + if m.get('Configs') is not None: + for k in m.get('Configs'): + temp_model = ListConfigsResponseBodyConfigs() + self.configs.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 ListConfigsResponse(TeaModel): + def __init__( + self, + headers: Dict[str, str] = None, + status_code: int = None, + body: ListConfigsResponseBody = 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 = ListConfigsResponseBody() + self.body = temp_model.from_map(m['body']) + return self + + +class ListDatasetVersionsRequest(TeaModel): + def __init__( + self, + data_sources_types: str = None, + label_keys: str = None, + lable_values: str = None, + order: str = None, + page_number: int = None, + page_size: int = None, + properties: str = None, + sort_by: str = None, + source_id: str = None, + source_types: str = None, + ): + self.data_sources_types = data_sources_types + self.label_keys = label_keys + self.lable_values = lable_values + self.order = order + # This parameter is required. + self.page_number = page_number + # This parameter is required. + self.page_size = page_size + self.properties = properties + self.sort_by = sort_by + self.source_id = source_id + self.source_types = source_types + + def validate(self): + pass + + def to_map(self): + _map = super().to_map() + if _map is not None: + return _map + + result = dict() + if self.data_sources_types is not None: + result['DataSourcesTypes'] = self.data_sources_types + if self.label_keys is not None: + result['LabelKeys'] = self.label_keys + if self.lable_values is not None: + result['LableValues'] = self.lable_values + 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.properties is not None: + result['Properties'] = self.properties + 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_types is not None: + result['SourceTypes'] = self.source_types + return result + + def from_map(self, m: dict = None): + m = m or dict() + if m.get('DataSourcesTypes') is not None: + self.data_sources_types = m.get('DataSourcesTypes') + if m.get('LabelKeys') is not None: + self.label_keys = m.get('LabelKeys') + if m.get('LableValues') is not None: + self.lable_values = m.get('LableValues') + 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('Properties') is not None: + self.properties = m.get('Properties') + 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('SourceTypes') is not None: + self.source_types = m.get('SourceTypes') + return self + + +class ListDatasetVersionsResponseBody(TeaModel): def __init__( self, - configs: List[ListConfigsResponseBodyConfigs] = None, + dataset_versions: List[DatasetVersion] = None, + page_number: int = None, + page_size: int = None, request_id: str = None, total_count: int = None, ): - self.configs = configs + self.dataset_versions = dataset_versions + self.page_number = page_number + self.page_size = page_size self.request_id = request_id self.total_count = total_count def validate(self): - if self.configs: - for k in self.configs: + if self.dataset_versions: + for k in self.dataset_versions: if k: k.validate() @@ -10912,10 +12090,14 @@ def to_map(self): return _map result = dict() - result['Configs'] = [] - if self.configs is not None: - for k in self.configs: - result['Configs'].append(k.to_map() if k else None) + result['DatasetVersions'] = [] + if self.dataset_versions is not None: + for k in self.dataset_versions: + result['DatasetVersions'].append(k.to_map() if k else None) + 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.request_id is not None: result['RequestId'] = self.request_id if self.total_count is not None: @@ -10924,11 +12106,15 @@ def to_map(self): def from_map(self, m: dict = None): m = m or dict() - self.configs = [] - if m.get('Configs') is not None: - for k in m.get('Configs'): - temp_model = ListConfigsResponseBodyConfigs() - self.configs.append(temp_model.from_map(k)) + self.dataset_versions = [] + if m.get('DatasetVersions') is not None: + for k in m.get('DatasetVersions'): + temp_model = DatasetVersion() + self.dataset_versions.append(temp_model.from_map(k)) + 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('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('TotalCount') is not None: @@ -10936,12 +12122,12 @@ def from_map(self, m: dict = None): return self -class ListConfigsResponse(TeaModel): +class ListDatasetVersionsResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, - body: ListConfigsResponseBody = None, + body: ListDatasetVersionsResponseBody = None, ): self.headers = headers self.status_code = status_code @@ -10972,7 +12158,7 @@ def from_map(self, m: dict = None): if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: - temp_model = ListConfigsResponseBody() + temp_model = ListDatasetVersionsResponseBody() self.body = temp_model.from_map(m['body']) return self @@ -10983,14 +12169,13 @@ def __init__( data_source_types: str = None, data_types: str = None, label: str = None, - label_keys: str = None, - label_values: str = None, name: str = None, order: str = None, page_number: int = None, page_size: int = None, properties: str = None, provider: str = None, + source_dataset_id: str = None, source_id: str = None, source_types: str = None, workspace_id: str = None, @@ -10998,14 +12183,13 @@ def __init__( self.data_source_types = data_source_types self.data_types = data_types self.label = label - self.label_keys = label_keys - self.label_values = label_values self.name = name self.order = order self.page_number = page_number self.page_size = page_size self.properties = properties self.provider = provider + self.source_dataset_id = source_dataset_id self.source_id = source_id self.source_types = source_types self.workspace_id = workspace_id @@ -11025,10 +12209,6 @@ def to_map(self): result['DataTypes'] = self.data_types if self.label is not None: result['Label'] = self.label - if self.label_keys is not None: - result['LabelKeys'] = self.label_keys - if self.label_values is not None: - result['LabelValues'] = self.label_values if self.name is not None: result['Name'] = self.name if self.order is not None: @@ -11041,6 +12221,8 @@ def to_map(self): result['Properties'] = self.properties if self.provider is not None: result['Provider'] = self.provider + if self.source_dataset_id is not None: + result['SourceDatasetId'] = self.source_dataset_id if self.source_id is not None: result['SourceId'] = self.source_id if self.source_types is not None: @@ -11057,10 +12239,6 @@ def from_map(self, m: dict = None): self.data_types = m.get('DataTypes') if m.get('Label') is not None: self.label = m.get('Label') - if m.get('LabelKeys') is not None: - self.label_keys = m.get('LabelKeys') - if m.get('LabelValues') is not None: - self.label_values = m.get('LabelValues') if m.get('Name') is not None: self.name = m.get('Name') if m.get('Order') is not None: @@ -11073,6 +12251,8 @@ def from_map(self, m: dict = None): self.properties = m.get('Properties') if m.get('Provider') is not None: self.provider = m.get('Provider') + if m.get('SourceDatasetId') is not None: + self.source_dataset_id = m.get('SourceDatasetId') if m.get('SourceId') is not None: self.source_id = m.get('SourceId') if m.get('SourceTypes') is not None: @@ -15618,7 +16798,8 @@ class ListWorkspaceRolesResponseBodyRolesModulePermissionsPermissions(TeaModel): def __init__( self, permission_codes: List[str] = None, - permission_rules: List[ListWorkspaceRolesResponseBodyRolesModulePermissionsPermissionsPermissionRules] = None, + permission_rules: List[ + ListWorkspaceRolesResponseBodyRolesModulePermissionsPermissionsPermissionRules] = None, ): self.permission_codes = permission_codes self.permission_rules = permission_rules @@ -16630,6 +17811,186 @@ def from_map(self, m: dict = None): return self +class RegisterLineageRequest(TeaModel): + def __init__( + self, + attributes: Dict[str, Any] = None, + input_entities: List[LineageEntity] = None, + name: str = None, + output_entities: List[LineageEntity] = None, + qualified_name: str = None, + register_task_as_entity: bool = None, + ): + self.attributes = attributes + # This parameter is required. + self.input_entities = input_entities + self.name = name + # This parameter is required. + self.output_entities = output_entities + # This parameter is required. + self.qualified_name = qualified_name + self.register_task_as_entity = register_task_as_entity + + def validate(self): + if self.input_entities: + for k in self.input_entities: + if k: + k.validate() + if self.output_entities: + for k in self.output_entities: + if k: + k.validate() + + def to_map(self): + _map = super().to_map() + if _map is not None: + return _map + + result = dict() + if self.attributes is not None: + result['Attributes'] = self.attributes + result['InputEntities'] = [] + if self.input_entities is not None: + for k in self.input_entities: + result['InputEntities'].append(k.to_map() if k else None) + if self.name is not None: + result['Name'] = self.name + result['OutputEntities'] = [] + if self.output_entities is not None: + for k in self.output_entities: + result['OutputEntities'].append(k.to_map() if k else None) + if self.qualified_name is not None: + result['QualifiedName'] = self.qualified_name + if self.register_task_as_entity is not None: + result['RegisterTaskAsEntity'] = self.register_task_as_entity + return result + + def from_map(self, m: dict = None): + m = m or dict() + if m.get('Attributes') is not None: + self.attributes = m.get('Attributes') + self.input_entities = [] + if m.get('InputEntities') is not None: + for k in m.get('InputEntities'): + temp_model = LineageEntity() + self.input_entities.append(temp_model.from_map(k)) + if m.get('Name') is not None: + self.name = m.get('Name') + self.output_entities = [] + if m.get('OutputEntities') is not None: + for k in m.get('OutputEntities'): + temp_model = LineageEntity() + self.output_entities.append(temp_model.from_map(k)) + if m.get('QualifiedName') is not None: + self.qualified_name = m.get('QualifiedName') + if m.get('RegisterTaskAsEntity') is not None: + self.register_task_as_entity = m.get('RegisterTaskAsEntity') + return self + + +class RegisterLineageResponseBody(TeaModel): + def __init__( + self, + all_success: bool = None, + entity_map: Dict[str, Any] = None, + relations: List[Relation] = None, + relationship: Relationship = None, + request_id: str = None, + ): + self.all_success = all_success + self.entity_map = entity_map + self.relations = relations + self.relationship = relationship + self.request_id = request_id + + def validate(self): + if self.relations: + for k in self.relations: + if k: + k.validate() + if self.relationship: + self.relationship.validate() + + def to_map(self): + _map = super().to_map() + if _map is not None: + return _map + + result = dict() + if self.all_success is not None: + result['AllSuccess'] = self.all_success + if self.entity_map is not None: + result['EntityMap'] = self.entity_map + result['Relations'] = [] + if self.relations is not None: + for k in self.relations: + result['Relations'].append(k.to_map() if k else None) + if self.relationship is not None: + result['Relationship'] = self.relationship.to_map() + 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('AllSuccess') is not None: + self.all_success = m.get('AllSuccess') + if m.get('EntityMap') is not None: + self.entity_map = m.get('EntityMap') + self.relations = [] + if m.get('Relations') is not None: + for k in m.get('Relations'): + temp_model = Relation() + self.relations.append(temp_model.from_map(k)) + if m.get('Relationship') is not None: + temp_model = Relationship() + self.relationship = temp_model.from_map(m['Relationship']) + if m.get('RequestId') is not None: + self.request_id = m.get('RequestId') + return self + + +class RegisterLineageResponse(TeaModel): + def __init__( + self, + headers: Dict[str, str] = None, + status_code: int = None, + body: RegisterLineageResponseBody = 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 = RegisterLineageResponseBody() + self.body = temp_model.from_map(m['body']) + return self + + class RemoveImageResponseBody(TeaModel): def __init__( self, @@ -17608,6 +18969,119 @@ def from_map(self, m: dict = None): return self +class UpdateDatasetVersionRequest(TeaModel): + def __init__( + self, + data_count: int = None, + data_size: int = None, + description: str = None, + options: str = None, + ): + self.data_count = data_count + self.data_size = data_size + self.description = description + self.options = options + + def validate(self): + pass + + def to_map(self): + _map = super().to_map() + if _map is not None: + return _map + + result = dict() + if self.data_count is not None: + result['DataCount'] = self.data_count + if self.data_size is not None: + result['DataSize'] = self.data_size + if self.description is not None: + result['Description'] = self.description + if self.options is not None: + result['Options'] = self.options + return result + + def from_map(self, m: dict = None): + m = m or dict() + if m.get('DataCount') is not None: + self.data_count = m.get('DataCount') + if m.get('DataSize') is not None: + self.data_size = m.get('DataSize') + if m.get('Description') is not None: + self.description = m.get('Description') + if m.get('Options') is not None: + self.options = m.get('Options') + return self + + +class UpdateDatasetVersionResponseBody(TeaModel): + def __init__( + self, + request_id: str = None, + ): + 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.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('RequestId') is not None: + self.request_id = m.get('RequestId') + return self + + +class UpdateDatasetVersionResponse(TeaModel): + def __init__( + self, + headers: Dict[str, str] = None, + status_code: int = None, + body: UpdateDatasetVersionResponseBody = 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 = UpdateDatasetVersionResponseBody() + self.body = temp_model.from_map(m['body']) + return self + + class UpdateDefaultWorkspaceRequest(TeaModel): def __init__( self, @@ -18948,5 +20422,3 @@ def from_map(self, m: dict = None): temp_model = UpdateWorkspaceRoleResponseBody() self.body = temp_model.from_map(m['body']) return self - - From a59f20f12d1b93782cae862de74988577c23bbec Mon Sep 17 00:00:00 2001 From: Everett Li Date: Wed, 13 Nov 2024 16:19:59 +0800 Subject: [PATCH 02/13] feat: support log_lineage --- pai/api/api_container.py | 6 + pai/api/base.py | 1 + pai/api/lineage.py | 64 +++++++++ pai/common/consts.py | 38 +++++ pai/common/utils.py | 107 +++++++++++++- pai/session.py | 85 +++++++---- pai/toolkit/helper/utils.py | 3 +- pai/tracking/__init__.py | 4 + pai/tracking/lineage.py | 232 ++++++++++++++++++++++++++++++ tests/integration/test_lineage.py | 122 ++++++++++++++++ tests/unit/test_session.py | 41 +++++- tests/unit/test_utils.py | 114 ++++++++++++++- 12 files changed, 784 insertions(+), 33 deletions(-) create mode 100644 pai/api/lineage.py create mode 100644 pai/tracking/__init__.py create mode 100644 pai/tracking/lineage.py create mode 100644 tests/integration/test_lineage.py diff --git a/pai/api/api_container.py b/pai/api/api_container.py index ba24d58..42e349f 100644 --- a/pai/api/api_container.py +++ b/pai/api/api_container.py @@ -24,6 +24,7 @@ from .code_source import CodeSourceAPI from .dataset import DatasetAPI from .experiment import ExperimentAPI +from .lineage import LineageAPI from .image import ImageAPI from .job import JobAPI from .model import ModelAPI @@ -48,6 +49,7 @@ PAIRestResourceTypes.PipelineRun: PipelineRunAPI, PAIRestResourceTypes.TensorBoard: TensorBoardAPI, PAIRestResourceTypes.Experiment: ExperimentAPI, + PAIRestResourceTypes.Lineage: LineageAPI, } @@ -212,3 +214,7 @@ def pipeline_run_api(self) -> PipelineRunAPI: @property def experiment_api(self) -> ExperimentAPI: return self.get_api_by_resource(PAIRestResourceTypes.Experiment) + + @property + def lineage_api(self) -> LineageAPI: + return self.get_api_by_resource(PAIRestResourceTypes.Lineage) \ No newline at end of file diff --git a/pai/api/base.py b/pai/api/base.py index 6b0185a..64661f5 100644 --- a/pai/api/base.py +++ b/pai/api/base.py @@ -54,6 +54,7 @@ class PAIRestResourceTypes(object): PipelineRun = "PipelineRun" TensorBoard = "TensorBoard" Experiment = "Experiment" + Lineage = "Lineage" class ResourceAPI(with_metaclass(ABCMeta, object)): diff --git a/pai/api/lineage.py b/pai/api/lineage.py new file mode 100644 index 0000000..b0f5beb --- /dev/null +++ b/pai/api/lineage.py @@ -0,0 +1,64 @@ +# Copyright 2023 Alibaba, Inc. or its affiliates. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +from dataclasses import dataclass +from typing import List, Dict, Optional + +from ..libs.alibabacloud_aiworkspace20210204.models import ( + LineageEntity, + RegisterLineageRequest, +) +from ..common.logging import get_logger +from .base import ServiceName, WorkspaceScopedResourceAPI + +logger = get_logger(__name__) + + +@dataclass +class _LineageEntity: + Attributes: Dict[str, str] = None + EntityType: Optional[str] = None + Name: Optional[str] = None + QualifiedName: Optional[str] = None + + +class LineageAPI(WorkspaceScopedResourceAPI): + BACKEND_SERVICE_NAME = ServiceName.PAI_WORKSPACE + + _register_lineage = "register_lineage_with_options" + + def log_lineage(self, inputs: List[_LineageEntity], outputs: List[_LineageEntity], job_id: str, workspace_id: str): + input_entities = [] + output_entities = [] + for input in inputs: + input_entities.append( + LineageEntity(attributes=input.Attributes, entity_type=input.EntityType, name=input.Name, + qualified_name=input.QualifiedName)) + for output in outputs: + output_entities.append( + LineageEntity(attributes=output.Attributes, entity_type=output.EntityType, name=output.Name, + qualified_name=output.QualifiedName)) + request = RegisterLineageRequest( + register_task_as_entity=True, + input_entities=input_entities, + output_entities=output_entities, + qualified_name='pai_dlcjob-task.' + job_id, + name=job_id, + attributes={ + 'WorkspaceId': workspace_id + } + ) + response = self._do_request( + method_=self._register_lineage, request=request + ) + logger.debug(response) diff --git a/pai/common/consts.py b/pai/common/consts.py index c57c70c..162edbd 100644 --- a/pai/common/consts.py +++ b/pai/common/consts.py @@ -25,6 +25,44 @@ # PAI VPC endpoint PAI_VPC_ENDPOINT = "pai-vpc.{}.aliyuncs.com" +# All region list, https://help.aliyun.com/document_detail/40654.html +ALIYUN_ALL_REGION_ID_LIST = [ + "cn-qingdao", + "cn-beijing", + "cn-zhangjiakou", + "cn-huhehaote", + "cn-wulanchabu", + "cn-hangzhou", + "cn-shanghai", + "cn-nanjing", + "cn-fuzhou", + "cn-wuhan-lr", + "cn-shenzhen", + "cn-heyuan", + "cn-guangzhou", + "cn-chengdu", + "cn-hongkong", + "ap-southeast-1", + "ap-southeast-2", + "ap-southeast-3", + "ap-southeast-5", + "ap-southeast-6", + "ap-southeast-7", + "ap-northeast-1", + "ap-northeast-2", + "eu-west-1", + "us-east-1", + "eu-central-1", + "eu-west-1", + "me-east-1", + "me-central-1", + "cn-hangzhou-finance", + "cn-shanghai-finance-1", + "cn-shenzhen-finance-1", + "cn-beijing-finance-1", + "cn-north-2-gov-1" + ] + class Network(enum.Enum): VPC = "VPC" diff --git a/pai/common/utils.py b/pai/common/utils.py index a326c51..5239d64 100644 --- a/pai/common/utils.py +++ b/pai/common/utils.py @@ -33,6 +33,7 @@ INSTANCE_TYPE_LOCAL, INSTANCE_TYPE_LOCAL_GPU, FileSystemInputScheme, + ALIYUN_ALL_REGION_ID_LIST, ) from pai.version import VERSION @@ -109,7 +110,7 @@ def make_list_resource_iterator(method: Callable, **kwargs): def to_plain_text( - input_str: str, allowed_characters=DEFAULT_PLAIN_TEXT_ALLOW_CHARACTERS, repl_ch="_" + input_str: str, allowed_characters=DEFAULT_PLAIN_TEXT_ALLOW_CHARACTERS, repl_ch="_" ): """Replace characters in input_str if it is not in allowed_characters.""" return "".join([c if c in allowed_characters else repl_ch for c in input_str]) @@ -361,3 +362,107 @@ def name_from_base(base_name: str, sep: str = "-") -> str: return "{base_name}{sep}{timestamp}".format( base_name=base_name, sep=sep, timestamp=timestamp(sep=sep, utc=False) ) + + +def parse_region_id_from_endpoint(endpoint) -> str: + if endpoint: + for region_id in ALIYUN_ALL_REGION_ID_LIST: + if region_id in endpoint: + return region_id + return None + + +def parse_oss_uri(uri): + if uri.startswith('oss://'): + match = re.match(r'^oss://([^./]+)\.([^./]+)\.aliyuncs\.com(?:/(.+))?', uri) + if not match: + warnings.warn("Invalid OSS URI format.") + return None + bucket_name, endpoint, path = match.groups() + region_id = parse_region_id_from_endpoint(endpoint) + if not region_id: + warnings.warn("Invalid OSS URI format.") + return None + return bucket_name, region_id, '/' if path is None else path + return None + + +def parse_nas_uri(uri): + if uri.startswith('nas://'): + match = re.match(r'^nas://([^./]+)\.([^/]+)(?:/(.+))?', uri) + if not match: + warnings.warn("Invalid NAS URI format.") + return None + endpoint = match.groups()[1] + region_id = parse_region_id_from_endpoint(endpoint) + if not region_id: + warnings.warn("Invalid NAS URI format.") + return None + return uri, region_id + return None + + +def parse_cpfs_uri(uri): + if uri.startswith('cpfs://'): + match = re.match(r'^cpfs://([^./]+)\.([^/]+)(?:/(.+))?', uri) + if not match: + warnings.warn("Invalid CPFS URI format.") + return None + endpoint = match.groups()[1] + region_id = parse_region_id_from_endpoint(endpoint) + if not region_id: + warnings.warn("Invalid CPFS URI format.") + return None + return uri, region_id + return None + + +def parse_bmcpfs_uri(uri): + if uri.startswith('bmcpfs://'): + match = re.match(r'^bmcpfs://([^./]+)\.([^/]+)(?:/(.+))?', uri) + if not match: + warnings.warn("Invalid BMCPFS URI format.") + return None + endpoint = match.groups()[1] + region_id = parse_region_id_from_endpoint(endpoint) + if not region_id: + warnings.warn("Invalid BMCPFS URI format.") + return None + return uri, region_id + return None + + +def parse_local_file_uri(uri): + if uri.startswith('file:///'): + match = re.match(r'^file://(.+)', uri) + if not match: + warnings.warn("Invalid local file URI format.") + return None + return match.group(1) + return None + + +def parse_pai_dataset_uri(uri): + if uri.startswith('pai://datasets'): + match = re.match(r'^pai://datasets/([^/]+)(?:/(.+))?', uri) + if not match: + warnings.warn('Invalid PAI dataset URI format.') + return None + dataset_id, dataset_version = match.groups() + dataset_version = dataset_version if dataset_version else '1' + dataset_version = dataset_version.split('/')[0] if '/' in dataset_version else dataset_version + return dataset_id, dataset_version + return None + + +def parse_odps_uri(uri): + if uri.startswith('odps://'): + match = re.match(r'^odps://(.+)/tables/(.+)', uri) + if not match: + warnings.warn("Invalid MaxCompute URI format.") + return None + project_and_schema, table_name = match.groups() + project_name, schema = project_and_schema.split('/') if '/' in project_and_schema else ( + project_and_schema, None) + return project_name, schema, table_name + return None diff --git a/pai/session.py b/pai/session.py index 6ef6585..e3e195e 100644 --- a/pai/session.py +++ b/pai/session.py @@ -44,7 +44,6 @@ INNER_REGION_IDS = ["center"] - # Global default session used by the program. _default_session = None @@ -169,25 +168,13 @@ def _init_default_session_from_env() -> Optional["Session"]: logger.debug("Not found credential from default credential provider chain.") return - # legacy region id env var in DSW - region_id = os.getenv("dsw_region") - region_id = os.getenv("REGION", region_id) + region_id = _get_current_region_id() if not region_id: logger.debug( "No region id found(env var: REGION or dsw_region), skip init default session" ) return - dsw_instance_id = os.getenv("DSW_INSTANCE_ID") - if not dsw_instance_id: - logger.debug( - "No dsw instance id (env var: DSW_INSTANCE_ID) found, skip init default session" - ) - return - - workspace_id = os.getenv("PAI_AI_WORKSPACE_ID") - workspace_id = os.getenv("PAI_WORKSPACE_ID", workspace_id) - network = ( Network.VPC if is_domain_connectable( @@ -197,19 +184,31 @@ def _init_default_session_from_env() -> Optional["Session"]: else Network.PUBLIC ) - if dsw_instance_id and not workspace_id: - logger.debug("Getting workspace id by dsw instance id: %s", dsw_instance_id) - workspace_id = Session._get_workspace_id_by_dsw_instance_id( - dsw_instance_id=dsw_instance_id, - cred=credential_client, - region_id=region_id, - network=network, - ) - if not workspace_id: - logger.warning( - "Failed to get workspace id by dsw instance id: %s", dsw_instance_id + workspace_id = _get_current_workspace_id() + + dsw_instance_id = _get_dsw_instance_id() + if _is_running_in_dsw(): + if dsw_instance_id and not workspace_id: + logger.debug("Getting workspace id by dsw instance id: %s", dsw_instance_id) + workspace_id = Session._get_workspace_id_by_dsw_instance_id( + dsw_instance_id=dsw_instance_id, + cred=credential_client, + region_id=region_id, + network=network, ) - return + if not workspace_id: + logger.warning( + "Failed to get workspace id by dsw instance id: %s", dsw_instance_id + ) + return + elif _is_running_in_dlc(): + pass + else: + logger.debug( + "No dsw instance id (env var: DSW_INSTANCE_ID) found, skip init default session" + ) + return + bucket_name, oss_endpoint = Session.get_default_oss_storage( workspace_id, credential_client, region_id, network ) @@ -231,10 +230,8 @@ def _init_default_session_from_env() -> Optional["Session"]: return sess -def load_default_config_file() -> Optional[Dict[str, Any]]: +def load_default_config_file(config_path: Optional[str] = DEFAULT_CONFIG_PATH) -> Optional[Dict[str, Any]]: """Read config file""" - - config_path = DEFAULT_CONFIG_PATH if not os.path.exists(config_path): return @@ -255,6 +252,36 @@ def load_default_config_file() -> Optional[Dict[str, Any]]: return config +def _is_running_in_dlc() -> bool: + return os.environ.get("DLC_JOB_ID") is not None + + +def _is_running_in_dsw() -> bool: + return os.environ.get("DSW_INSTANCE_ID") is not None + + +def _get_current_region_id() -> str: + # legacy region id env var in DSW + region_id = os.getenv("dsw_region") + region_id = os.getenv("REGION", region_id) + return region_id + + +def _get_current_workspace_id() -> str: + # legacy workspace id + workspace_id = os.getenv("PAI_AI_WORKSPACE_ID") + workspace_id = os.getenv("PAI_WORKSPACE_ID", workspace_id) + return workspace_id + + +def _get_dlc_job_id() -> str: + return os.environ.get("DLC_JOB_ID") + + +def _get_dsw_instance_id() -> str: + return os.environ.get("DSW_INSTANCE_ID") + + class Session(ResourceAPIsContainerMixin): """A class responsible for communicating with PAI services.""" diff --git a/pai/toolkit/helper/utils.py b/pai/toolkit/helper/utils.py index 1a93eef..69ef10d 100644 --- a/pai/toolkit/helper/utils.py +++ b/pai/toolkit/helper/utils.py @@ -267,12 +267,13 @@ def get_workspace_api(self) -> WorkspaceAPI: def get_default_oss_storage_uri( self, workspace_id: str ) -> Tuple[Optional[str], Optional[str]]: - return Session._get_default_oss_storage( + bucket_name, endpoint = Session.get_default_oss_storage( workspace_id=workspace_id, cred=self._get_credential_client(), region_id=self.region_id, network=self.network, ) + return "oss://{}/".format(bucket_name), endpoint def set_default_oss_storage( self, workspace_id, bucket_name: str, intranet_endpoint: str diff --git a/pai/tracking/__init__.py b/pai/tracking/__init__.py new file mode 100644 index 0000000..4aa5202 --- /dev/null +++ b/pai/tracking/__init__.py @@ -0,0 +1,4 @@ +from .lineage import ( + log_lineage, + LineageEntity +) \ No newline at end of file diff --git a/pai/tracking/lineage.py b/pai/tracking/lineage.py new file mode 100644 index 0000000..4047a9d --- /dev/null +++ b/pai/tracking/lineage.py @@ -0,0 +1,232 @@ +# Copyright 2023 Alibaba, Inc. or its affiliates. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +from typing import List, Optional +import json +from dataclasses import dataclass + +from Tea.exceptions import TeaException + +from pai.api.lineage import _LineageEntity +from pai.common.logging import get_logger +from pai.common.utils import parse_oss_uri, parse_nas_uri, parse_cpfs_uri, parse_local_file_uri, parse_pai_dataset_uri, \ + parse_odps_uri, parse_bmcpfs_uri +from pai.session import get_default_session, _is_running_in_dlc, \ + _get_current_region_id, _get_dlc_job_id + +logger = get_logger(__name__) + +# Global default Lineage object used by the program. +_default_lineage = None + + +@dataclass +class LineageEntity: + """ + LineageEntity is a class representing lineage entities, including local file paths, datasets, OSS files, NAS files, CPFS, and MaxCompute resources. + + Attributes: + uri (str): The file URI, supporting the following types: + + - OSS address: Format: oss://.., e.g., oss://dlc-upload-test.oss-cn-hangzhou.aliyuncs.com/dataset/ + - Ordinary NAS: Format: nas://./subpath/to/dir/, where represents the NAS file system ID. E.g., nas://fsId-mountTarget.cn-hangzhou.nas.aliyuncs.com/nas/mountTarget/ + - Extreme NAS: Format: nas://./subpath/to/dir/, where represents the NAS file system ID. E.g., nas://007636fd-gfyy.cn-hangzhou.extreme.nas.aliyuncs.com/mnt/foo/ + - CPFS: + - CPFS1.0 Format: cpfs://./subpath/to/dir/, where is an 8-character ASCII string representing the CPFS file system ID. + - CPFS2.0 Format: cpfs://.//, where is a 16-character ASCII string representing the CPFS file system ID, and is the protocol service ID. E.g., cpfs://cpfs-00f4b992044a71be.cn-hangzhou/ptc-008727a69e07d3cf/exp-00d695a1b9f6c926/ + - BMCPFS: Format: bmcpfs://-., where is a 16-character ASCII string representing the CPFS file system ID. E.g.,bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com/ + - Local mounted file path: Format: file://, e.g., file:///mnt/dataset/train. + - PAI dataset: Format: pai://datasets//, where is the PAI dataset ID, and is the PAI dataset version. E.g., pai://datasets/d-f0mniq7j4cgk2x2rrn/v1 + - MaxCompute table: Format: odps:///[schema]/tables/, where is the MaxCompute project name, is the MaxCompute table schema, optional. (see: https://help.aliyun.com/zh/maxcompute/user-guide/schemas?spm=a2c4g.11186623.0.i64), and is the MaxCompute table name. E.g., odps://project_mc/tables/flow_model_label_table_v1 + resource_type (str, optional): The resource type, default as "dataset". Users can customize this. Possible values include: + + - "dataset": Dataset. + - "model": Model. + - User-defined types. + resource_use (str, optional): The resource usage, default as "train". Users can customize this. + + - For "dataset" type, possible values include: + - "train": Training data. + - "validation": Validation data. + - User-defined types. + - For "model" type, possible values include: + - "base": Base model. + - "extension": Extended model. + - User-defined usages. + + """ + # URI (Uniform Resource Identifier) + uri: str + # The resource type, default as "dataset" + resource_type: Optional[str] = 'dataset' + # The resource usage, default as "train" + resource_use: Optional[str] = 'train' + + +def _find_datasource_uri_by_mount_path(mount_path: str): + try: + with open('/var/DATA_SOURCES', 'r') as file: + data_sources = json.load(file) + except (json.JSONDecodeError, FileNotFoundError) as e: + logger.warning("Error parsing data source JSON or file not found: %s", e) + return None + + for source in data_sources: + mount_path_in_source = source.get("MountPath", '') + uri_in_source = source.get("Uri") + + if mount_path.startswith(mount_path_in_source): + remaining_path = mount_path[len(mount_path_in_source):] + return uri_in_source + remaining_path + + return None + + +def _fill_lineage_entity(entity: LineageEntity) -> _LineageEntity: + input_uri = entity.uri + path = parse_local_file_uri(input_uri) + if path: + uri = _find_datasource_uri_by_mount_path(path) + if uri: + input_uri = uri + else: + logger.warning(f"can not find uri by mount path: {path}") + parsed_result = parse_oss_uri(input_uri) + if parsed_result: + bucket_name, region_id, path = parsed_result + _entity = _LineageEntity() + _entity.EntityType = 'oss-file' + _entity.Attributes = { + 'Bucket': bucket_name, + 'Path': path, + 'ResourceType': entity.resource_type, + 'ResourceUse': entity.resource_use, + 'RegionId': region_id + } + return _entity + parsed_result = parse_nas_uri(input_uri) + if not parsed_result: + parsed_result = parse_cpfs_uri(input_uri) + if not parsed_result: + parsed_result = parse_bmcpfs_uri(input_uri) + if parsed_result: + uri, region_id = parsed_result + _entity = _LineageEntity() + _entity.EntityType = 'nas-file' + _entity.Attributes = { + 'Uri': uri, + 'ResourceType': entity.resource_type, + 'ResourceUse': entity.resource_use, + 'RegionId': region_id + } + return _entity + + parsed_result = parse_pai_dataset_uri(input_uri) + if parsed_result: + dataset_id, dataset_version = parsed_result + try: + dataset_detail = get_default_session().dataset_api.get(dataset_id) + if dataset_detail: + _entity = _LineageEntity() + if dataset_detail.get('Provider') == 'pai': + _entity.QualifiedName = f"pai-dataset.{dataset_id}_{dataset_version}".format( + dataset_id=dataset_id, + dataset_version=dataset_version) + _entity.Name = dataset_detail['Name'] + _entity.Attributes = { + 'ResourceUse': entity.resource_use, + 'Provider': 'pai' + } + return _entity + else: + _entity.QualifiedName = f"pai-dataset.{dataset_id}_{dataset_version}".format( + dataset_id=dataset_id, + dataset_version=dataset_version) + _entity.Name = dataset_detail['Name'] + _entity.Attributes = { + 'ResourceType': entity.resource_type, + 'ResourceUse': entity.resource_use, + 'RegionId': _get_current_region_id(), + 'Uri': dataset_detail['Uri'], + 'VersionName': dataset_version + } + return _entity + except TeaException as e: + logger.warning(f"can not find dataset by dataset_id: {dataset_id}, {str(e)}") + parsed_result = parse_odps_uri(input_uri) + if parsed_result: + project_name, schema, table_name = parsed_result + _entity = _LineageEntity() + if schema: + _entity.QualifiedName = f"maxcompute-table.{project_name}.{schema}.{table_name}".format( + project_name=project_name, schema=schema, table_name=table_name) + else: + _entity.QualifiedName = f"maxcompute-table.{project_name}.{table_name}".format( + project_name=project_name, table_name=table_name) + _entity.Attributes = { + 'ResourceType': entity.resource_type, + 'ResourceUse': entity.resource_use + } + return _entity + return None + + +class Lineage(object): + + def __init__(self): + super() + + def log_lineage(self, input_entities: List[LineageEntity], output_entities: List[LineageEntity]): + """ + Recommended to use the log_lineage(input_entities: List[LineageEntity], output_entities: List[LineageEntity]) + function directly. + """ + session = get_default_session() + if _is_running_in_dlc(): + _input_entities = [] + _output_entities = [] + for input_entity in input_entities: + entity = _fill_lineage_entity(input_entity) + if entity: + _input_entities.append(entity) + for output_entity in output_entities: + entity = _fill_lineage_entity(output_entity) + if entity: + _output_entities.append(entity) + if len(_input_entities) == 0 or len(_output_entities) == 0: + logger.warning("input_entities or output_entities is empty, ignore.") + else: + session.lineage_api.log_lineage(_input_entities, _output_entities, _get_dlc_job_id(), + session.workspace_id) + logger.debug(_input_entities) + logger.debug(_output_entities) + logger.debug(_get_dlc_job_id()) + logger.debug(session.workspace_id) + else: + logger.warning("log_lineage is not supported in non-DLC environment.") + + +def log_lineage(input_entities: List[LineageEntity], output_entities: List[LineageEntity]): + """ + Records the lineage relationships generated during model training/data processing, etc. Supported execution + environments include: DLC. If running in other environments, lineage recording will be ignored. + + Args: + input_entities (List[LineageEntity]): A list of input entities, each representing the source of data in DLC tasks. + output_entities (List[LineageEntity]): A list of output entities, each representing the output of data in DLC tasks. + """ + global _default_lineage + if not _default_lineage: + _default_lineage = Lineage() + + _default_lineage.log_lineage(input_entities, output_entities) diff --git a/tests/integration/test_lineage.py b/tests/integration/test_lineage.py new file mode 100644 index 0000000..a61a083 --- /dev/null +++ b/tests/integration/test_lineage.py @@ -0,0 +1,122 @@ +# Copyright 2023 Alibaba, Inc. or its affiliates. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import logging + +from pai.common.logging import get_logger +from tests.integration import BaseIntegTestCase +from pai.tracking import log_lineage, LineageEntity +from tests.unit.utils import mock_env + + +class TestLineage(BaseIntegTestCase): + + def test_run_in_non_dlc_env(self): + with self.assertLogs(logger=get_logger('pai.tracking.lineage'), level=logging.WARNING) as captured: + log_lineage(input_entities=[ + LineageEntity(uri='pai://datasets/d-f0mniq7j4cgk2x2rrn/v1', resource_type='dataset', + resource_use='train'), + ], output_entities=[ + LineageEntity(uri='file:///mnt/model/', resource_type='model', resource_use='extension')]) + self.assertIn("log_lineage is not supported in non-DLC environment.", captured.output[0]) + + @mock_env(DLC_JOB_ID='d123456') + @mock_env(REGION='cn-hangzhou') + def test_log_lineage_with_no_var_datasources_file_in_dlc(self): + with self.assertLogs(logger=get_logger('pai.tracking.lineage'), level=logging.WARNING) as captured: + log_lineage( + input_entities=[ + LineageEntity(uri='file:///mnt/models/model.pth', resource_type='model', resource_use='extension')], + output_entities=[LineageEntity(uri='oss://test-bucket.oss-cn-shanghai.aliyuncs.com/model/model.pth', + resource_type='model', resource_use='extension')]) + self.assertIn( + "WARNING:pai.tracking.lineage:Error parsing data source JSON or file not found: [Errno 2] No such file or directory: '/var/DATA_SOURCES'", + captured.output[0]) + + @mock_env(DLC_JOB_ID='d123456') + @mock_env(REGION='cn-hangzhou') + def test_valid_log_lineage_in_dlc(self): + with self.assertLogs(logger=get_logger('pai.tracking.lineage'), level=logging.DEBUG) as captured: + log_lineage(input_entities=[ + LineageEntity(uri='oss://test-bucket.oss-cn-shanghai.aliyuncs.com/models/ALBERTv2-Chinese-NewsBase.pth', + resource_type='model', + resource_use='base'), + LineageEntity(uri='nas://fsId-mountTarget.cn-hangzhou.nas.aliyuncs.com/nas/mountTarget/', + resource_type='dataset', + resource_use='train'), + LineageEntity(uri='cpfs://cpfs-0077f18ed141a84e.cn-hangzhou/ptc-00f31da01c2a9c12/exp-005607872325f692/', + resource_type='dataset', + resource_use='train'), + LineageEntity(uri='bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com/', + resource_type='dataset', + resource_use='train'), + LineageEntity(uri='pai://datasets/d-jipftzxinc7nm1z0uh/v1', resource_type='dataset', + resource_use='train'), + LineageEntity(uri='odps://project_mc/tables/flow_model_label_table_v1', resource_type='dataset', + resource_use='test') + ], output_entities=[ + LineageEntity(uri='oss://hangzhoutest01.oss-cn-hangzhou-internal.aliyuncs.com/models/model.pth', + resource_type='model', resource_use='extension')]) + self.maxDiff = None + self.assertEquals( + "DEBUG:pai.tracking.lineage:[_LineageEntity(Attributes={'Bucket': 'test-bucket', 'Path': 'models/ALBERTv2-Chinese-NewsBase.pth', 'ResourceType': 'model', 'ResourceUse': 'base', 'RegionId': 'cn-shanghai'}, EntityType='oss-file', Name=None, QualifiedName=None), _LineageEntity(Attributes={'Uri': 'nas://fsId-mountTarget.cn-hangzhou.nas.aliyuncs.com/nas/mountTarget/', 'ResourceType': 'dataset', 'ResourceUse': 'train', 'RegionId': 'cn-hangzhou'}, EntityType='nas-file', Name=None, QualifiedName=None), _LineageEntity(Attributes={'Uri': 'cpfs://cpfs-0077f18ed141a84e.cn-hangzhou/ptc-00f31da01c2a9c12/exp-005607872325f692/', 'ResourceType': 'dataset', 'ResourceUse': 'train', 'RegionId': 'cn-hangzhou'}, EntityType='nas-file', Name=None, QualifiedName=None), _LineageEntity(Attributes={'Uri': 'bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com/', 'ResourceType': 'dataset', 'ResourceUse': 'train', 'RegionId': 'cn-wulanchabu'}, EntityType='nas-file', Name=None, QualifiedName=None), _LineageEntity(Attributes={'ResourceUse': 'train', 'Provider': 'pai'}, EntityType=None, Name='Aishell_1_subset_qwen', QualifiedName='pai-dataset.d-jipftzxinc7nm1z0uh_v1'), _LineageEntity(Attributes={'ResourceType': 'dataset', 'ResourceUse': 'test'}, EntityType=None, Name=None, QualifiedName='maxcompute-table.project_mc.flow_model_label_table_v1')]", + captured.output[0]) + self.assertEquals( + "DEBUG:pai.tracking.lineage:[_LineageEntity(Attributes={'Bucket': 'hangzhoutest01', 'Path': 'models/model.pth', 'ResourceType': 'model', 'ResourceUse': 'extension', 'RegionId': 'cn-hangzhou'}, EntityType='oss-file', Name=None, QualifiedName=None)]", + captured.output[1]) + self.assertEquals("DEBUG:pai.tracking.lineage:d123456", captured.output[2]) + + @mock_env(DLC_JOB_ID='d123456') + @mock_env(REGION='cn-hangzhou') + def test_log_lineage_with_invalid_format_input_entities_in_dlc(self): + with self.assertLogs(logger=get_logger('pai.tracking.lineage'), level=logging.WARNING) as captured: + log_lineage(input_entities=[ + LineageEntity(uri='oss://test-bucket/models/ALBERTv2-Chinese-NewsBase.pth', resource_type='model', + resource_use='base'), + LineageEntity(uri='pai://datasets/', resource_type='dataset', resource_use='train'), + LineageEntity(uri='odps://project_mc/flow_model_label_table_v1', resource_type='dataset', + resource_use='test') + ], output_entities=[ + LineageEntity(uri='oss://test-bucket.oss-cn-shanghai.aliyuncs.com/model/model.pth', + resource_type='model', resource_use='extension')]) + self.assertIn("input_entities or output_entities is empty, ignore.", captured.output[0]) + + @mock_env(DLC_JOB_ID='d123456') + @mock_env(REGION='cn-hangzhou') + def test_log_lineage_with_invalid_format_output_entities_in_dlc(self): + with self.assertLogs(logger=get_logger('pai.tracking.lineage'), level=logging.WARNING) as captured: + log_lineage(input_entities=[ + LineageEntity(uri='oss://test-bucket.oss-cn-shanghai.aliyuncs.com/models/ALBERTv2-Chinese-NewsBase.pth', + resource_type='model', + resource_use='base'), + LineageEntity(uri='pai://datasets/d-jipftzxinc7nm1z0uh/v1', resource_type='dataset', + resource_use='train'), + LineageEntity(uri='odps://project_mc/tables/flow_model_label_table_v1', resource_type='dataset', + resource_use='test') + ], output_entities=[ + LineageEntity(uri='oss://test-bucket/models/ALBERTv2-Chinese-NewsBase.pth', resource_type='model', + resource_use='extension'), + LineageEntity(uri='pai://datasets/', resource_type='dataset', resource_use='val'), + LineageEntity(uri='odps://project_mc/flow_model_label_table_v1', resource_type='dataset', + resource_use='test') + ]) + self.assertIn("input_entities or output_entities is empty, ignore.", captured.output[0]) + + @mock_env(DLC_JOB_ID='d123456') + @mock_env(REGION='cn-hangzhou') + def test_log_lineage_with_empty_input_output_entities_in_dlc(self): + with self.assertLogs(logger=get_logger('pai.tracking.lineage'), level=logging.WARNING) as captured: + log_lineage([], []) + self.assertIn("input_entities or output_entities is empty, ignore.", captured.output[0]) + log_lineage(input_entities=[LineageEntity(uri='')], output_entities=[LineageEntity(uri='')]) + self.assertIn("input_entities or output_entities is empty, ignore.", captured.output[1]) diff --git a/tests/unit/test_session.py b/tests/unit/test_session.py index f0f9b15..e21a2b1 100644 --- a/tests/unit/test_session.py +++ b/tests/unit/test_session.py @@ -13,13 +13,33 @@ # limitations under the License. import json +import shutil import tempfile from unittest.case import TestCase -from pai.session import Session +from pai.common.consts import DEFAULT_CONFIG_PATH +from .utils import mock_env + +from pai.session import Session, get_default_session, load_default_config_file, setup_default_session +import os + +DEFAULT_CONFIG_PATH_BK = DEFAULT_CONFIG_PATH + '.bk' class TestSession(TestCase): + def setUp(self): + if os.path.exists(DEFAULT_CONFIG_PATH): + self.local_config = load_default_config_file(DEFAULT_CONFIG_PATH) + os.environ['PAI_WORKSPACE_ID'] = self.local_config['workspace_id'] + os.environ['REGION'] = self.local_config['region_id'] + shutil.move(DEFAULT_CONFIG_PATH, DEFAULT_CONFIG_PATH_BK) + + def tearDown(self): + os.environ.pop('PAI_WORKSPACE_ID', None) + os.environ.pop('REGION', None) + if os.path.exists(DEFAULT_CONFIG_PATH_BK): + shutil.move(DEFAULT_CONFIG_PATH_BK, DEFAULT_CONFIG_PATH) + def test_save_config(self): d = { "region_id": "cn-hangzhou", @@ -35,3 +55,22 @@ def test_save_config(self): res = json.load(f) self.assertEqual(res, d) + + @mock_env(DSW_INSTANCE_ID='dsw-378f4930c04191016') + def test_get_default_session_in_dsw(self): + s = get_default_session() + self.assertEqual(s.region_id, self.local_config['region_id']) + self.assertEqual(s.workspace_id, self.local_config['workspace_id']) + + @mock_env(DLC_JOB_ID='dlcv25vrbljblbgh') + def test_get_default_session_in_dlc(self): + s = get_default_session() + self.assertEqual(s.region_id, self.local_config['region_id']) + self.assertEqual(s.workspace_id, self.local_config['workspace_id']) + + def test_set_default_session(self): + setup_default_session(region_id="cn-hangzhou", workspace_id="workspace_id") + s = get_default_session() + self.assertEqual(s.workspace_id, 'workspace_id') + self.assertEqual(s.region_id, 'cn-hangzhou') + pass diff --git a/tests/unit/test_utils.py b/tests/unit/test_utils.py index 62d2298..25cd357 100644 --- a/tests/unit/test_utils.py +++ b/tests/unit/test_utils.py @@ -19,7 +19,9 @@ import os from pai.common.oss_utils import is_oss_uri -from pai.common.utils import generate_repr, is_filesystem_uri, is_odps_table_uri +from pai.common.utils import generate_repr, is_filesystem_uri, is_odps_table_uri, parse_region_id_from_endpoint, \ + parse_oss_uri, parse_nas_uri, parse_cpfs_uri, parse_local_file_uri, parse_pai_dataset_uri, parse_odps_uri, \ + parse_bmcpfs_uri from tests.test_data import SCRIPT_DIR_PATH from tests.unit import BaseUnitTestCase from tests.unit.utils import extract_odps_table_info, file_checksum @@ -197,3 +199,113 @@ def test_is_filesystem_uri(self): with self.subTest(tc=tc): result = is_filesystem_uri(tc["arguments"]["uri"]) self.assertEqual(result, tc["expected"]) + + def test_parse_region_id_from_valid_endpoint(self): + self.assertEqual(parse_region_id_from_endpoint("cn-shanghai"), 'cn-shanghai') + self.assertEqual(parse_region_id_from_endpoint("cn-shanghai-internal"), 'cn-shanghai') + self.assertEqual(parse_region_id_from_endpoint("cn-shanghai-internal.aliyuncs.com"), 'cn-shanghai') + + def test_parse_region_id_from_invalid_endpoint(self): + self.assertIsNone(parse_region_id_from_endpoint("http://someotherendpoint.com")) + self.assertIsNone(parse_region_id_from_endpoint("")) + self.assertIsNone(parse_region_id_from_endpoint(None)) + + def test_parse_valid_oss_uri(self): + self.assertEqual(parse_oss_uri('oss://test-bucket.oss-cn-hangzhou.aliyuncs.com/models/ALBERTv2-Chinese' + '-NewsBase.pth'), + ('test-bucket', 'cn-hangzhou', 'models/ALBERTv2-Chinese-NewsBase.pth')) + self.assertEqual( + parse_oss_uri( + 'oss://test-bucket.oss-cn-hangzhou-internal.aliyuncs.com/models/ALBERTv2-Chinese-NewsBase.pth'), + ('test-bucket', 'cn-hangzhou', 'models/ALBERTv2-Chinese-NewsBase.pth')) + self.assertEqual(parse_oss_uri('oss://test-bucket.oss-cn-hangzhou.aliyuncs.com/'), + ('test-bucket', 'cn-hangzhou', '/')) + self.assertEqual(parse_oss_uri('oss://test-bucket.oss-cn-hangzhou.aliyuncs.com'), + ('test-bucket', 'cn-hangzhou', '/')) + + def test_parse_invalid_oss_uri(self): + self.assertIsNone(parse_oss_uri('oss://test-bucket/models/ALBERTv2-Chinese' + '-NewsBase.pth')) + self.assertIsNone(parse_oss_uri('oss://')) + self.assertIsNone(parse_oss_uri('')) + + def test_parse_valid_nas_uri(self): + self.assertEqual(parse_nas_uri('nas://007636fd-gfyy.cn-hangzhou.extreme.nas.aliyuncs.com/mnt/foo/'), + ('nas://007636fd-gfyy.cn-hangzhou.extreme.nas.aliyuncs.com/mnt/foo/', 'cn-hangzhou')) + self.assertEqual(parse_nas_uri('nas://007636fd-gfyy.cn-hangzhou.extreme.nas.aliyuncs.com/'), + ('nas://007636fd-gfyy.cn-hangzhou.extreme.nas.aliyuncs.com/', 'cn-hangzhou')) + self.assertEqual(parse_nas_uri('nas://007636fd-gfyy.cn-hangzhou.extreme.nas.aliyuncs.com'), + ('nas://007636fd-gfyy.cn-hangzhou.extreme.nas.aliyuncs.com', 'cn-hangzhou')) + self.assertEqual(parse_nas_uri('nas://066e54a580.cn-hangzhou/'), + ('nas://066e54a580.cn-hangzhou/', 'cn-hangzhou')) + + def test_parse_invalid_nas_uri(self): + self.assertIsNone(parse_nas_uri('nas://007636fd-gfyy.extreme.nas.aliyuncs.com/mnt/foo/')) + self.assertIsNone(parse_nas_uri('nas://')) + self.assertIsNone(parse_nas_uri('')) + + def test_parse_valid_cpfs_uri(self): + self.assertEqual( + parse_cpfs_uri('cpfs://cpfs-00f4b992044a71be.cn-hangzhou/ptc-008727a69e07d3cf/exp-00d695a1b9f6c926/'), + ('cpfs://cpfs-00f4b992044a71be.cn-hangzhou/ptc-008727a69e07d3cf/exp-00d695a1b9f6c926/', 'cn-hangzhou')) + self.assertEqual(parse_cpfs_uri('cpfs://cpfs-00f4b992044a71be.cn-hangzhou/'), + ('cpfs://cpfs-00f4b992044a71be.cn-hangzhou/', 'cn-hangzhou')) + self.assertEqual(parse_cpfs_uri('cpfs://cpfs-00f4b992044a71be.cn-hangzhou'), + ('cpfs://cpfs-00f4b992044a71be.cn-hangzhou', 'cn-hangzhou')) + + def test_parse_invalid_cpfs_uri(self): + self.assertIsNone(parse_cpfs_uri('cpfs://cpfs-00f4b992044a71be/mnt/foo/')) + self.assertIsNone(parse_cpfs_uri('cpfs://')) + self.assertIsNone(parse_cpfs_uri('')) + + def test_parse_valid_bmcpfs_uri(self): + self.assertEqual( + parse_bmcpfs_uri('bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com/sub/dir'), + ('bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com/sub/dir', 'cn-wulanchabu')) + self.assertEqual(parse_bmcpfs_uri('bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com/'), + ('bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com/', 'cn-wulanchabu')) + self.assertEqual(parse_bmcpfs_uri('bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com'), + ('bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com', 'cn-wulanchabu')) + + def test_parse_invalid_bmcpfs_uri(self): + self.assertIsNone(parse_bmcpfs_uri('bmcpfs://cpfs-291070fd9529c747-000001.cpfs.aliyuncs.com/')) + self.assertIsNone(parse_bmcpfs_uri('bmcpfs://')) + self.assertIsNone(parse_bmcpfs_uri('')) + + def test_parse_valid_local_file_uri(self): + self.assertEqual(parse_local_file_uri('file:///mnt/dataset_123-456+789'), + '/mnt/dataset_123-456+789') + self.assertEqual(parse_local_file_uri('file:///mnt/dataset 123'), + '/mnt/dataset 123') + self.assertEqual(parse_local_file_uri('file:///'), + '/') + + def test_parse_invalid_local_file_uri(self): + self.assertIsNone(parse_local_file_uri('file://mnt/dataset')) + self.assertIsNone(parse_local_file_uri('file://')) + self.assertIsNone(parse_local_file_uri('')) + + def test_parse_valid_pai_dataset_uri(self): + self.assertEqual(parse_pai_dataset_uri('pai://datasets/d-123456'), + ('d-123456', '1')) + self.assertEqual(parse_pai_dataset_uri('pai://datasets/d-123456/2'), + ('d-123456', '2')) + self.assertEqual(parse_pai_dataset_uri('pai://datasets/d-123456/2/3'), + ('d-123456', '2')) + + def test_parse_invalid_pai_dataset_uri(self): + self.assertIsNone(parse_pai_dataset_uri('pai://datasets/')) + self.assertIsNone(parse_pai_dataset_uri('pai://')) + self.assertIsNone(parse_pai_dataset_uri('')) + + def test_parse_valid_odps_uri(self): + self.assertEqual(parse_odps_uri('odps://project_mc/schema1/tables/flow_model_label_table_v1'), + ('project_mc', 'schema1', 'flow_model_label_table_v1')) + self.assertEqual(parse_odps_uri('odps://project_mc/tables/flow_model_label_table_v1'), + ('project_mc', None, 'flow_model_label_table_v1')) + + def test_parse_invalid_odps_uri(self): + self.assertIsNone(parse_odps_uri('odps://project_mc/tables/')) + self.assertIsNone(parse_odps_uri('odps://project_mc/')) + self.assertIsNone(parse_odps_uri('odps://')) + self.assertIsNone(parse_odps_uri('')) From ebc501891c27dc98836c15f05dcfc62f5da473cf Mon Sep 17 00:00:00 2001 From: Everett Li Date: Wed, 13 Nov 2024 17:20:06 +0800 Subject: [PATCH 03/13] lint: code format --- pai/api/api_container.py | 4 +- pai/api/lineage.py | 40 +++-- pai/common/consts.py | 4 +- pai/common/utils.py | 49 +++--- pai/session.py | 4 +- pai/tracking/__init__.py | 5 +- pai/tracking/lineage.py | 129 ++++++++------ tests/integration/test_lineage.py | 271 +++++++++++++++++++++--------- tests/unit/test_session.py | 38 +++-- tests/unit/test_utils.py | 235 ++++++++++++++++++-------- 10 files changed, 515 insertions(+), 264 deletions(-) diff --git a/pai/api/api_container.py b/pai/api/api_container.py index 42e349f..924e056 100644 --- a/pai/api/api_container.py +++ b/pai/api/api_container.py @@ -24,9 +24,9 @@ from .code_source import CodeSourceAPI from .dataset import DatasetAPI from .experiment import ExperimentAPI -from .lineage import LineageAPI from .image import ImageAPI from .job import JobAPI +from .lineage import LineageAPI from .model import ModelAPI from .pipeline import PipelineAPI from .pipeline_run import PipelineRunAPI @@ -217,4 +217,4 @@ def experiment_api(self) -> ExperimentAPI: @property def lineage_api(self) -> LineageAPI: - return self.get_api_by_resource(PAIRestResourceTypes.Lineage) \ No newline at end of file + return self.get_api_by_resource(PAIRestResourceTypes.Lineage) diff --git a/pai/api/lineage.py b/pai/api/lineage.py index b0f5beb..b51073b 100644 --- a/pai/api/lineage.py +++ b/pai/api/lineage.py @@ -12,13 +12,13 @@ # See the License for the specific language governing permissions and # limitations under the License. from dataclasses import dataclass -from typing import List, Dict, Optional +from typing import Dict, List, Optional +from ..common.logging import get_logger from ..libs.alibabacloud_aiworkspace20210204.models import ( LineageEntity, RegisterLineageRequest, ) -from ..common.logging import get_logger from .base import ServiceName, WorkspaceScopedResourceAPI logger = get_logger(__name__) @@ -37,28 +37,40 @@ class LineageAPI(WorkspaceScopedResourceAPI): _register_lineage = "register_lineage_with_options" - def log_lineage(self, inputs: List[_LineageEntity], outputs: List[_LineageEntity], job_id: str, workspace_id: str): + def log_lineage( + self, + inputs: List[_LineageEntity], + outputs: List[_LineageEntity], + job_id: str, + workspace_id: str, + ): input_entities = [] output_entities = [] for input in inputs: input_entities.append( - LineageEntity(attributes=input.Attributes, entity_type=input.EntityType, name=input.Name, - qualified_name=input.QualifiedName)) + LineageEntity( + attributes=input.Attributes, + entity_type=input.EntityType, + name=input.Name, + qualified_name=input.QualifiedName, + ) + ) for output in outputs: output_entities.append( - LineageEntity(attributes=output.Attributes, entity_type=output.EntityType, name=output.Name, - qualified_name=output.QualifiedName)) + LineageEntity( + attributes=output.Attributes, + entity_type=output.EntityType, + name=output.Name, + qualified_name=output.QualifiedName, + ) + ) request = RegisterLineageRequest( register_task_as_entity=True, input_entities=input_entities, output_entities=output_entities, - qualified_name='pai_dlcjob-task.' + job_id, + qualified_name="pai_dlcjob-task." + job_id, name=job_id, - attributes={ - 'WorkspaceId': workspace_id - } - ) - response = self._do_request( - method_=self._register_lineage, request=request + attributes={"WorkspaceId": workspace_id}, ) + response = self._do_request(method_=self._register_lineage, request=request) logger.debug(response) diff --git a/pai/common/consts.py b/pai/common/consts.py index 162edbd..e7f6200 100644 --- a/pai/common/consts.py +++ b/pai/common/consts.py @@ -60,8 +60,8 @@ "cn-shanghai-finance-1", "cn-shenzhen-finance-1", "cn-beijing-finance-1", - "cn-north-2-gov-1" - ] + "cn-north-2-gov-1", +] class Network(enum.Enum): diff --git a/pai/common/utils.py b/pai/common/utils.py index 5239d64..99d8f89 100644 --- a/pai/common/utils.py +++ b/pai/common/utils.py @@ -30,10 +30,10 @@ from semantic_version import Version from pai.common.consts import ( + ALIYUN_ALL_REGION_ID_LIST, INSTANCE_TYPE_LOCAL, INSTANCE_TYPE_LOCAL_GPU, FileSystemInputScheme, - ALIYUN_ALL_REGION_ID_LIST, ) from pai.version import VERSION @@ -110,7 +110,7 @@ def make_list_resource_iterator(method: Callable, **kwargs): def to_plain_text( - input_str: str, allowed_characters=DEFAULT_PLAIN_TEXT_ALLOW_CHARACTERS, repl_ch="_" + input_str: str, allowed_characters=DEFAULT_PLAIN_TEXT_ALLOW_CHARACTERS, repl_ch="_" ): """Replace characters in input_str if it is not in allowed_characters.""" return "".join([c if c in allowed_characters else repl_ch for c in input_str]) @@ -373,8 +373,8 @@ def parse_region_id_from_endpoint(endpoint) -> str: def parse_oss_uri(uri): - if uri.startswith('oss://'): - match = re.match(r'^oss://([^./]+)\.([^./]+)\.aliyuncs\.com(?:/(.+))?', uri) + if uri.startswith("oss://"): + match = re.match(r"^oss://([^./]+)\.([^./]+)\.aliyuncs\.com(?:/(.+))?", uri) if not match: warnings.warn("Invalid OSS URI format.") return None @@ -383,13 +383,13 @@ def parse_oss_uri(uri): if not region_id: warnings.warn("Invalid OSS URI format.") return None - return bucket_name, region_id, '/' if path is None else path + return bucket_name, region_id, "/" if path is None else path return None def parse_nas_uri(uri): - if uri.startswith('nas://'): - match = re.match(r'^nas://([^./]+)\.([^/]+)(?:/(.+))?', uri) + if uri.startswith("nas://"): + match = re.match(r"^nas://([^./]+)\.([^/]+)(?:/(.+))?", uri) if not match: warnings.warn("Invalid NAS URI format.") return None @@ -403,8 +403,8 @@ def parse_nas_uri(uri): def parse_cpfs_uri(uri): - if uri.startswith('cpfs://'): - match = re.match(r'^cpfs://([^./]+)\.([^/]+)(?:/(.+))?', uri) + if uri.startswith("cpfs://"): + match = re.match(r"^cpfs://([^./]+)\.([^/]+)(?:/(.+))?", uri) if not match: warnings.warn("Invalid CPFS URI format.") return None @@ -418,8 +418,8 @@ def parse_cpfs_uri(uri): def parse_bmcpfs_uri(uri): - if uri.startswith('bmcpfs://'): - match = re.match(r'^bmcpfs://([^./]+)\.([^/]+)(?:/(.+))?', uri) + if uri.startswith("bmcpfs://"): + match = re.match(r"^bmcpfs://([^./]+)\.([^/]+)(?:/(.+))?", uri) if not match: warnings.warn("Invalid BMCPFS URI format.") return None @@ -433,8 +433,8 @@ def parse_bmcpfs_uri(uri): def parse_local_file_uri(uri): - if uri.startswith('file:///'): - match = re.match(r'^file://(.+)', uri) + if uri.startswith("file:///"): + match = re.match(r"^file://(.+)", uri) if not match: warnings.warn("Invalid local file URI format.") return None @@ -443,26 +443,31 @@ def parse_local_file_uri(uri): def parse_pai_dataset_uri(uri): - if uri.startswith('pai://datasets'): - match = re.match(r'^pai://datasets/([^/]+)(?:/(.+))?', uri) + if uri.startswith("pai://datasets"): + match = re.match(r"^pai://datasets/([^/]+)(?:/(.+))?", uri) if not match: - warnings.warn('Invalid PAI dataset URI format.') + warnings.warn("Invalid PAI dataset URI format.") return None dataset_id, dataset_version = match.groups() - dataset_version = dataset_version if dataset_version else '1' - dataset_version = dataset_version.split('/')[0] if '/' in dataset_version else dataset_version + dataset_version = dataset_version if dataset_version else "1" + dataset_version = ( + dataset_version.split("/")[0] if "/" in dataset_version else dataset_version + ) return dataset_id, dataset_version return None def parse_odps_uri(uri): - if uri.startswith('odps://'): - match = re.match(r'^odps://(.+)/tables/(.+)', uri) + if uri.startswith("odps://"): + match = re.match(r"^odps://(.+)/tables/(.+)", uri) if not match: warnings.warn("Invalid MaxCompute URI format.") return None project_and_schema, table_name = match.groups() - project_name, schema = project_and_schema.split('/') if '/' in project_and_schema else ( - project_and_schema, None) + project_name, schema = ( + project_and_schema.split("/") + if "/" in project_and_schema + else (project_and_schema, None) + ) return project_name, schema, table_name return None diff --git a/pai/session.py b/pai/session.py index e3e195e..b4d6640 100644 --- a/pai/session.py +++ b/pai/session.py @@ -230,7 +230,9 @@ def _init_default_session_from_env() -> Optional["Session"]: return sess -def load_default_config_file(config_path: Optional[str] = DEFAULT_CONFIG_PATH) -> Optional[Dict[str, Any]]: +def load_default_config_file( + config_path: Optional[str] = DEFAULT_CONFIG_PATH, +) -> Optional[Dict[str, Any]]: """Read config file""" if not os.path.exists(config_path): return diff --git a/pai/tracking/__init__.py b/pai/tracking/__init__.py index 4aa5202..529534f 100644 --- a/pai/tracking/__init__.py +++ b/pai/tracking/__init__.py @@ -1,4 +1 @@ -from .lineage import ( - log_lineage, - LineageEntity -) \ No newline at end of file +from .lineage import LineageEntity, log_lineage diff --git a/pai/tracking/lineage.py b/pai/tracking/lineage.py index 4047a9d..2ac4f6f 100644 --- a/pai/tracking/lineage.py +++ b/pai/tracking/lineage.py @@ -11,18 +11,29 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -from typing import List, Optional import json from dataclasses import dataclass +from typing import List, Optional from Tea.exceptions import TeaException from pai.api.lineage import _LineageEntity from pai.common.logging import get_logger -from pai.common.utils import parse_oss_uri, parse_nas_uri, parse_cpfs_uri, parse_local_file_uri, parse_pai_dataset_uri, \ - parse_odps_uri, parse_bmcpfs_uri -from pai.session import get_default_session, _is_running_in_dlc, \ - _get_current_region_id, _get_dlc_job_id +from pai.common.utils import ( + parse_bmcpfs_uri, + parse_cpfs_uri, + parse_local_file_uri, + parse_nas_uri, + parse_odps_uri, + parse_oss_uri, + parse_pai_dataset_uri, +) +from pai.session import ( + _get_current_region_id, + _get_dlc_job_id, + _is_running_in_dlc, + get_default_session, +) logger = get_logger(__name__) @@ -65,28 +76,29 @@ class LineageEntity: - User-defined usages. """ + # URI (Uniform Resource Identifier) uri: str # The resource type, default as "dataset" - resource_type: Optional[str] = 'dataset' + resource_type: Optional[str] = "dataset" # The resource usage, default as "train" - resource_use: Optional[str] = 'train' + resource_use: Optional[str] = "train" def _find_datasource_uri_by_mount_path(mount_path: str): try: - with open('/var/DATA_SOURCES', 'r') as file: + with open("/var/DATA_SOURCES", "r") as file: data_sources = json.load(file) except (json.JSONDecodeError, FileNotFoundError) as e: logger.warning("Error parsing data source JSON or file not found: %s", e) return None for source in data_sources: - mount_path_in_source = source.get("MountPath", '') + mount_path_in_source = source.get("MountPath", "") uri_in_source = source.get("Uri") if mount_path.startswith(mount_path_in_source): - remaining_path = mount_path[len(mount_path_in_source):] + remaining_path = mount_path[len(mount_path_in_source) :] return uri_in_source + remaining_path return None @@ -105,13 +117,13 @@ def _fill_lineage_entity(entity: LineageEntity) -> _LineageEntity: if parsed_result: bucket_name, region_id, path = parsed_result _entity = _LineageEntity() - _entity.EntityType = 'oss-file' + _entity.EntityType = "oss-file" _entity.Attributes = { - 'Bucket': bucket_name, - 'Path': path, - 'ResourceType': entity.resource_type, - 'ResourceUse': entity.resource_use, - 'RegionId': region_id + "Bucket": bucket_name, + "Path": path, + "ResourceType": entity.resource_type, + "ResourceUse": entity.resource_use, + "RegionId": region_id, } return _entity parsed_result = parse_nas_uri(input_uri) @@ -122,12 +134,12 @@ def _fill_lineage_entity(entity: LineageEntity) -> _LineageEntity: if parsed_result: uri, region_id = parsed_result _entity = _LineageEntity() - _entity.EntityType = 'nas-file' + _entity.EntityType = "nas-file" _entity.Attributes = { - 'Uri': uri, - 'ResourceType': entity.resource_type, - 'ResourceUse': entity.resource_use, - 'RegionId': region_id + "Uri": uri, + "ResourceType": entity.resource_type, + "ResourceUse": entity.resource_use, + "RegionId": region_id, } return _entity @@ -138,55 +150,68 @@ def _fill_lineage_entity(entity: LineageEntity) -> _LineageEntity: dataset_detail = get_default_session().dataset_api.get(dataset_id) if dataset_detail: _entity = _LineageEntity() - if dataset_detail.get('Provider') == 'pai': - _entity.QualifiedName = f"pai-dataset.{dataset_id}_{dataset_version}".format( - dataset_id=dataset_id, - dataset_version=dataset_version) - _entity.Name = dataset_detail['Name'] + if dataset_detail.get("Provider") == "pai": + _entity.QualifiedName = ( + f"pai-dataset.{dataset_id}_{dataset_version}".format( + dataset_id=dataset_id, dataset_version=dataset_version + ) + ) + _entity.Name = dataset_detail["Name"] _entity.Attributes = { - 'ResourceUse': entity.resource_use, - 'Provider': 'pai' + "ResourceUse": entity.resource_use, + "Provider": "pai", } return _entity else: - _entity.QualifiedName = f"pai-dataset.{dataset_id}_{dataset_version}".format( - dataset_id=dataset_id, - dataset_version=dataset_version) - _entity.Name = dataset_detail['Name'] + _entity.QualifiedName = ( + f"pai-dataset.{dataset_id}_{dataset_version}".format( + dataset_id=dataset_id, dataset_version=dataset_version + ) + ) + _entity.Name = dataset_detail["Name"] _entity.Attributes = { - 'ResourceType': entity.resource_type, - 'ResourceUse': entity.resource_use, - 'RegionId': _get_current_region_id(), - 'Uri': dataset_detail['Uri'], - 'VersionName': dataset_version + "ResourceType": entity.resource_type, + "ResourceUse": entity.resource_use, + "RegionId": _get_current_region_id(), + "Uri": dataset_detail["Uri"], + "VersionName": dataset_version, } return _entity except TeaException as e: - logger.warning(f"can not find dataset by dataset_id: {dataset_id}, {str(e)}") + logger.warning( + f"can not find dataset by dataset_id: {dataset_id}, {str(e)}" + ) parsed_result = parse_odps_uri(input_uri) if parsed_result: project_name, schema, table_name = parsed_result _entity = _LineageEntity() if schema: - _entity.QualifiedName = f"maxcompute-table.{project_name}.{schema}.{table_name}".format( - project_name=project_name, schema=schema, table_name=table_name) + _entity.QualifiedName = ( + f"maxcompute-table.{project_name}.{schema}.{table_name}".format( + project_name=project_name, schema=schema, table_name=table_name + ) + ) else: - _entity.QualifiedName = f"maxcompute-table.{project_name}.{table_name}".format( - project_name=project_name, table_name=table_name) + _entity.QualifiedName = ( + f"maxcompute-table.{project_name}.{table_name}".format( + project_name=project_name, table_name=table_name + ) + ) _entity.Attributes = { - 'ResourceType': entity.resource_type, - 'ResourceUse': entity.resource_use + "ResourceType": entity.resource_type, + "ResourceUse": entity.resource_use, } return _entity return None class Lineage(object): - def __init__(self): super() - def log_lineage(self, input_entities: List[LineageEntity], output_entities: List[LineageEntity]): + def log_lineage( + self, input_entities: List[LineageEntity], output_entities: List[LineageEntity] + ): """ Recommended to use the log_lineage(input_entities: List[LineageEntity], output_entities: List[LineageEntity]) function directly. @@ -206,8 +231,12 @@ def log_lineage(self, input_entities: List[LineageEntity], output_entities: List if len(_input_entities) == 0 or len(_output_entities) == 0: logger.warning("input_entities or output_entities is empty, ignore.") else: - session.lineage_api.log_lineage(_input_entities, _output_entities, _get_dlc_job_id(), - session.workspace_id) + session.lineage_api.log_lineage( + _input_entities, + _output_entities, + _get_dlc_job_id(), + session.workspace_id, + ) logger.debug(_input_entities) logger.debug(_output_entities) logger.debug(_get_dlc_job_id()) @@ -216,7 +245,9 @@ def log_lineage(self, input_entities: List[LineageEntity], output_entities: List logger.warning("log_lineage is not supported in non-DLC environment.") -def log_lineage(input_entities: List[LineageEntity], output_entities: List[LineageEntity]): +def log_lineage( + input_entities: List[LineageEntity], output_entities: List[LineageEntity] +): """ Records the lineage relationships generated during model training/data processing, etc. Supported execution environments include: DLC. If running in other environments, lineage recording will be ignored. diff --git a/tests/integration/test_lineage.py b/tests/integration/test_lineage.py index a61a083..ed9455b 100644 --- a/tests/integration/test_lineage.py +++ b/tests/integration/test_lineage.py @@ -14,109 +14,222 @@ import logging from pai.common.logging import get_logger +from pai.tracking import LineageEntity, log_lineage from tests.integration import BaseIntegTestCase -from pai.tracking import log_lineage, LineageEntity from tests.unit.utils import mock_env class TestLineage(BaseIntegTestCase): - def test_run_in_non_dlc_env(self): - with self.assertLogs(logger=get_logger('pai.tracking.lineage'), level=logging.WARNING) as captured: - log_lineage(input_entities=[ - LineageEntity(uri='pai://datasets/d-f0mniq7j4cgk2x2rrn/v1', resource_type='dataset', - resource_use='train'), - ], output_entities=[ - LineageEntity(uri='file:///mnt/model/', resource_type='model', resource_use='extension')]) - self.assertIn("log_lineage is not supported in non-DLC environment.", captured.output[0]) + with self.assertLogs( + logger=get_logger("pai.tracking.lineage"), level=logging.WARNING + ) as captured: + log_lineage( + input_entities=[ + LineageEntity( + uri="pai://datasets/d-f0mniq7j4cgk2x2rrn/v1", + resource_type="dataset", + resource_use="train", + ), + ], + output_entities=[ + LineageEntity( + uri="file:///mnt/model/", + resource_type="model", + resource_use="extension", + ) + ], + ) + self.assertIn( + "log_lineage is not supported in non-DLC environment.", + captured.output[0], + ) - @mock_env(DLC_JOB_ID='d123456') - @mock_env(REGION='cn-hangzhou') + @mock_env(DLC_JOB_ID="d123456") + @mock_env(REGION="cn-hangzhou") def test_log_lineage_with_no_var_datasources_file_in_dlc(self): - with self.assertLogs(logger=get_logger('pai.tracking.lineage'), level=logging.WARNING) as captured: + with self.assertLogs( + logger=get_logger("pai.tracking.lineage"), level=logging.WARNING + ) as captured: log_lineage( input_entities=[ - LineageEntity(uri='file:///mnt/models/model.pth', resource_type='model', resource_use='extension')], - output_entities=[LineageEntity(uri='oss://test-bucket.oss-cn-shanghai.aliyuncs.com/model/model.pth', - resource_type='model', resource_use='extension')]) + LineageEntity( + uri="file:///mnt/models/model.pth", + resource_type="model", + resource_use="extension", + ) + ], + output_entities=[ + LineageEntity( + uri="oss://test-bucket.oss-cn-shanghai.aliyuncs.com/model/model.pth", + resource_type="model", + resource_use="extension", + ) + ], + ) self.assertIn( "WARNING:pai.tracking.lineage:Error parsing data source JSON or file not found: [Errno 2] No such file or directory: '/var/DATA_SOURCES'", - captured.output[0]) + captured.output[0], + ) - @mock_env(DLC_JOB_ID='d123456') - @mock_env(REGION='cn-hangzhou') + @mock_env(DLC_JOB_ID="d123456") + @mock_env(REGION="cn-hangzhou") def test_valid_log_lineage_in_dlc(self): - with self.assertLogs(logger=get_logger('pai.tracking.lineage'), level=logging.DEBUG) as captured: - log_lineage(input_entities=[ - LineageEntity(uri='oss://test-bucket.oss-cn-shanghai.aliyuncs.com/models/ALBERTv2-Chinese-NewsBase.pth', - resource_type='model', - resource_use='base'), - LineageEntity(uri='nas://fsId-mountTarget.cn-hangzhou.nas.aliyuncs.com/nas/mountTarget/', - resource_type='dataset', - resource_use='train'), - LineageEntity(uri='cpfs://cpfs-0077f18ed141a84e.cn-hangzhou/ptc-00f31da01c2a9c12/exp-005607872325f692/', - resource_type='dataset', - resource_use='train'), - LineageEntity(uri='bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com/', - resource_type='dataset', - resource_use='train'), - LineageEntity(uri='pai://datasets/d-jipftzxinc7nm1z0uh/v1', resource_type='dataset', - resource_use='train'), - LineageEntity(uri='odps://project_mc/tables/flow_model_label_table_v1', resource_type='dataset', - resource_use='test') - ], output_entities=[ - LineageEntity(uri='oss://hangzhoutest01.oss-cn-hangzhou-internal.aliyuncs.com/models/model.pth', - resource_type='model', resource_use='extension')]) + with self.assertLogs( + logger=get_logger("pai.tracking.lineage"), level=logging.DEBUG + ) as captured: + log_lineage( + input_entities=[ + LineageEntity( + uri="oss://test-bucket.oss-cn-shanghai.aliyuncs.com/models/ALBERTv2-Chinese-NewsBase.pth", + resource_type="model", + resource_use="base", + ), + LineageEntity( + uri="nas://fsId-mountTarget.cn-hangzhou.nas.aliyuncs.com/nas/mountTarget/", + resource_type="dataset", + resource_use="train", + ), + LineageEntity( + uri="cpfs://cpfs-0077f18ed141a84e.cn-hangzhou/ptc-00f31da01c2a9c12/exp-005607872325f692/", + resource_type="dataset", + resource_use="train", + ), + LineageEntity( + uri="bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com/", + resource_type="dataset", + resource_use="train", + ), + LineageEntity( + uri="pai://datasets/d-jipftzxinc7nm1z0uh/v1", + resource_type="dataset", + resource_use="train", + ), + LineageEntity( + uri="odps://project_mc/tables/flow_model_label_table_v1", + resource_type="dataset", + resource_use="test", + ), + ], + output_entities=[ + LineageEntity( + uri="oss://hangzhoutest01.oss-cn-hangzhou-internal.aliyuncs.com/models/model.pth", + resource_type="model", + resource_use="extension", + ) + ], + ) self.maxDiff = None self.assertEquals( "DEBUG:pai.tracking.lineage:[_LineageEntity(Attributes={'Bucket': 'test-bucket', 'Path': 'models/ALBERTv2-Chinese-NewsBase.pth', 'ResourceType': 'model', 'ResourceUse': 'base', 'RegionId': 'cn-shanghai'}, EntityType='oss-file', Name=None, QualifiedName=None), _LineageEntity(Attributes={'Uri': 'nas://fsId-mountTarget.cn-hangzhou.nas.aliyuncs.com/nas/mountTarget/', 'ResourceType': 'dataset', 'ResourceUse': 'train', 'RegionId': 'cn-hangzhou'}, EntityType='nas-file', Name=None, QualifiedName=None), _LineageEntity(Attributes={'Uri': 'cpfs://cpfs-0077f18ed141a84e.cn-hangzhou/ptc-00f31da01c2a9c12/exp-005607872325f692/', 'ResourceType': 'dataset', 'ResourceUse': 'train', 'RegionId': 'cn-hangzhou'}, EntityType='nas-file', Name=None, QualifiedName=None), _LineageEntity(Attributes={'Uri': 'bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com/', 'ResourceType': 'dataset', 'ResourceUse': 'train', 'RegionId': 'cn-wulanchabu'}, EntityType='nas-file', Name=None, QualifiedName=None), _LineageEntity(Attributes={'ResourceUse': 'train', 'Provider': 'pai'}, EntityType=None, Name='Aishell_1_subset_qwen', QualifiedName='pai-dataset.d-jipftzxinc7nm1z0uh_v1'), _LineageEntity(Attributes={'ResourceType': 'dataset', 'ResourceUse': 'test'}, EntityType=None, Name=None, QualifiedName='maxcompute-table.project_mc.flow_model_label_table_v1')]", - captured.output[0]) + captured.output[0], + ) self.assertEquals( "DEBUG:pai.tracking.lineage:[_LineageEntity(Attributes={'Bucket': 'hangzhoutest01', 'Path': 'models/model.pth', 'ResourceType': 'model', 'ResourceUse': 'extension', 'RegionId': 'cn-hangzhou'}, EntityType='oss-file', Name=None, QualifiedName=None)]", - captured.output[1]) + captured.output[1], + ) self.assertEquals("DEBUG:pai.tracking.lineage:d123456", captured.output[2]) - @mock_env(DLC_JOB_ID='d123456') - @mock_env(REGION='cn-hangzhou') + @mock_env(DLC_JOB_ID="d123456") + @mock_env(REGION="cn-hangzhou") def test_log_lineage_with_invalid_format_input_entities_in_dlc(self): - with self.assertLogs(logger=get_logger('pai.tracking.lineage'), level=logging.WARNING) as captured: - log_lineage(input_entities=[ - LineageEntity(uri='oss://test-bucket/models/ALBERTv2-Chinese-NewsBase.pth', resource_type='model', - resource_use='base'), - LineageEntity(uri='pai://datasets/', resource_type='dataset', resource_use='train'), - LineageEntity(uri='odps://project_mc/flow_model_label_table_v1', resource_type='dataset', - resource_use='test') - ], output_entities=[ - LineageEntity(uri='oss://test-bucket.oss-cn-shanghai.aliyuncs.com/model/model.pth', - resource_type='model', resource_use='extension')]) - self.assertIn("input_entities or output_entities is empty, ignore.", captured.output[0]) + with self.assertLogs( + logger=get_logger("pai.tracking.lineage"), level=logging.WARNING + ) as captured: + log_lineage( + input_entities=[ + LineageEntity( + uri="oss://test-bucket/models/ALBERTv2-Chinese-NewsBase.pth", + resource_type="model", + resource_use="base", + ), + LineageEntity( + uri="pai://datasets/", + resource_type="dataset", + resource_use="train", + ), + LineageEntity( + uri="odps://project_mc/flow_model_label_table_v1", + resource_type="dataset", + resource_use="test", + ), + ], + output_entities=[ + LineageEntity( + uri="oss://test-bucket.oss-cn-shanghai.aliyuncs.com/model/model.pth", + resource_type="model", + resource_use="extension", + ) + ], + ) + self.assertIn( + "input_entities or output_entities is empty, ignore.", + captured.output[0], + ) - @mock_env(DLC_JOB_ID='d123456') - @mock_env(REGION='cn-hangzhou') + @mock_env(DLC_JOB_ID="d123456") + @mock_env(REGION="cn-hangzhou") def test_log_lineage_with_invalid_format_output_entities_in_dlc(self): - with self.assertLogs(logger=get_logger('pai.tracking.lineage'), level=logging.WARNING) as captured: - log_lineage(input_entities=[ - LineageEntity(uri='oss://test-bucket.oss-cn-shanghai.aliyuncs.com/models/ALBERTv2-Chinese-NewsBase.pth', - resource_type='model', - resource_use='base'), - LineageEntity(uri='pai://datasets/d-jipftzxinc7nm1z0uh/v1', resource_type='dataset', - resource_use='train'), - LineageEntity(uri='odps://project_mc/tables/flow_model_label_table_v1', resource_type='dataset', - resource_use='test') - ], output_entities=[ - LineageEntity(uri='oss://test-bucket/models/ALBERTv2-Chinese-NewsBase.pth', resource_type='model', - resource_use='extension'), - LineageEntity(uri='pai://datasets/', resource_type='dataset', resource_use='val'), - LineageEntity(uri='odps://project_mc/flow_model_label_table_v1', resource_type='dataset', - resource_use='test') - ]) - self.assertIn("input_entities or output_entities is empty, ignore.", captured.output[0]) + with self.assertLogs( + logger=get_logger("pai.tracking.lineage"), level=logging.WARNING + ) as captured: + log_lineage( + input_entities=[ + LineageEntity( + uri="oss://test-bucket.oss-cn-shanghai.aliyuncs.com/models/ALBERTv2-Chinese-NewsBase.pth", + resource_type="model", + resource_use="base", + ), + LineageEntity( + uri="pai://datasets/d-jipftzxinc7nm1z0uh/v1", + resource_type="dataset", + resource_use="train", + ), + LineageEntity( + uri="odps://project_mc/tables/flow_model_label_table_v1", + resource_type="dataset", + resource_use="test", + ), + ], + output_entities=[ + LineageEntity( + uri="oss://test-bucket/models/ALBERTv2-Chinese-NewsBase.pth", + resource_type="model", + resource_use="extension", + ), + LineageEntity( + uri="pai://datasets/", + resource_type="dataset", + resource_use="val", + ), + LineageEntity( + uri="odps://project_mc/flow_model_label_table_v1", + resource_type="dataset", + resource_use="test", + ), + ], + ) + self.assertIn( + "input_entities or output_entities is empty, ignore.", + captured.output[0], + ) - @mock_env(DLC_JOB_ID='d123456') - @mock_env(REGION='cn-hangzhou') + @mock_env(DLC_JOB_ID="d123456") + @mock_env(REGION="cn-hangzhou") def test_log_lineage_with_empty_input_output_entities_in_dlc(self): - with self.assertLogs(logger=get_logger('pai.tracking.lineage'), level=logging.WARNING) as captured: + with self.assertLogs( + logger=get_logger("pai.tracking.lineage"), level=logging.WARNING + ) as captured: log_lineage([], []) - self.assertIn("input_entities or output_entities is empty, ignore.", captured.output[0]) - log_lineage(input_entities=[LineageEntity(uri='')], output_entities=[LineageEntity(uri='')]) - self.assertIn("input_entities or output_entities is empty, ignore.", captured.output[1]) + self.assertIn( + "input_entities or output_entities is empty, ignore.", + captured.output[0], + ) + log_lineage( + input_entities=[LineageEntity(uri="")], + output_entities=[LineageEntity(uri="")], + ) + self.assertIn( + "input_entities or output_entities is empty, ignore.", + captured.output[1], + ) diff --git a/tests/unit/test_session.py b/tests/unit/test_session.py index e21a2b1..9d994ee 100644 --- a/tests/unit/test_session.py +++ b/tests/unit/test_session.py @@ -13,30 +13,35 @@ # limitations under the License. import json +import os import shutil import tempfile from unittest.case import TestCase from pai.common.consts import DEFAULT_CONFIG_PATH -from .utils import mock_env +from pai.session import ( + Session, + get_default_session, + load_default_config_file, + setup_default_session, +) -from pai.session import Session, get_default_session, load_default_config_file, setup_default_session -import os +from .utils import mock_env -DEFAULT_CONFIG_PATH_BK = DEFAULT_CONFIG_PATH + '.bk' +DEFAULT_CONFIG_PATH_BK = DEFAULT_CONFIG_PATH + ".bk" class TestSession(TestCase): def setUp(self): if os.path.exists(DEFAULT_CONFIG_PATH): self.local_config = load_default_config_file(DEFAULT_CONFIG_PATH) - os.environ['PAI_WORKSPACE_ID'] = self.local_config['workspace_id'] - os.environ['REGION'] = self.local_config['region_id'] + os.environ["PAI_WORKSPACE_ID"] = self.local_config["workspace_id"] + os.environ["REGION"] = self.local_config["region_id"] shutil.move(DEFAULT_CONFIG_PATH, DEFAULT_CONFIG_PATH_BK) def tearDown(self): - os.environ.pop('PAI_WORKSPACE_ID', None) - os.environ.pop('REGION', None) + os.environ.pop("PAI_WORKSPACE_ID", None) + os.environ.pop("REGION", None) if os.path.exists(DEFAULT_CONFIG_PATH_BK): shutil.move(DEFAULT_CONFIG_PATH_BK, DEFAULT_CONFIG_PATH) @@ -56,21 +61,20 @@ def test_save_config(self): self.assertEqual(res, d) - @mock_env(DSW_INSTANCE_ID='dsw-378f4930c04191016') + @mock_env(DSW_INSTANCE_ID="dsw-378f4930c04191016") def test_get_default_session_in_dsw(self): s = get_default_session() - self.assertEqual(s.region_id, self.local_config['region_id']) - self.assertEqual(s.workspace_id, self.local_config['workspace_id']) + self.assertEqual(s.region_id, self.local_config["region_id"]) + self.assertEqual(s.workspace_id, self.local_config["workspace_id"]) - @mock_env(DLC_JOB_ID='dlcv25vrbljblbgh') + @mock_env(DLC_JOB_ID="dlcv25vrbljblbgh") def test_get_default_session_in_dlc(self): s = get_default_session() - self.assertEqual(s.region_id, self.local_config['region_id']) - self.assertEqual(s.workspace_id, self.local_config['workspace_id']) + self.assertEqual(s.region_id, self.local_config["region_id"]) + self.assertEqual(s.workspace_id, self.local_config["workspace_id"]) def test_set_default_session(self): setup_default_session(region_id="cn-hangzhou", workspace_id="workspace_id") s = get_default_session() - self.assertEqual(s.workspace_id, 'workspace_id') - self.assertEqual(s.region_id, 'cn-hangzhou') - pass + self.assertEqual(s.workspace_id, "workspace_id") + self.assertEqual(s.region_id, "cn-hangzhou") diff --git a/tests/unit/test_utils.py b/tests/unit/test_utils.py index 25cd357..5a8e533 100644 --- a/tests/unit/test_utils.py +++ b/tests/unit/test_utils.py @@ -19,9 +19,19 @@ import os from pai.common.oss_utils import is_oss_uri -from pai.common.utils import generate_repr, is_filesystem_uri, is_odps_table_uri, parse_region_id_from_endpoint, \ - parse_oss_uri, parse_nas_uri, parse_cpfs_uri, parse_local_file_uri, parse_pai_dataset_uri, parse_odps_uri, \ - parse_bmcpfs_uri +from pai.common.utils import ( + generate_repr, + is_filesystem_uri, + is_odps_table_uri, + parse_bmcpfs_uri, + parse_cpfs_uri, + parse_local_file_uri, + parse_nas_uri, + parse_odps_uri, + parse_oss_uri, + parse_pai_dataset_uri, + parse_region_id_from_endpoint, +) from tests.test_data import SCRIPT_DIR_PATH from tests.unit import BaseUnitTestCase from tests.unit.utils import extract_odps_table_info, file_checksum @@ -201,9 +211,14 @@ def test_is_filesystem_uri(self): self.assertEqual(result, tc["expected"]) def test_parse_region_id_from_valid_endpoint(self): - self.assertEqual(parse_region_id_from_endpoint("cn-shanghai"), 'cn-shanghai') - self.assertEqual(parse_region_id_from_endpoint("cn-shanghai-internal"), 'cn-shanghai') - self.assertEqual(parse_region_id_from_endpoint("cn-shanghai-internal.aliyuncs.com"), 'cn-shanghai') + self.assertEqual(parse_region_id_from_endpoint("cn-shanghai"), "cn-shanghai") + self.assertEqual( + parse_region_id_from_endpoint("cn-shanghai-internal"), "cn-shanghai" + ) + self.assertEqual( + parse_region_id_from_endpoint("cn-shanghai-internal.aliyuncs.com"), + "cn-shanghai", + ) def test_parse_region_id_from_invalid_endpoint(self): self.assertIsNone(parse_region_id_from_endpoint("http://someotherendpoint.com")) @@ -211,101 +226,173 @@ def test_parse_region_id_from_invalid_endpoint(self): self.assertIsNone(parse_region_id_from_endpoint(None)) def test_parse_valid_oss_uri(self): - self.assertEqual(parse_oss_uri('oss://test-bucket.oss-cn-hangzhou.aliyuncs.com/models/ALBERTv2-Chinese' - '-NewsBase.pth'), - ('test-bucket', 'cn-hangzhou', 'models/ALBERTv2-Chinese-NewsBase.pth')) self.assertEqual( parse_oss_uri( - 'oss://test-bucket.oss-cn-hangzhou-internal.aliyuncs.com/models/ALBERTv2-Chinese-NewsBase.pth'), - ('test-bucket', 'cn-hangzhou', 'models/ALBERTv2-Chinese-NewsBase.pth')) - self.assertEqual(parse_oss_uri('oss://test-bucket.oss-cn-hangzhou.aliyuncs.com/'), - ('test-bucket', 'cn-hangzhou', '/')) - self.assertEqual(parse_oss_uri('oss://test-bucket.oss-cn-hangzhou.aliyuncs.com'), - ('test-bucket', 'cn-hangzhou', '/')) + "oss://test-bucket.oss-cn-hangzhou.aliyuncs.com/models/ALBERTv2-Chinese" + "-NewsBase.pth" + ), + ("test-bucket", "cn-hangzhou", "models/ALBERTv2-Chinese-NewsBase.pth"), + ) + self.assertEqual( + parse_oss_uri( + "oss://test-bucket.oss-cn-hangzhou-internal.aliyuncs.com/models/ALBERTv2-Chinese-NewsBase.pth" + ), + ("test-bucket", "cn-hangzhou", "models/ALBERTv2-Chinese-NewsBase.pth"), + ) + self.assertEqual( + parse_oss_uri("oss://test-bucket.oss-cn-hangzhou.aliyuncs.com/"), + ("test-bucket", "cn-hangzhou", "/"), + ) + self.assertEqual( + parse_oss_uri("oss://test-bucket.oss-cn-hangzhou.aliyuncs.com"), + ("test-bucket", "cn-hangzhou", "/"), + ) def test_parse_invalid_oss_uri(self): - self.assertIsNone(parse_oss_uri('oss://test-bucket/models/ALBERTv2-Chinese' - '-NewsBase.pth')) - self.assertIsNone(parse_oss_uri('oss://')) - self.assertIsNone(parse_oss_uri('')) + self.assertIsNone( + parse_oss_uri("oss://test-bucket/models/ALBERTv2-Chinese" "-NewsBase.pth") + ) + self.assertIsNone(parse_oss_uri("oss://")) + self.assertIsNone(parse_oss_uri("")) def test_parse_valid_nas_uri(self): - self.assertEqual(parse_nas_uri('nas://007636fd-gfyy.cn-hangzhou.extreme.nas.aliyuncs.com/mnt/foo/'), - ('nas://007636fd-gfyy.cn-hangzhou.extreme.nas.aliyuncs.com/mnt/foo/', 'cn-hangzhou')) - self.assertEqual(parse_nas_uri('nas://007636fd-gfyy.cn-hangzhou.extreme.nas.aliyuncs.com/'), - ('nas://007636fd-gfyy.cn-hangzhou.extreme.nas.aliyuncs.com/', 'cn-hangzhou')) - self.assertEqual(parse_nas_uri('nas://007636fd-gfyy.cn-hangzhou.extreme.nas.aliyuncs.com'), - ('nas://007636fd-gfyy.cn-hangzhou.extreme.nas.aliyuncs.com', 'cn-hangzhou')) - self.assertEqual(parse_nas_uri('nas://066e54a580.cn-hangzhou/'), - ('nas://066e54a580.cn-hangzhou/', 'cn-hangzhou')) + self.assertEqual( + parse_nas_uri( + "nas://007636fd-gfyy.cn-hangzhou.extreme.nas.aliyuncs.com/mnt/foo/" + ), + ( + "nas://007636fd-gfyy.cn-hangzhou.extreme.nas.aliyuncs.com/mnt/foo/", + "cn-hangzhou", + ), + ) + self.assertEqual( + parse_nas_uri("nas://007636fd-gfyy.cn-hangzhou.extreme.nas.aliyuncs.com/"), + ( + "nas://007636fd-gfyy.cn-hangzhou.extreme.nas.aliyuncs.com/", + "cn-hangzhou", + ), + ) + self.assertEqual( + parse_nas_uri("nas://007636fd-gfyy.cn-hangzhou.extreme.nas.aliyuncs.com"), + ("nas://007636fd-gfyy.cn-hangzhou.extreme.nas.aliyuncs.com", "cn-hangzhou"), + ) + self.assertEqual( + parse_nas_uri("nas://066e54a580.cn-hangzhou/"), + ("nas://066e54a580.cn-hangzhou/", "cn-hangzhou"), + ) def test_parse_invalid_nas_uri(self): - self.assertIsNone(parse_nas_uri('nas://007636fd-gfyy.extreme.nas.aliyuncs.com/mnt/foo/')) - self.assertIsNone(parse_nas_uri('nas://')) - self.assertIsNone(parse_nas_uri('')) + self.assertIsNone( + parse_nas_uri("nas://007636fd-gfyy.extreme.nas.aliyuncs.com/mnt/foo/") + ) + self.assertIsNone(parse_nas_uri("nas://")) + self.assertIsNone(parse_nas_uri("")) def test_parse_valid_cpfs_uri(self): self.assertEqual( - parse_cpfs_uri('cpfs://cpfs-00f4b992044a71be.cn-hangzhou/ptc-008727a69e07d3cf/exp-00d695a1b9f6c926/'), - ('cpfs://cpfs-00f4b992044a71be.cn-hangzhou/ptc-008727a69e07d3cf/exp-00d695a1b9f6c926/', 'cn-hangzhou')) - self.assertEqual(parse_cpfs_uri('cpfs://cpfs-00f4b992044a71be.cn-hangzhou/'), - ('cpfs://cpfs-00f4b992044a71be.cn-hangzhou/', 'cn-hangzhou')) - self.assertEqual(parse_cpfs_uri('cpfs://cpfs-00f4b992044a71be.cn-hangzhou'), - ('cpfs://cpfs-00f4b992044a71be.cn-hangzhou', 'cn-hangzhou')) + parse_cpfs_uri( + "cpfs://cpfs-00f4b992044a71be.cn-hangzhou/ptc-008727a69e07d3cf/exp-00d695a1b9f6c926/" + ), + ( + "cpfs://cpfs-00f4b992044a71be.cn-hangzhou/ptc-008727a69e07d3cf/exp-00d695a1b9f6c926/", + "cn-hangzhou", + ), + ) + self.assertEqual( + parse_cpfs_uri("cpfs://cpfs-00f4b992044a71be.cn-hangzhou/"), + ("cpfs://cpfs-00f4b992044a71be.cn-hangzhou/", "cn-hangzhou"), + ) + self.assertEqual( + parse_cpfs_uri("cpfs://cpfs-00f4b992044a71be.cn-hangzhou"), + ("cpfs://cpfs-00f4b992044a71be.cn-hangzhou", "cn-hangzhou"), + ) def test_parse_invalid_cpfs_uri(self): - self.assertIsNone(parse_cpfs_uri('cpfs://cpfs-00f4b992044a71be/mnt/foo/')) - self.assertIsNone(parse_cpfs_uri('cpfs://')) - self.assertIsNone(parse_cpfs_uri('')) + self.assertIsNone(parse_cpfs_uri("cpfs://cpfs-00f4b992044a71be/mnt/foo/")) + self.assertIsNone(parse_cpfs_uri("cpfs://")) + self.assertIsNone(parse_cpfs_uri("")) def test_parse_valid_bmcpfs_uri(self): self.assertEqual( - parse_bmcpfs_uri('bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com/sub/dir'), - ('bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com/sub/dir', 'cn-wulanchabu')) - self.assertEqual(parse_bmcpfs_uri('bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com/'), - ('bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com/', 'cn-wulanchabu')) - self.assertEqual(parse_bmcpfs_uri('bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com'), - ('bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com', 'cn-wulanchabu')) + parse_bmcpfs_uri( + "bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com/sub/dir" + ), + ( + "bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com/sub/dir", + "cn-wulanchabu", + ), + ) + self.assertEqual( + parse_bmcpfs_uri( + "bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com/" + ), + ( + "bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com/", + "cn-wulanchabu", + ), + ) + self.assertEqual( + parse_bmcpfs_uri( + "bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com" + ), + ( + "bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com", + "cn-wulanchabu", + ), + ) def test_parse_invalid_bmcpfs_uri(self): - self.assertIsNone(parse_bmcpfs_uri('bmcpfs://cpfs-291070fd9529c747-000001.cpfs.aliyuncs.com/')) - self.assertIsNone(parse_bmcpfs_uri('bmcpfs://')) - self.assertIsNone(parse_bmcpfs_uri('')) + self.assertIsNone( + parse_bmcpfs_uri("bmcpfs://cpfs-291070fd9529c747-000001.cpfs.aliyuncs.com/") + ) + self.assertIsNone(parse_bmcpfs_uri("bmcpfs://")) + self.assertIsNone(parse_bmcpfs_uri("")) def test_parse_valid_local_file_uri(self): - self.assertEqual(parse_local_file_uri('file:///mnt/dataset_123-456+789'), - '/mnt/dataset_123-456+789') - self.assertEqual(parse_local_file_uri('file:///mnt/dataset 123'), - '/mnt/dataset 123') - self.assertEqual(parse_local_file_uri('file:///'), - '/') + self.assertEqual( + parse_local_file_uri("file:///mnt/dataset_123-456+789"), + "/mnt/dataset_123-456+789", + ) + self.assertEqual( + parse_local_file_uri("file:///mnt/dataset 123"), "/mnt/dataset 123" + ) + self.assertEqual(parse_local_file_uri("file:///"), "/") def test_parse_invalid_local_file_uri(self): - self.assertIsNone(parse_local_file_uri('file://mnt/dataset')) - self.assertIsNone(parse_local_file_uri('file://')) - self.assertIsNone(parse_local_file_uri('')) + self.assertIsNone(parse_local_file_uri("file://mnt/dataset")) + self.assertIsNone(parse_local_file_uri("file://")) + self.assertIsNone(parse_local_file_uri("")) def test_parse_valid_pai_dataset_uri(self): - self.assertEqual(parse_pai_dataset_uri('pai://datasets/d-123456'), - ('d-123456', '1')) - self.assertEqual(parse_pai_dataset_uri('pai://datasets/d-123456/2'), - ('d-123456', '2')) - self.assertEqual(parse_pai_dataset_uri('pai://datasets/d-123456/2/3'), - ('d-123456', '2')) + self.assertEqual( + parse_pai_dataset_uri("pai://datasets/d-123456"), ("d-123456", "1") + ) + self.assertEqual( + parse_pai_dataset_uri("pai://datasets/d-123456/2"), ("d-123456", "2") + ) + self.assertEqual( + parse_pai_dataset_uri("pai://datasets/d-123456/2/3"), ("d-123456", "2") + ) def test_parse_invalid_pai_dataset_uri(self): - self.assertIsNone(parse_pai_dataset_uri('pai://datasets/')) - self.assertIsNone(parse_pai_dataset_uri('pai://')) - self.assertIsNone(parse_pai_dataset_uri('')) + self.assertIsNone(parse_pai_dataset_uri("pai://datasets/")) + self.assertIsNone(parse_pai_dataset_uri("pai://")) + self.assertIsNone(parse_pai_dataset_uri("")) def test_parse_valid_odps_uri(self): - self.assertEqual(parse_odps_uri('odps://project_mc/schema1/tables/flow_model_label_table_v1'), - ('project_mc', 'schema1', 'flow_model_label_table_v1')) - self.assertEqual(parse_odps_uri('odps://project_mc/tables/flow_model_label_table_v1'), - ('project_mc', None, 'flow_model_label_table_v1')) + self.assertEqual( + parse_odps_uri( + "odps://project_mc/schema1/tables/flow_model_label_table_v1" + ), + ("project_mc", "schema1", "flow_model_label_table_v1"), + ) + self.assertEqual( + parse_odps_uri("odps://project_mc/tables/flow_model_label_table_v1"), + ("project_mc", None, "flow_model_label_table_v1"), + ) def test_parse_invalid_odps_uri(self): - self.assertIsNone(parse_odps_uri('odps://project_mc/tables/')) - self.assertIsNone(parse_odps_uri('odps://project_mc/')) - self.assertIsNone(parse_odps_uri('odps://')) - self.assertIsNone(parse_odps_uri('')) + self.assertIsNone(parse_odps_uri("odps://project_mc/tables/")) + self.assertIsNone(parse_odps_uri("odps://project_mc/")) + self.assertIsNone(parse_odps_uri("odps://")) + self.assertIsNone(parse_odps_uri("")) From 2f6fff6cd782ae8454a266576399b474863b531f Mon Sep 17 00:00:00 2001 From: Everett Li Date: Thu, 14 Nov 2024 10:03:53 +0800 Subject: [PATCH 04/13] fix: unittest fail --- tests/unit/test_session.py | 58 +++++++++++--------------------------- 1 file changed, 16 insertions(+), 42 deletions(-) diff --git a/tests/unit/test_session.py b/tests/unit/test_session.py index 9d994ee..672b756 100644 --- a/tests/unit/test_session.py +++ b/tests/unit/test_session.py @@ -13,38 +13,14 @@ # limitations under the License. import json -import os -import shutil import tempfile -from unittest.case import TestCase -from pai.common.consts import DEFAULT_CONFIG_PATH -from pai.session import ( - Session, - get_default_session, - load_default_config_file, - setup_default_session, -) +from pai.session import Session, _init_default_session_from_env +from tests.unit import BaseUnitTestCase +from tests.unit.utils import mock_env -from .utils import mock_env - -DEFAULT_CONFIG_PATH_BK = DEFAULT_CONFIG_PATH + ".bk" - - -class TestSession(TestCase): - def setUp(self): - if os.path.exists(DEFAULT_CONFIG_PATH): - self.local_config = load_default_config_file(DEFAULT_CONFIG_PATH) - os.environ["PAI_WORKSPACE_ID"] = self.local_config["workspace_id"] - os.environ["REGION"] = self.local_config["region_id"] - shutil.move(DEFAULT_CONFIG_PATH, DEFAULT_CONFIG_PATH_BK) - - def tearDown(self): - os.environ.pop("PAI_WORKSPACE_ID", None) - os.environ.pop("REGION", None) - if os.path.exists(DEFAULT_CONFIG_PATH_BK): - shutil.move(DEFAULT_CONFIG_PATH_BK, DEFAULT_CONFIG_PATH) +class TestSession(BaseUnitTestCase): def test_save_config(self): d = { "region_id": "cn-hangzhou", @@ -62,19 +38,17 @@ def test_save_config(self): self.assertEqual(res, d) @mock_env(DSW_INSTANCE_ID="dsw-378f4930c04191016") - def test_get_default_session_in_dsw(self): - s = get_default_session() - self.assertEqual(s.region_id, self.local_config["region_id"]) - self.assertEqual(s.workspace_id, self.local_config["workspace_id"]) + @mock_env(PAI_WORKSPACE_ID="1234567") + @mock_env(REGION="cn-hangzhou") + def test_init_default_session_from_env_in_dsw(self): + s = _init_default_session_from_env() + self.assertEqual(s.workspace_id, "1234567") + self.assertEqual(s.region_id, "cn-hangzhou") @mock_env(DLC_JOB_ID="dlcv25vrbljblbgh") - def test_get_default_session_in_dlc(self): - s = get_default_session() - self.assertEqual(s.region_id, self.local_config["region_id"]) - self.assertEqual(s.workspace_id, self.local_config["workspace_id"]) - - def test_set_default_session(self): - setup_default_session(region_id="cn-hangzhou", workspace_id="workspace_id") - s = get_default_session() - self.assertEqual(s.workspace_id, "workspace_id") - self.assertEqual(s.region_id, "cn-hangzhou") + @mock_env(PAI_WORKSPACE_ID="1234567") + @mock_env(REGION="cn-shanghai") + def test_init_default_session_from_env_in_dlc(self): + s = _init_default_session_from_env() + self.assertEqual(s.workspace_id, "1234567") + self.assertEqual(s.region_id, "cn-shanghai") From 20adc63b9de40d57b122aa9a1f84c238a0bc723b Mon Sep 17 00:00:00 2001 From: Everett Li Date: Thu, 14 Nov 2024 10:45:10 +0800 Subject: [PATCH 05/13] fix: unittest fail --- tests/unit/test_session.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/tests/unit/test_session.py b/tests/unit/test_session.py index 672b756..22bb44c 100644 --- a/tests/unit/test_session.py +++ b/tests/unit/test_session.py @@ -14,6 +14,9 @@ import json import tempfile +from unittest.mock import patch + +from alibabacloud_credentials.credentials import Credential from pai.session import Session, _init_default_session_from_env from tests.unit import BaseUnitTestCase @@ -41,14 +44,20 @@ def test_save_config(self): @mock_env(PAI_WORKSPACE_ID="1234567") @mock_env(REGION="cn-hangzhou") def test_init_default_session_from_env_in_dsw(self): - s = _init_default_session_from_env() - self.assertEqual(s.workspace_id, "1234567") - self.assertEqual(s.region_id, "cn-hangzhou") + mock_cred = Credential() + with patch('pai.session.Session._get_default_credential_client', return_value=mock_cred): + with patch('pai.session.Session.get_default_oss_storage', return_value=("bucket", "endpoint")): + s = _init_default_session_from_env() + self.assertEqual(s.workspace_id, "1234567") + self.assertEqual(s.region_id, "cn-hangzhou") @mock_env(DLC_JOB_ID="dlcv25vrbljblbgh") @mock_env(PAI_WORKSPACE_ID="1234567") @mock_env(REGION="cn-shanghai") def test_init_default_session_from_env_in_dlc(self): - s = _init_default_session_from_env() - self.assertEqual(s.workspace_id, "1234567") - self.assertEqual(s.region_id, "cn-shanghai") + mock_cred = Credential() + with patch('pai.session.Session._get_default_credential_client', return_value=mock_cred): + with patch('pai.session.Session.get_default_oss_storage', return_value=("bucket", "endpoint")): + s = _init_default_session_from_env() + self.assertEqual(s.workspace_id, "1234567") + self.assertEqual(s.region_id, "cn-shanghai") From cbda3fee207e2644c140ac58db8f460529ade6f8 Mon Sep 17 00:00:00 2001 From: Everett Li Date: Thu, 14 Nov 2024 10:54:41 +0800 Subject: [PATCH 06/13] lint: code format --- tests/unit/test_session.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/tests/unit/test_session.py b/tests/unit/test_session.py index 22bb44c..0c3031e 100644 --- a/tests/unit/test_session.py +++ b/tests/unit/test_session.py @@ -45,8 +45,13 @@ def test_save_config(self): @mock_env(REGION="cn-hangzhou") def test_init_default_session_from_env_in_dsw(self): mock_cred = Credential() - with patch('pai.session.Session._get_default_credential_client', return_value=mock_cred): - with patch('pai.session.Session.get_default_oss_storage', return_value=("bucket", "endpoint")): + with patch( + "pai.session.Session._get_default_credential_client", return_value=mock_cred + ): + with patch( + "pai.session.Session.get_default_oss_storage", + return_value=("bucket", "endpoint"), + ): s = _init_default_session_from_env() self.assertEqual(s.workspace_id, "1234567") self.assertEqual(s.region_id, "cn-hangzhou") @@ -56,8 +61,13 @@ def test_init_default_session_from_env_in_dsw(self): @mock_env(REGION="cn-shanghai") def test_init_default_session_from_env_in_dlc(self): mock_cred = Credential() - with patch('pai.session.Session._get_default_credential_client', return_value=mock_cred): - with patch('pai.session.Session.get_default_oss_storage', return_value=("bucket", "endpoint")): + with patch( + "pai.session.Session._get_default_credential_client", return_value=mock_cred + ): + with patch( + "pai.session.Session.get_default_oss_storage", + return_value=("bucket", "endpoint"), + ): s = _init_default_session_from_env() self.assertEqual(s.workspace_id, "1234567") self.assertEqual(s.region_id, "cn-shanghai") From 8d9cab1e7eeae282116c2e7c71472f097e7037e5 Mon Sep 17 00:00:00 2001 From: Everett Li Date: Fri, 15 Nov 2024 17:08:52 +0800 Subject: [PATCH 07/13] feat: support log_lineage in dlc --- pai/tracking/lineage.py | 6 +++--- pai/version.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pai/tracking/lineage.py b/pai/tracking/lineage.py index 2ac4f6f..90cf695 100644 --- a/pai/tracking/lineage.py +++ b/pai/tracking/lineage.py @@ -87,13 +87,13 @@ class LineageEntity: def _find_datasource_uri_by_mount_path(mount_path: str): try: - with open("/var/DATA_SOURCES", "r") as file: - data_sources = json.load(file) + with open("/var/metadata/config.json", "r") as file: + config = json.load(file) except (json.JSONDecodeError, FileNotFoundError) as e: logger.warning("Error parsing data source JSON or file not found: %s", e) return None - for source in data_sources: + for source in config["DATA_SOURCES"]: mount_path_in_source = source.get("MountPath", "") uri_in_source = source.get("Uri") diff --git a/pai/version.py b/pai/version.py index 8b4a8cb..e87e0f9 100644 --- a/pai/version.py +++ b/pai/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -VERSION = "0.4.10.post0" +VERSION = "0.4.12.dev0" From 3ed39406d03cffa8fb3abe746f406f9d1c4cc8b7 Mon Sep 17 00:00:00 2001 From: Everett Li Date: Fri, 15 Nov 2024 17:37:11 +0800 Subject: [PATCH 08/13] fix: lineage integration test fail --- tests/integration/test_lineage.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/integration/test_lineage.py b/tests/integration/test_lineage.py index ed9455b..10cea5c 100644 --- a/tests/integration/test_lineage.py +++ b/tests/integration/test_lineage.py @@ -47,7 +47,7 @@ def test_run_in_non_dlc_env(self): @mock_env(DLC_JOB_ID="d123456") @mock_env(REGION="cn-hangzhou") - def test_log_lineage_with_no_var_datasources_file_in_dlc(self): + def test_log_lineage_with_no_datasources_config_file_in_dlc(self): with self.assertLogs( logger=get_logger("pai.tracking.lineage"), level=logging.WARNING ) as captured: @@ -68,7 +68,7 @@ def test_log_lineage_with_no_var_datasources_file_in_dlc(self): ], ) self.assertIn( - "WARNING:pai.tracking.lineage:Error parsing data source JSON or file not found: [Errno 2] No such file or directory: '/var/DATA_SOURCES'", + "WARNING:pai.tracking.lineage:Error parsing data source JSON or file not found: [Errno 2] No such file or directory: '/var/metadata/config.json'", captured.output[0], ) From 50c9df4a9f057ccd227f4996a46d6d05ad9ebd93 Mon Sep 17 00:00:00 2001 From: Everett Li Date: Thu, 21 Nov 2024 11:42:00 +0800 Subject: [PATCH 09/13] fix: fix: lineage integration test fail --- pai/tracking/lineage.py | 20 +++++++++++++++++--- tests/integration/test_lineage.py | 4 ++-- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/pai/tracking/lineage.py b/pai/tracking/lineage.py index 90cf695..e8e5d40 100644 --- a/pai/tracking/lineage.py +++ b/pai/tracking/lineage.py @@ -93,14 +93,28 @@ def _find_datasource_uri_by_mount_path(mount_path: str): logger.warning("Error parsing data source JSON or file not found: %s", e) return None - for source in config["DATA_SOURCES"]: + best_match = "" + best_uri = None + + for source in config.get("DATA_SOURCES", []): mount_path_in_source = source.get("MountPath", "") + if mount_path_in_source.endswith("/") and mount_path_in_source != "/": + mount_path_in_source = mount_path_in_source[:-1] uri_in_source = source.get("Uri") + if not uri_in_source.endswith("/"): + uri_in_source += "/" if mount_path.startswith(mount_path_in_source): - remaining_path = mount_path[len(mount_path_in_source) :] - return uri_in_source + remaining_path + # Check if this is the longest match so far + if len(mount_path_in_source) > len(best_match): + best_match = mount_path_in_source + best_uri = uri_in_source + if best_uri is not None: + remaining_path = mount_path[len(best_match) :] + if remaining_path.startswith("/"): + remaining_path = remaining_path[1:] + return best_uri + remaining_path return None diff --git a/tests/integration/test_lineage.py b/tests/integration/test_lineage.py index 10cea5c..f4df073 100644 --- a/tests/integration/test_lineage.py +++ b/tests/integration/test_lineage.py @@ -54,14 +54,14 @@ def test_log_lineage_with_no_datasources_config_file_in_dlc(self): log_lineage( input_entities=[ LineageEntity( - uri="file:///mnt/models/model.pth", + uri="file:///mnt/input/dataset", resource_type="model", resource_use="extension", ) ], output_entities=[ LineageEntity( - uri="oss://test-bucket.oss-cn-shanghai.aliyuncs.com/model/model.pth", + uri="file:///mnt/output/model/model.pth", resource_type="model", resource_use="extension", ) From 3eb4e3bb98fc1d972f74950bd8066fe5700a6e5c Mon Sep 17 00:00:00 2001 From: Everett Li Date: Thu, 26 Dec 2024 11:21:09 +0800 Subject: [PATCH 10/13] feat: support pvc and nas-file lineage --- pai/tracking/lineage.py | 157 ++++++++++++++++++++++-------- tests/integration/test_lineage.py | 87 +++++++++++++---- 2 files changed, 183 insertions(+), 61 deletions(-) diff --git a/pai/tracking/lineage.py b/pai/tracking/lineage.py index e8e5d40..7431b4f 100644 --- a/pai/tracking/lineage.py +++ b/pai/tracking/lineage.py @@ -85,48 +85,136 @@ class LineageEntity: resource_use: Optional[str] = "train" -def _find_datasource_uri_by_mount_path(mount_path: str): +@dataclass +class _NasEntityAttributes: + file_system_id: str + path: str + + +@dataclass +class _PvcEntityAttributes: + cluster_id: str + name_space: str + pvc_name: str + path: str + pvc_type: str + + +def _read_metadata_config_in_dlc(): try: with open("/var/metadata/config.json", "r") as file: - config = json.load(file) + return json.load(file) except (json.JSONDecodeError, FileNotFoundError) as e: logger.warning("Error parsing data source JSON or file not found: %s", e) return None + +def _get_entity_attributes(source, entity_type): + attributes = source.get("Attributes", {}) + if entity_type == "nas": + return _NasEntityAttributes( + file_system_id=attributes.get("FileSystemId"), path=attributes.get("Path") + ) + if entity_type == "pvc": + return _PvcEntityAttributes( + pvc_type=attributes.get("PvcType"), + pvc_name=attributes.get("PvcName"), + path=attributes.get("Path"), + cluster_id=attributes.get("ClusterId"), + name_space=attributes.get("NameSpace"), + ) + return None + + +def _find_best_match_source(config, mount_path): best_match = "" - best_uri = None + best_details = {} for source in config.get("DATA_SOURCES", []): - mount_path_in_source = source.get("MountPath", "") - if mount_path_in_source.endswith("/") and mount_path_in_source != "/": - mount_path_in_source = mount_path_in_source[:-1] - uri_in_source = source.get("Uri") - if not uri_in_source.endswith("/"): - uri_in_source += "/" - - if mount_path.startswith(mount_path_in_source): - # Check if this is the longest match so far - if len(mount_path_in_source) > len(best_match): - best_match = mount_path_in_source - best_uri = uri_in_source - - if best_uri is not None: - remaining_path = mount_path[len(best_match) :] - if remaining_path.startswith("/"): - remaining_path = remaining_path[1:] - return best_uri + remaining_path - return None + entity_type = source.get("EntityType") + attributes = source.get("Attributes", {}) + mount_path_in_source = attributes.get("MountPath", "").rstrip("/") + uri_in_source = source.get("Uri", "").rstrip("/") + "/" + + if mount_path.startswith(mount_path_in_source) and len( + mount_path_in_source + ) > len(best_match): + best_match = mount_path_in_source + best_details = { + "uri_in_source": uri_in_source, + "entity_type": entity_type, + "entity_attributes": _get_entity_attributes(source, entity_type), + } + + return best_match, best_details + + +def _find_datasource_by_mount_path(mount_path: str): + config = _read_metadata_config_in_dlc() + if config is None: + return None, None, None, None + + best_match, best_details = _find_best_match_source(config, mount_path) + if best_match: + region_id = config.get("DLC_REGION_ID") + remaining_path = mount_path[len(best_match) :].lstrip("/") + return ( + f"{best_details['uri_in_source']}{remaining_path}", + region_id, + ( + best_details["entity_attributes"] + if best_details["entity_type"] == "nas" + else None + ), + ( + best_details["entity_attributes"] + if best_details["entity_type"] == "pvc" + else None + ), + ) + return None, None, None, None def _fill_lineage_entity(entity: LineageEntity) -> _LineageEntity: input_uri = entity.uri - path = parse_local_file_uri(input_uri) - if path: - uri = _find_datasource_uri_by_mount_path(path) + local_file_path = parse_local_file_uri(input_uri) + if local_file_path: + ( + uri, + region_id, + nas_entity_attributes, + pvc_entity_attributes, + ) = _find_datasource_by_mount_path(local_file_path) + if nas_entity_attributes: + _entity = _LineageEntity() + _entity.EntityType = "nas-file" + _entity.Attributes = { + "Uri": uri, + "ResourceType": entity.resource_type, + "ResourceUse": entity.resource_use, + "RegionId": region_id, + "FileSystemId": nas_entity_attributes.file_system_id, + "Path": nas_entity_attributes.path, + } + return _entity + if pvc_entity_attributes: + _entity = _LineageEntity() + _entity.EntityType = "pvc-file" + _entity.Attributes = { + "ResourceType": entity.resource_type, + "ResourceUse": entity.resource_use, + "RegionId": region_id, + "ClusterId": pvc_entity_attributes.cluster_id, + "NameSpace": pvc_entity_attributes.name_space, + "PvcName": pvc_entity_attributes.pvc_name, + "Path": pvc_entity_attributes.path, + "PvcType": pvc_entity_attributes.pvc_type, + } + return _entity if uri: input_uri = uri else: - logger.warning(f"can not find uri by mount path: {path}") + logger.warning(f"can not find uri by mount path: {local_file_path}") parsed_result = parse_oss_uri(input_uri) if parsed_result: bucket_name, region_id, path = parsed_result @@ -140,23 +228,6 @@ def _fill_lineage_entity(entity: LineageEntity) -> _LineageEntity: "RegionId": region_id, } return _entity - parsed_result = parse_nas_uri(input_uri) - if not parsed_result: - parsed_result = parse_cpfs_uri(input_uri) - if not parsed_result: - parsed_result = parse_bmcpfs_uri(input_uri) - if parsed_result: - uri, region_id = parsed_result - _entity = _LineageEntity() - _entity.EntityType = "nas-file" - _entity.Attributes = { - "Uri": uri, - "ResourceType": entity.resource_type, - "ResourceUse": entity.resource_use, - "RegionId": region_id, - } - return _entity - parsed_result = parse_pai_dataset_uri(input_uri) if parsed_result: dataset_id, dataset_version = parsed_result diff --git a/tests/integration/test_lineage.py b/tests/integration/test_lineage.py index f4df073..9114a9a 100644 --- a/tests/integration/test_lineage.py +++ b/tests/integration/test_lineage.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. import logging +from unittest.mock import patch from pai.common.logging import get_logger from pai.tracking import LineageEntity, log_lineage @@ -20,7 +21,7 @@ class TestLineage(BaseIntegTestCase): - def test_run_in_non_dlc_env(self): + def test_log_lineage_run_in_non_dlc_env(self): with self.assertLogs( logger=get_logger("pai.tracking.lineage"), level=logging.WARNING ) as captured: @@ -74,7 +75,72 @@ def test_log_lineage_with_no_datasources_config_file_in_dlc(self): @mock_env(DLC_JOB_ID="d123456") @mock_env(REGION="cn-hangzhou") - def test_valid_log_lineage_in_dlc(self): + def test_log_lineage_with_valid_mount_path_in_dlc(self): + with self.assertLogs( + logger=get_logger("pai.tracking.lineage"), level=logging.DEBUG + ) as captured: + mock_config = { + "DATA_SOURCES": [ + { + "EntityType": "pvc", + "Attributes": { + "ClusterId": "cbb8f09f999534c5187532a19fe6a3bba", + "MountPath": "/mnt/input", + "NameSpace": "quota2md3bak6ovi", + "Path": "/nas", + "PvcName": "nas-pvc", + "PvcType": "hostPath", + }, + }, + { + "EntityType": "nas", + "Attributes": { + "DataSourceId": "data16mjfuvf6v3a", + "FileSystemId": "2964e349a2d", + "MountPath": "/mnt/output", + "Path": "/", + "Uri": "", + "Version": "", + }, + }, + ], + "DLC_JOB_ID": "dlcrmzton6fvujw5", + "DLC_REGION_ID": "eflops", + "DLC_USER_ID": "", + "WORK_SPACE_ID": "wspdfsp20olq9l9m", + } + with patch( + "pai.tracking.lineage._read_metadata_config_in_dlc", + return_value=mock_config, + ): + log_lineage( + input_entities=[ + LineageEntity( + uri="file:///mnt/input/dataset", + resource_type="model", + resource_use="extension", + ) + ], + output_entities=[ + LineageEntity( + uri="file:///mnt/output/model/model.pth", + resource_type="model", + resource_use="extension", + ) + ], + ) + self.assertIn( + "DEBUG:pai.tracking.lineage:[_LineageEntity(Attributes={'ResourceType': 'model', 'ResourceUse': 'extension', 'RegionId': 'eflops', 'ClusterId': 'cbb8f09f999534c5187532a19fe6a3bba', 'NameSpace': 'quota2md3bak6ovi', 'PvcName': 'nas-pvc', 'Path': '/nas', 'PvcType': 'hostPath'}, EntityType='pvc-file', Name=None, QualifiedName=None)]", + captured.output[0], + ) + self.assertIn( + "DEBUG:pai.tracking.lineage:[_LineageEntity(Attributes={'Uri': '/model/model.pth', 'ResourceType': 'model', 'ResourceUse': 'extension', 'RegionId': 'eflops', 'FileSystemId': '2964e349a2d', 'Path': '/'}, EntityType='nas-file', Name=None, QualifiedName=None)]", + captured.output[1], + ) + + @mock_env(DLC_JOB_ID="d123456") + @mock_env(REGION="cn-hangzhou") + def test_log_lineage_with_valid_entities_in_dlc(self): with self.assertLogs( logger=get_logger("pai.tracking.lineage"), level=logging.DEBUG ) as captured: @@ -85,21 +151,6 @@ def test_valid_log_lineage_in_dlc(self): resource_type="model", resource_use="base", ), - LineageEntity( - uri="nas://fsId-mountTarget.cn-hangzhou.nas.aliyuncs.com/nas/mountTarget/", - resource_type="dataset", - resource_use="train", - ), - LineageEntity( - uri="cpfs://cpfs-0077f18ed141a84e.cn-hangzhou/ptc-00f31da01c2a9c12/exp-005607872325f692/", - resource_type="dataset", - resource_use="train", - ), - LineageEntity( - uri="bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com/", - resource_type="dataset", - resource_use="train", - ), LineageEntity( uri="pai://datasets/d-jipftzxinc7nm1z0uh/v1", resource_type="dataset", @@ -121,7 +172,7 @@ def test_valid_log_lineage_in_dlc(self): ) self.maxDiff = None self.assertEquals( - "DEBUG:pai.tracking.lineage:[_LineageEntity(Attributes={'Bucket': 'test-bucket', 'Path': 'models/ALBERTv2-Chinese-NewsBase.pth', 'ResourceType': 'model', 'ResourceUse': 'base', 'RegionId': 'cn-shanghai'}, EntityType='oss-file', Name=None, QualifiedName=None), _LineageEntity(Attributes={'Uri': 'nas://fsId-mountTarget.cn-hangzhou.nas.aliyuncs.com/nas/mountTarget/', 'ResourceType': 'dataset', 'ResourceUse': 'train', 'RegionId': 'cn-hangzhou'}, EntityType='nas-file', Name=None, QualifiedName=None), _LineageEntity(Attributes={'Uri': 'cpfs://cpfs-0077f18ed141a84e.cn-hangzhou/ptc-00f31da01c2a9c12/exp-005607872325f692/', 'ResourceType': 'dataset', 'ResourceUse': 'train', 'RegionId': 'cn-hangzhou'}, EntityType='nas-file', Name=None, QualifiedName=None), _LineageEntity(Attributes={'Uri': 'bmcpfs://cpfs-291070fd9529c747-000001.cn-wulanchabu.cpfs.aliyuncs.com/', 'ResourceType': 'dataset', 'ResourceUse': 'train', 'RegionId': 'cn-wulanchabu'}, EntityType='nas-file', Name=None, QualifiedName=None), _LineageEntity(Attributes={'ResourceUse': 'train', 'Provider': 'pai'}, EntityType=None, Name='Aishell_1_subset_qwen', QualifiedName='pai-dataset.d-jipftzxinc7nm1z0uh_v1'), _LineageEntity(Attributes={'ResourceType': 'dataset', 'ResourceUse': 'test'}, EntityType=None, Name=None, QualifiedName='maxcompute-table.project_mc.flow_model_label_table_v1')]", + "DEBUG:pai.tracking.lineage:[_LineageEntity(Attributes={'Bucket': 'test-bucket', 'Path': 'models/ALBERTv2-Chinese-NewsBase.pth', 'ResourceType': 'model', 'ResourceUse': 'base', 'RegionId': 'cn-shanghai'}, EntityType='oss-file', Name=None, QualifiedName=None), _LineageEntity(Attributes={'ResourceUse': 'train', 'Provider': 'pai'}, EntityType=None, Name='Aishell_1_subset_qwen', QualifiedName='pai-dataset.d-jipftzxinc7nm1z0uh_v1'), _LineageEntity(Attributes={'ResourceType': 'dataset', 'ResourceUse': 'test'}, EntityType=None, Name=None, QualifiedName='maxcompute-table.project_mc.flow_model_label_table_v1')]", captured.output[0], ) self.assertEquals( From fdc8e00ba0faf73ae2c05b18f7e646032b32afc8 Mon Sep 17 00:00:00 2001 From: Everett Li Date: Wed, 8 Jan 2025 17:45:33 +0800 Subject: [PATCH 11/13] feat: support oss-file lineage --- pai/tracking/lineage.py | 23 +++++++++++++++------- tests/integration/test_lineage.py | 32 +++++++++++++++++++++++-------- 2 files changed, 40 insertions(+), 15 deletions(-) diff --git a/pai/tracking/lineage.py b/pai/tracking/lineage.py index 7431b4f..17057b0 100644 --- a/pai/tracking/lineage.py +++ b/pai/tracking/lineage.py @@ -100,6 +100,11 @@ class _PvcEntityAttributes: pvc_type: str +@dataclass +class _OssEntityAttributes: + uri: str + + def _read_metadata_config_in_dlc(): try: with open("/var/metadata/config.json", "r") as file: @@ -111,11 +116,11 @@ def _read_metadata_config_in_dlc(): def _get_entity_attributes(source, entity_type): attributes = source.get("Attributes", {}) - if entity_type == "nas": + if entity_type == "nas-file": return _NasEntityAttributes( file_system_id=attributes.get("FileSystemId"), path=attributes.get("Path") ) - if entity_type == "pvc": + if entity_type == "pvc-file": return _PvcEntityAttributes( pvc_type=attributes.get("PvcType"), pvc_name=attributes.get("PvcName"), @@ -123,6 +128,8 @@ def _get_entity_attributes(source, entity_type): cluster_id=attributes.get("ClusterId"), name_space=attributes.get("NameSpace"), ) + if entity_type == "oss-file": + return _OssEntityAttributes(uri=attributes.get("Uri")) return None @@ -134,14 +141,12 @@ def _find_best_match_source(config, mount_path): entity_type = source.get("EntityType") attributes = source.get("Attributes", {}) mount_path_in_source = attributes.get("MountPath", "").rstrip("/") - uri_in_source = source.get("Uri", "").rstrip("/") + "/" if mount_path.startswith(mount_path_in_source) and len( mount_path_in_source ) > len(best_match): best_match = mount_path_in_source best_details = { - "uri_in_source": uri_in_source, "entity_type": entity_type, "entity_attributes": _get_entity_attributes(source, entity_type), } @@ -159,16 +164,20 @@ def _find_datasource_by_mount_path(mount_path: str): region_id = config.get("DLC_REGION_ID") remaining_path = mount_path[len(best_match) :].lstrip("/") return ( - f"{best_details['uri_in_source']}{remaining_path}", + ( + f"{best_details['entity_attributes'].uri.rstrip('/') + '/'}{remaining_path}" + if best_details["entity_type"] == "oss-file" + else None + ), region_id, ( best_details["entity_attributes"] - if best_details["entity_type"] == "nas" + if best_details["entity_type"] == "nas-file" else None ), ( best_details["entity_attributes"] - if best_details["entity_type"] == "pvc" + if best_details["entity_type"] == "pvc-file" else None ), ) diff --git a/tests/integration/test_lineage.py b/tests/integration/test_lineage.py index 9114a9a..b49cd00 100644 --- a/tests/integration/test_lineage.py +++ b/tests/integration/test_lineage.py @@ -82,10 +82,10 @@ def test_log_lineage_with_valid_mount_path_in_dlc(self): mock_config = { "DATA_SOURCES": [ { - "EntityType": "pvc", + "EntityType": "pvc-file", "Attributes": { "ClusterId": "cbb8f09f999534c5187532a19fe6a3bba", - "MountPath": "/mnt/input", + "MountPath": "/mnt/input/pvc", "NameSpace": "quota2md3bak6ovi", "Path": "/nas", "PvcName": "nas-pvc", @@ -93,16 +93,27 @@ def test_log_lineage_with_valid_mount_path_in_dlc(self): }, }, { - "EntityType": "nas", + "EntityType": "nas-file", "Attributes": { "DataSourceId": "data16mjfuvf6v3a", "FileSystemId": "2964e349a2d", - "MountPath": "/mnt/output", + "MountPath": "/mnt/input/nas", "Path": "/", "Uri": "", "Version": "", }, }, + { + "Attributes": { + "DataSourceId": "data824oavjsogd7", + "FileSystemId": "", + "MountPath": "/mnt/output/model", + "Path": "oss://dlc-upload-test/model/", + "Uri": "oss://dlc-upload-test.oss-cn-hangzhou-internal.aliyuncs.com/model/", + "Version": "", + }, + "EntityType": "oss-file", + }, ], "DLC_JOB_ID": "dlcrmzton6fvujw5", "DLC_REGION_ID": "eflops", @@ -116,10 +127,15 @@ def test_log_lineage_with_valid_mount_path_in_dlc(self): log_lineage( input_entities=[ LineageEntity( - uri="file:///mnt/input/dataset", + uri="file:///mnt/input/pvc/dataset", resource_type="model", resource_use="extension", - ) + ), + LineageEntity( + uri="file:///mnt/input/nas/dataset", + resource_type="dataset", + resource_use="train", + ), ], output_entities=[ LineageEntity( @@ -130,11 +146,11 @@ def test_log_lineage_with_valid_mount_path_in_dlc(self): ], ) self.assertIn( - "DEBUG:pai.tracking.lineage:[_LineageEntity(Attributes={'ResourceType': 'model', 'ResourceUse': 'extension', 'RegionId': 'eflops', 'ClusterId': 'cbb8f09f999534c5187532a19fe6a3bba', 'NameSpace': 'quota2md3bak6ovi', 'PvcName': 'nas-pvc', 'Path': '/nas', 'PvcType': 'hostPath'}, EntityType='pvc-file', Name=None, QualifiedName=None)]", + "DEBUG:pai.tracking.lineage:[_LineageEntity(Attributes={'ResourceType': 'model', 'ResourceUse': 'extension', 'RegionId': 'eflops', 'ClusterId': 'cbb8f09f999534c5187532a19fe6a3bba', 'NameSpace': 'quota2md3bak6ovi', 'PvcName': 'nas-pvc', 'Path': '/nas', 'PvcType': 'hostPath'}, EntityType='pvc-file', Name=None, QualifiedName=None), _LineageEntity(Attributes={'Uri': None, 'ResourceType': 'dataset', 'ResourceUse': 'train', 'RegionId': 'eflops', 'FileSystemId': '2964e349a2d', 'Path': '/'}, EntityType='nas-file', Name=None, QualifiedName=None)]", captured.output[0], ) self.assertIn( - "DEBUG:pai.tracking.lineage:[_LineageEntity(Attributes={'Uri': '/model/model.pth', 'ResourceType': 'model', 'ResourceUse': 'extension', 'RegionId': 'eflops', 'FileSystemId': '2964e349a2d', 'Path': '/'}, EntityType='nas-file', Name=None, QualifiedName=None)]", + "DEBUG:pai.tracking.lineage:[_LineageEntity(Attributes={'Bucket': 'dlc-upload-test', 'Path': 'model/model.pth', 'ResourceType': 'model', 'ResourceUse': 'extension', 'RegionId': 'cn-hangzhou'}, EntityType='oss-file', Name=None, QualifiedName=None)]", captured.output[1], ) From 0640eb220803310ff432db7f18c72b26b694ed66 Mon Sep 17 00:00:00 2001 From: Everett Li Date: Sun, 4 Jan 2026 17:08:47 +0800 Subject: [PATCH 12/13] feat: Adapt to new data source configuration of lineage. --- pai/tracking/lineage.py | 57 +++++++------- tests/integration/test_lineage.py | 124 +++++++++++++++--------------- 2 files changed, 90 insertions(+), 91 deletions(-) diff --git a/pai/tracking/lineage.py b/pai/tracking/lineage.py index 17057b0..6753237 100644 --- a/pai/tracking/lineage.py +++ b/pai/tracking/lineage.py @@ -86,13 +86,13 @@ class LineageEntity: @dataclass -class _NasEntityAttributes: +class _NasDatasourceAttributes: file_system_id: str path: str @dataclass -class _PvcEntityAttributes: +class _PvcDatasourceAttributes: cluster_id: str name_space: str pvc_name: str @@ -101,7 +101,7 @@ class _PvcEntityAttributes: @dataclass -class _OssEntityAttributes: +class _OssDatasourceAttributes: uri: str @@ -114,22 +114,21 @@ def _read_metadata_config_in_dlc(): return None -def _get_entity_attributes(source, entity_type): - attributes = source.get("Attributes", {}) - if entity_type == "nas-file": - return _NasEntityAttributes( - file_system_id=attributes.get("FileSystemId"), path=attributes.get("Path") +def _get_datasource_attributes(source, datasource_type): + if datasource_type == "nas" or datasource_type == "cpfs": + return _NasDatasourceAttributes( + file_system_id=source.get("FileSystemId"), path=source.get("Path") ) - if entity_type == "pvc-file": - return _PvcEntityAttributes( - pvc_type=attributes.get("PvcType"), - pvc_name=attributes.get("PvcName"), - path=attributes.get("Path"), - cluster_id=attributes.get("ClusterId"), - name_space=attributes.get("NameSpace"), + if datasource_type == "pvc": + return _PvcDatasourceAttributes( + pvc_type=source.get("PvcType"), + pvc_name=source.get("PvcName"), + path=source.get("Path"), + cluster_id=source.get("ClusterId"), + name_space=source.get("NameSpace"), ) - if entity_type == "oss-file": - return _OssEntityAttributes(uri=attributes.get("Uri")) + if datasource_type == "oss": + return _OssDatasourceAttributes(uri=source.get("Uri")) return None @@ -138,17 +137,18 @@ def _find_best_match_source(config, mount_path): best_details = {} for source in config.get("DATA_SOURCES", []): - entity_type = source.get("EntityType") - attributes = source.get("Attributes", {}) - mount_path_in_source = attributes.get("MountPath", "").rstrip("/") + datasource_type = source.get("DataSourceType") + mount_path_in_source = source.get("MountPath", "").rstrip("/") if mount_path.startswith(mount_path_in_source) and len( mount_path_in_source ) > len(best_match): best_match = mount_path_in_source best_details = { - "entity_type": entity_type, - "entity_attributes": _get_entity_attributes(source, entity_type), + "datasource_type": datasource_type, + "datasource_attributes": _get_datasource_attributes( + source, datasource_type + ), } return best_match, best_details @@ -165,19 +165,20 @@ def _find_datasource_by_mount_path(mount_path: str): remaining_path = mount_path[len(best_match) :].lstrip("/") return ( ( - f"{best_details['entity_attributes'].uri.rstrip('/') + '/'}{remaining_path}" - if best_details["entity_type"] == "oss-file" + f"{best_details['datasource_attributes'].uri.rstrip('/') + '/'}{remaining_path}" + if best_details["datasource_type"] == "oss" else None ), region_id, ( - best_details["entity_attributes"] - if best_details["entity_type"] == "nas-file" + best_details["datasource_attributes"] + if best_details["datasource_type"] == "nas" + or best_details["datasource_type"] == "cpfs" else None ), ( - best_details["entity_attributes"] - if best_details["entity_type"] == "pvc-file" + best_details["datasource_attributes"] + if best_details["datasource_type"] == "pvc" else None ), ) diff --git a/tests/integration/test_lineage.py b/tests/integration/test_lineage.py index b49cd00..cddf683 100644 --- a/tests/integration/test_lineage.py +++ b/tests/integration/test_lineage.py @@ -82,37 +82,31 @@ def test_log_lineage_with_valid_mount_path_in_dlc(self): mock_config = { "DATA_SOURCES": [ { - "EntityType": "pvc-file", - "Attributes": { - "ClusterId": "cbb8f09f999534c5187532a19fe6a3bba", - "MountPath": "/mnt/input/pvc", - "NameSpace": "quota2md3bak6ovi", - "Path": "/nas", - "PvcName": "nas-pvc", - "PvcType": "hostPath", - }, + "DataSourceType": "pvc", + "ClusterId": "cbb8f09f999534c5187532a19fe6a3bba", + "MountPath": "/mnt/input/pvc", + "NameSpace": "quota2md3bak6ovi", + "Path": "/nas", + "PvcName": "nas-pvc", + "PvcType": "hostPath", }, { - "EntityType": "nas-file", - "Attributes": { - "DataSourceId": "data16mjfuvf6v3a", - "FileSystemId": "2964e349a2d", - "MountPath": "/mnt/input/nas", - "Path": "/", - "Uri": "", - "Version": "", - }, + "DataSourceType": "nas", + "DataSourceId": "data16mjfuvf6v3a", + "FileSystemId": "2964e349a2d", + "MountPath": "/mnt/input/nas", + "Path": "/", + "Uri": "", + "Version": "", }, { - "Attributes": { - "DataSourceId": "data824oavjsogd7", - "FileSystemId": "", - "MountPath": "/mnt/output/model", - "Path": "oss://dlc-upload-test/model/", - "Uri": "oss://dlc-upload-test.oss-cn-hangzhou-internal.aliyuncs.com/model/", - "Version": "", - }, - "EntityType": "oss-file", + "DataSourceId": "data824oavjsogd7", + "FileSystemId": "", + "MountPath": "/mnt/output/model", + "Path": "oss://dlc-upload-test/model/", + "Uri": "oss://dlc-upload-test.oss-cn-hangzhou-internal.aliyuncs.com/model/", + "Version": "", + "DataSourceType": "oss", }, ], "DLC_JOB_ID": "dlcrmzton6fvujw5", @@ -160,42 +154,46 @@ def test_log_lineage_with_valid_entities_in_dlc(self): with self.assertLogs( logger=get_logger("pai.tracking.lineage"), level=logging.DEBUG ) as captured: - log_lineage( - input_entities=[ - LineageEntity( - uri="oss://test-bucket.oss-cn-shanghai.aliyuncs.com/models/ALBERTv2-Chinese-NewsBase.pth", - resource_type="model", - resource_use="base", - ), - LineageEntity( - uri="pai://datasets/d-jipftzxinc7nm1z0uh/v1", - resource_type="dataset", - resource_use="train", - ), - LineageEntity( - uri="odps://project_mc/tables/flow_model_label_table_v1", - resource_type="dataset", - resource_use="test", - ), - ], - output_entities=[ - LineageEntity( - uri="oss://hangzhoutest01.oss-cn-hangzhou-internal.aliyuncs.com/models/model.pth", - resource_type="model", - resource_use="extension", - ) - ], - ) - self.maxDiff = None - self.assertEquals( - "DEBUG:pai.tracking.lineage:[_LineageEntity(Attributes={'Bucket': 'test-bucket', 'Path': 'models/ALBERTv2-Chinese-NewsBase.pth', 'ResourceType': 'model', 'ResourceUse': 'base', 'RegionId': 'cn-shanghai'}, EntityType='oss-file', Name=None, QualifiedName=None), _LineageEntity(Attributes={'ResourceUse': 'train', 'Provider': 'pai'}, EntityType=None, Name='Aishell_1_subset_qwen', QualifiedName='pai-dataset.d-jipftzxinc7nm1z0uh_v1'), _LineageEntity(Attributes={'ResourceType': 'dataset', 'ResourceUse': 'test'}, EntityType=None, Name=None, QualifiedName='maxcompute-table.project_mc.flow_model_label_table_v1')]", - captured.output[0], - ) - self.assertEquals( - "DEBUG:pai.tracking.lineage:[_LineageEntity(Attributes={'Bucket': 'hangzhoutest01', 'Path': 'models/model.pth', 'ResourceType': 'model', 'ResourceUse': 'extension', 'RegionId': 'cn-hangzhou'}, EntityType='oss-file', Name=None, QualifiedName=None)]", - captured.output[1], - ) - self.assertEquals("DEBUG:pai.tracking.lineage:d123456", captured.output[2]) + with patch( + "pai.api.api_container.ResourceAPIsContainerMixin.lineage_api", + return_value={}, + ): + log_lineage( + input_entities=[ + LineageEntity( + uri="oss://test-bucket.oss-cn-shanghai.aliyuncs.com/models/ALBERTv2-Chinese-NewsBase.pth", + resource_type="model", + resource_use="base", + ), + LineageEntity( + uri="pai://datasets/d-jipftzxinc7nm1z0uh/v1", + resource_type="dataset", + resource_use="train", + ), + LineageEntity( + uri="odps://project_mc/tables/flow_model_label_table_v1", + resource_type="dataset", + resource_use="test", + ), + ], + output_entities=[ + LineageEntity( + uri="oss://hangzhoutest01.oss-cn-hangzhou-internal.aliyuncs.com/models/model.pth", + resource_type="model", + resource_use="extension", + ) + ], + ) + self.maxDiff = None + self.assertEquals( + "DEBUG:pai.tracking.lineage:[_LineageEntity(Attributes={'Bucket': 'test-bucket', 'Path': 'models/ALBERTv2-Chinese-NewsBase.pth', 'ResourceType': 'model', 'ResourceUse': 'base', 'RegionId': 'cn-shanghai'}, EntityType='oss-file', Name=None, QualifiedName=None), _LineageEntity(Attributes={'ResourceUse': 'train', 'Provider': 'pai'}, EntityType=None, Name='Aishell_1_subset_qwen', QualifiedName='pai-dataset.d-jipftzxinc7nm1z0uh_v1'), _LineageEntity(Attributes={'ResourceType': 'dataset', 'ResourceUse': 'test'}, EntityType=None, Name=None, QualifiedName='maxcompute-table.project_mc.flow_model_label_table_v1')]", + captured.output[0], + ) + self.assertEquals( + "DEBUG:pai.tracking.lineage:[_LineageEntity(Attributes={'Bucket': 'hangzhoutest01', 'Path': 'models/model.pth', 'ResourceType': 'model', 'ResourceUse': 'extension', 'RegionId': 'cn-hangzhou'}, EntityType='oss-file', Name=None, QualifiedName=None)]", + captured.output[1], + ) + self.assertEquals("DEBUG:pai.tracking.lineage:d123456", captured.output[2]) @mock_env(DLC_JOB_ID="d123456") @mock_env(REGION="cn-hangzhou") From 0a1010c4f82664c4e3c9507322c08bb303e59147 Mon Sep 17 00:00:00 2001 From: Everett Li Date: Sun, 4 Jan 2026 17:43:10 +0800 Subject: [PATCH 13/13] fix: Fix lint error. --- noxfile.py | 2 +- requirements/doc-requirements.txt | 2 +- tests/integration/test_lineage.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/noxfile.py b/noxfile.py index f74aca9..31974b4 100644 --- a/noxfile.py +++ b/noxfile.py @@ -100,7 +100,7 @@ def unit(session: Session): def lint(session: Session): """Enforce code style with flake8.""" session.install("-r", LINT_REQUIREMENTS) - session.run("flake8", "--config", ".flake8") + session.run("flake8", "--exclude", "venv,.venv,env,.nox,build,dist", "--config", ".flake8") session.run("black", "--check", ".") session.run("typos", "--config", "typos.toml", "-w") diff --git a/requirements/doc-requirements.txt b/requirements/doc-requirements.txt index d7ba28e..a985769 100644 --- a/requirements/doc-requirements.txt +++ b/requirements/doc-requirements.txt @@ -1,4 +1,4 @@ -sphinx +sphinx>=5.0.0 sphinx-rtd-theme sphinx-copybutton sphinx_book_theme diff --git a/tests/integration/test_lineage.py b/tests/integration/test_lineage.py index cddf683..9a71ab2 100644 --- a/tests/integration/test_lineage.py +++ b/tests/integration/test_lineage.py @@ -155,7 +155,7 @@ def test_log_lineage_with_valid_entities_in_dlc(self): logger=get_logger("pai.tracking.lineage"), level=logging.DEBUG ) as captured: with patch( - "pai.api.api_container.ResourceAPIsContainerMixin.lineage_api", + "pai.api.api_container.ResourceAPIsContainerMixin.lineage_api", return_value={}, ): log_lineage(