pai/api/workspace.py (226 lines of code) (raw):

# 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 typing from typing import Any, Dict, List, Union from ..libs.alibabacloud_aiworkspace20210204.models import ( CreateMemberRequest, CreateMemberRequestMembers, CreateMemberResponseBody, CreateWorkspaceRequest, CreateWorkspaceResponseBody, DeleteMembersRequest, GetDefaultWorkspaceRequest, GetDefaultWorkspaceResponseBody, GetMemberRequest, GetMemberResponseBody, GetWorkspaceRequest, GetWorkspaceResponseBody, ListConfigsRequest, ListConfigsResponseBody, ListMembersRequest, ListMembersResponseBody, ListProductAuthorizationsRequest, ListProductAuthorizationsResponseBody, ListWorkspacesRequest, ListWorkspacesResponseBody, UpdateConfigsRequest, UpdateConfigsRequestConfigs, ) from .base import ResourceAPI, ServiceName if typing.TYPE_CHECKING: pass class WorkspaceConfigKeys(object): DEFAULT_OSS_STORAGE_URI = "modelExportPath" MAXCOMPUTE_TEMP_TABLE_LIFECYCLE = "tempTableLifecycle" class WorkspaceAPI(ResourceAPI): BACKEND_SERVICE_NAME = ServiceName.PAI_WORKSPACE _list_method = "list_workspaces_with_options" _get_method = "get_workspace_with_options" _create_method = "create_workspace_with_options" _get_default_workspace_method = "get_default_workspace_with_options" _list_configs_method = "list_configs_with_options" _update_configs_method = "update_configs_with_options" _list_member_method = "list_members_with_options" _create_member_method = "create_member_with_options" _get_member_method = "get_member_with_options" _delete_members_method = "delete_members_with_options" _add_member_role_method = "add_member_role_with_options" _remove_member_role_method = "remove_member_role_with_options" _list_product_authorizations_method = "list_product_authorizations_with_options" def list( self, page_number=None, page_size=None, sort_by=None, order=None, name=None, module_list=None, status=None, option=None, verbose=None, ) -> List[Dict[str, Any]]: request = ListWorkspacesRequest( page_number=page_number, page_size=page_size, sort_by=sort_by, order=order, workspace_name=name, module_list=module_list, status=status, option=option, verbose=verbose, ) res: ListWorkspacesResponseBody = self._do_request( method_=self._list_method, request=request ) return [item.to_map() for item in res.workspaces] def get(self, workspace_id: str, verbose: bool = True) -> Dict[str, Any]: request = GetWorkspaceRequest(verbose=verbose) res: GetWorkspaceResponseBody = self._do_request( method_=self._get_method, workspace_id=workspace_id, request=request, ) return res.to_map() def create( self, name: str, display_name: str = None, description: str = None, env_types: List[str] = None, ) -> str: request = CreateWorkspaceRequest( description=description, display_name=display_name, workspace_name=name, env_types=env_types, ) res: CreateWorkspaceResponseBody = self._do_request( method_=self._create_method, request=request ) return res.workspace_id def list_members( self, workspace_id: str, member_name: str = None, roles: List[str] = None, page_number: int = None, page_size: int = None, ) -> List[Dict[str, Any]]: request = ListMembersRequest( member_name=member_name, page_number=page_number, page_size=page_size, roles=roles, ) res: ListMembersResponseBody = self._do_request( method_=self._list_member_method, workspace_id=workspace_id, request=request, ) return [item.to_map() for item in res.members] def add_member(self, workspace_id: str, user_id: str, roles: List[str]) -> str: request = CreateMemberRequest( members=[ CreateMemberRequestMembers( user_id=user_id, roles=roles, ) ], ) res: CreateMemberResponseBody = self._do_request( method_=self._create_member_method, workspace_id=workspace_id, request=request, ) return res.members[0].member_id def get_member(self, workspace_id: str, user_id: str) -> Dict[str, Any]: request = GetMemberRequest(user_id=user_id) res: GetMemberResponseBody = self._do_request( method_=self._get_member_method, workspace_id=workspace_id, request=request ) return res.to_map() def delete_members(self, workspace_id: str, member_ids: List[str]) -> None: request = DeleteMembersRequest( member_ids=member_ids, ) self._do_request( method_=self._delete_members_method, workspace_id=workspace_id, request=request, ) def add_member_role( self, workspace_id: str, member_id: str, role_name: str ) -> None: self._do_request( method_=self._add_member_role_method, workspace_id=workspace_id, member_id=member_id, role_name=role_name, ) def remove_member_role( self, workspace_id: str, member_id: str, role_name: str ) -> None: self._do_request( method_=self._remove_member_role_method, workspace_id=workspace_id, member_id=member_id, role_name=role_name, ) def get_default_workspace(self) -> Dict[str, Any]: """Get the default workspace for the account.""" request = GetDefaultWorkspaceRequest() resp: GetDefaultWorkspaceResponseBody = self._do_request( method_=self._get_default_workspace_method, request=request ) return resp.to_map() def list_configs(self, workspace_id, config_keys: Union[List[str], str]) -> Dict: """List configs used in the Workspace.""" request = ListConfigsRequest( config_keys=( ",".join(config_keys) if isinstance(config_keys, (tuple, list)) else config_keys ), ) resp: ListConfigsResponseBody = self._do_request( method_=self._list_configs_method, workspace_id=workspace_id, request=request, ) return resp.to_map() def get_default_storage_uri(self, workspace_id): resp = self.list_configs( workspace_id=workspace_id, config_keys=WorkspaceConfigKeys.DEFAULT_OSS_STORAGE_URI, ) oss_storage_uri = next( ( item["ConfigValue"] for item in resp["Configs"] if item["ConfigKey"] == WorkspaceConfigKeys.DEFAULT_OSS_STORAGE_URI ), None, ) return oss_storage_uri def update_configs(self, workspace_id: str, configs: Union[Dict, List]): """Update configs used in the Workspace.""" if isinstance(configs, Dict): configs = [ UpdateConfigsRequestConfigs( config_key=key, config_value=value, ) for key, value in configs.items() ] else: configs = [UpdateConfigsRequestConfigs.from_map(item) for item in configs] request = UpdateConfigsRequest(configs=configs) self._do_request( method_=self._update_configs_method, workspace_id=workspace_id, request=request, ) def list_product_authorizations(self, ram_role_names: List[str]) -> Dict[str, Any]: request = ListProductAuthorizationsRequest( ram_role_names=",".join(ram_role_names) ) res: ListProductAuthorizationsResponseBody = self._do_request( self._list_product_authorizations_method, request ) return res.to_map()