split off requests and env handling
This commit is contained in:
parent
da494835cb
commit
0407393eda
|
|
@ -4,42 +4,9 @@ from json import loads
|
||||||
from os import environ
|
from os import environ
|
||||||
from typing import Any, Callable, Self, TypedDict
|
from typing import Any, Callable, Self, TypedDict
|
||||||
|
|
||||||
from urllib.request import Request, urlopen
|
|
||||||
|
|
||||||
from .hints import JSONDataMap
|
from .hints import JSONDataMap
|
||||||
|
from .requests import get, put
|
||||||
|
from .env import EnvVar
|
||||||
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 TaskRespDict(TypedDict):
|
class TaskRespDict(TypedDict):
|
||||||
|
|
@ -134,33 +101,22 @@ class ClickupTask:
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
||||||
def get_env_var(var_name: str, err_msg: str = "") -> Callable[[], str]:
|
|
||||||
def wrapper(var: str = var_name) -> str:
|
|
||||||
try:
|
|
||||||
return environ[var]
|
|
||||||
except KeyError as e:
|
|
||||||
e.add_note(err_msg)
|
|
||||||
raise
|
|
||||||
|
|
||||||
return wrapper
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class ClickupSession:
|
class ClickupSession:
|
||||||
auth_key: str = field(
|
auth_key: str = field(
|
||||||
default_factory=get_env_var(
|
default_factory=EnvVar(
|
||||||
"CLICKUP_AUTH",
|
"CLICKUP_AUTH",
|
||||||
"clickup auth token is required to be set",
|
"clickup auth token is required to be set",
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
workspace_id: str = field(
|
workspace_id: str = field(
|
||||||
default_factory=get_env_var(
|
default_factory=EnvVar(
|
||||||
"CLICKUP_WORKSPACE_ID",
|
"CLICKUP_WORKSPACE_ID",
|
||||||
"clickup workspace id is required to be set",
|
"clickup workspace id is required to be set",
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
user_id: str = field(
|
user_id: str = field(
|
||||||
default_factory=get_env_var(
|
default_factory=EnvVar(
|
||||||
"CLICKUP_USER_ID",
|
"CLICKUP_USER_ID",
|
||||||
"clickup user id is required to be set",
|
"clickup user id is required to be set",
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from os import environ
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class EnvVar:
|
||||||
|
"""
|
||||||
|
Environment Variable fetcher for use in dataclass ``field(default_factory=...)``
|
||||||
|
|
||||||
|
>>> @dataclass
|
||||||
|
>>> class SomeDataclass:
|
||||||
|
... field_name: str = field(default_factory=EnvVar("SOME_VAR_NAME", "err msg"))
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
var_name: str
|
||||||
|
err_msg: str = ""
|
||||||
|
|
||||||
|
def __call__(self) -> str:
|
||||||
|
try:
|
||||||
|
return environ[self.var_name]
|
||||||
|
except KeyError as e:
|
||||||
|
e.add_note(self.err_msg)
|
||||||
|
raise
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
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")
|
||||||
Loading…
Reference in New Issue