From 62c9a4d8a8e403085288a11033dab10de0564b5f Mon Sep 17 00:00:00 2001 From: chyroc Date: Mon, 23 Sep 2024 18:49:45 +0800 Subject: [PATCH] feat: add get workspace list api --- cozepy/coze.py | 12 ++++++++- cozepy/request.py | 2 +- cozepy/workspace.py | 59 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 cozepy/workspace.py diff --git a/cozepy/coze.py b/cozepy/coze.py index b04543e..aa52892 100644 --- a/cozepy/coze.py +++ b/cozepy/coze.py @@ -5,7 +5,8 @@ from cozepy.request import Requester if TYPE_CHECKING: - from cozepy.bot import BotClient + from .bot import BotClient + from .workspace import WorkspaceClient class Coze(object): @@ -20,6 +21,7 @@ def __init__( # service client self._bot = None + self._workspace = None @property def bot(self) -> "BotClient": @@ -28,3 +30,11 @@ def bot(self) -> "BotClient": self._bot = BotClient(self._base_url, self._auth, self._requester) return self._bot + + @property + def workspace(self) -> "WorkspaceClient": + if not self._workspace: + from cozepy.workspace import WorkspaceClient + + self._workspace = WorkspaceClient(self._base_url, self._auth, self._requester) + return self._workspace diff --git a/cozepy/request.py b/cozepy/request.py index 5bf051a..c93a865 100644 --- a/cozepy/request.py +++ b/cozepy/request.py @@ -71,7 +71,7 @@ def __parse_requests_code_msg(self, r: Response) -> Tuple[Optional[int], str, Op return if "code" in json and "msg" in json and int(json["code"]) > 0: - return int(json["code"]), json["msg"], json["data"] + return int(json["code"]), json["msg"], json.get("data") or None if "error_message" in json and json["error_message"] != "": return None, json["error_message"], None if "data" in json: diff --git a/cozepy/workspace.py b/cozepy/workspace.py new file mode 100644 index 0000000..12e1a08 --- /dev/null +++ b/cozepy/workspace.py @@ -0,0 +1,59 @@ +from enum import StrEnum +from typing import List + +from cozepy import Auth, NumberPaged +from cozepy.model import CozeModel +from cozepy.request import Requester + + +class WorkspaceRoleType(StrEnum): + owner = "owner" + admin = "admin" + member = "member" + + +class WorkspaceType(StrEnum): + personal = "personal" + team = "team" + + +class Workspace(CozeModel): + # workspace id + id: str + # workspace name + name: str + # workspace icon url + icon_url: str + # user in workspace role type + role_type: WorkspaceRoleType + # workspace type + workspace_type: WorkspaceType + + +class WorkspaceClient(object): + """ + Bot class. + """ + + def __init__(self, base_url: str, auth: Auth, requester: Requester): + self._base_url = base_url + self._auth = auth + self._requester = requester + + def list_workspace_v1(self, *, page_num: int = 1, page_size: int = 20, headers=None) -> NumberPaged[Workspace]: + url = f"{self._base_url}/v1/workspaces" + params = { + "page_size": page_size, + "page_num": page_num, + } + data = self._requester.request("get", url, self._PrivateListPublishedBotsV1Data, headers=headers, params=params) + return NumberPaged( + items=data.workspaces, + page_num=page_num, + page_size=page_size, + total=data.total_count, + ) + + class _PrivateListPublishedBotsV1Data(CozeModel): + total_count: int + workspaces: List[Workspace]