diff --git a/rplugin/python3/mrpy/clickup.py b/rplugin/python3/mrpy/clickup.py index e44ada4..00be9a5 100644 --- a/rplugin/python3/mrpy/clickup.py +++ b/rplugin/python3/mrpy/clickup.py @@ -1,8 +1,43 @@ +from json import loads from typing import Any -from pydantic import AliasChoices, AliasPath, BaseModel, Field, field_validator + +from pydantic import AliasPath, BaseModel, Field, field_validator from pydantic_settings import BaseSettings -from requests import get, put -from ruamel.yaml import Node, Representer, ScalarNode + +from urllib.request import Request, urlopen + + +def get( + url: str, + query_params: dict[str, str] | None = None, + headers: dict[str, str] | None = None, +) -> str: + with urlopen( + Request( + url + ("?" + "&".join(f"{k}={v}" for k, v in query_params.items())) + if query_params + else "", + headers=headers or {}, + method="GET", + ), + ) as resp: + return resp.read().decode("utf-8") + + +def put( + url: str, + data: dict[str, str] | None = None, + headers: dict[str, str] | None = None, +) -> str: + with urlopen( + Request( + url, + str(data).encode(), + headers=headers or {}, + method="PUT", + ), + ) as resp: + return resp.read().decode("utf-8") class ClickupTask(BaseModel): @@ -77,18 +112,18 @@ class ClickupSession(BaseSettings): base_url: str = "https://api.clickup.com/api/v2" def _get(self, endpoint: str, **query_params: Any) -> dict[str, Any]: - with get( + raw_data = get( self.base_url + endpoint, query_params, headers={ "accept": "application/json", "Authorization": self.auth_key, }, - ) as resp: - return resp.json() + ) + return loads(raw_data) def _put(self, endpoint: str, **body_params: Any) -> dict[str, Any]: - with put( + raw_data = put( self.base_url + endpoint, body_params, headers={ @@ -96,8 +131,8 @@ class ClickupSession(BaseSettings): "content-type": "application/json", "Authorization": self.auth_key, }, - ) as resp: - return resp.json() + ) + return loads(raw_data) def get_tasks(self) -> list[ClickupTask]: data = self._get(