Source code for supervisely.api.workspace_api

# coding: utf-8
"""list/create supervisely workspaces"""

from __future__ import annotations
from typing import NamedTuple, List, Dict, Optional

from supervisely.api.module_api import ApiField, ModuleApi, UpdateableModule


class WorkspaceInfo(NamedTuple):
    """ """

    id: int
    name: str
    description: str
    team_id: int
    created_at: str
    updated_at: str


[docs]class WorkspaceApi(ModuleApi, UpdateableModule): """ API for working with Workspace. :class:`WorkspaceApi<WorkspaceApi>` object is immutable. :param api: API connection to the server. :type api: Api :Usage example: .. code-block:: python import os from dotenv import load_dotenv import supervisely as sly # Load secrets and create API object from .env file (recommended) # Learn more here: https://developer.supervisely.com/getting-started/basics-of-authentication if sly.is_development(): load_dotenv(os.path.expanduser("~/supervisely.env")) api = sly.Api.from_env() # Pass values into the API constructor (optional, not recommended) # api = sly.Api(server_address="https://app.supervise.ly", token="4r47N...xaTatb") workspace_info = api.workspace.get_info_by_id(workspace_id) # api usage example """
[docs] @staticmethod def info_sequence(): """ NamedTuple WorkspaceInfo containing information about Workspace. :Example: .. code-block:: python WorkspaceInfo(id=15, name='Cars', description='Workspace contains Project with annotated Cars', team_id=8, created_at='2020-04-15T10:50:41.926Z', updated_at='2020-04-15T10:50:41.926Z') """ return [ ApiField.ID, ApiField.NAME, ApiField.DESCRIPTION, ApiField.TEAM_ID, ApiField.CREATED_AT, ApiField.UPDATED_AT, ]
[docs] @staticmethod def info_tuple_name(): """ NamedTuple name - **WorkspaceInfo**. """ return "WorkspaceInfo"
def __init__(self, api): ModuleApi.__init__(self, api) UpdateableModule.__init__(self, api)
[docs] def get_list( self, team_id: int, filters: Optional[List[Dict[str, str]]] = None ) -> List[WorkspaceInfo]: """ List of Workspaces in the given Team. :param team_id: Team ID in which the Workspaces are located. :type team_id: int :param filters: List of params to sort output Workspaces. :type filters: List[dict], optional :return: List of all Workspaces with information for the given Team. See :class:`info_sequence<info_sequence>` :rtype: :class:`List[WorkspaceInfo]` :Usage example: .. code-block:: python import supervisely as sly os.environ['SERVER_ADDRESS'] = 'https://app.supervise.ly' os.environ['API_TOKEN'] = 'Your Supervisely API Token' api = sly.Api.from_env() workspace_infos = api.workspace.get_list(8) print(workspace_infos) # Output: [ # WorkspaceInfo(id=15, # name='Cars', # description='', # team_id=8, # created_at='2020-04-15T10:50:41.926Z', # updated_at='2020-04-15T10:50:41.926Z'), # WorkspaceInfo(id=18, # name='Heart', # description='', # team_id=8, # created_at='2020-05-20T15:01:54.172Z', # updated_at='2020-05-20T15:01:54.172Z'), # WorkspaceInfo(id=20, # name='PCD', # description='', # team_id=8, # created_at='2020-06-24T11:51:11.336Z', # updated_at='2020-06-24T11:51:11.336Z') # ] # Filtered Workspace list workspace_infos = api.workspace.get_list(8, filters=[{ 'field': 'name', 'operator': '=', 'value': 'Heart'}]) print(workspace_infos) # Output: [WorkspaceInfo(id=18, # name='Heart', # description='', # team_id=8, # created_at='2020-05-20T15:01:54.172Z', # updated_at='2020-05-20T15:01:54.172Z') # ] """ return self.get_list_all_pages( "workspaces.list", {ApiField.TEAM_ID: team_id, ApiField.FILTER: filters or []}, )
[docs] def get_info_by_id(self, id: int, raise_error: Optional[bool] = False) -> WorkspaceInfo: """ Get Workspace information by ID. :param id: Workspace ID in Supervisely. :type id: int :return: Information about Workspace. See :class:`info_sequence<info_sequence>` :rtype: :class:`WorkspaceInfo` :Usage example: .. code-block:: python import supervisely as sly os.environ['SERVER_ADDRESS'] = 'https://app.supervise.ly' os.environ['API_TOKEN'] = 'Your Supervisely API Token' api = sly.Api.from_env() workspace_info = api.workspace.get_info_by_id(58) print(workspace_info) # Output: WorkspaceInfo(id=58, # name='Test', # description='', # team_id=8, # created_at='2020-11-09T18:21:08.202Z', # updated_at='2020-11-09T18:21:08.202Z') """ info = self._get_info_by_id(id, "workspaces.info") if info is None and raise_error is True: raise KeyError(f"Workspace with id={id} not found in your account") return info
[docs] def create( self, team_id: int, name: str, description: Optional[str] = "", change_name_if_conflict: Optional[bool] = False, ) -> WorkspaceInfo: """ Create Workspace with given name in the given Team. :param team_id: Team ID in Supervisely where Workspace will be created. :type team_id: int :param name: Workspace Name. :type name: str :param description: Workspace description. :type description: str, optional :param change_name_if_conflict: Checks if given name already exists and adds suffix to the end of the name. :type change_name_if_conflict: bool, optional :return: Information about Workspace. See :class:`info_sequence<info_sequence>` :rtype: :class:`WorkspaceInfo` :Usage example: .. code-block:: python import supervisely as sly os.environ['SERVER_ADDRESS'] = 'https://app.supervise.ly' os.environ['API_TOKEN'] = 'Your Supervisely API Token' api = sly.Api.from_env() new_workspace = api.workspace.create(8, "Vehicle Detection") print(new_workspace) # Output: WorkspaceInfo(id=274, # name='Vehicle Detection"', # description='', # team_id=8, # created_at='2021-03-11T12:24:21.773Z', # updated_at='2021-03-11T12:24:21.773Z') """ effective_name = self._get_effective_new_name( parent_id=team_id, name=name, change_name_if_conflict=change_name_if_conflict, ) response = self._api.post( "workspaces.add", { ApiField.TEAM_ID: team_id, ApiField.NAME: effective_name, ApiField.DESCRIPTION: description, }, ) return self._convert_json_info(response.json())
def _get_update_method(self): """ """ return "workspaces.editInfo" def _convert_json_info(self, info: dict, skip_missing=True) -> WorkspaceInfo: """ """ res = super()._convert_json_info(info, skip_missing=skip_missing) return WorkspaceInfo(**res._asdict())