2025-12-23 20:42:58 +08:00

45 lines
1.2 KiB
Python

import platform
import sys
from urllib.parse import urljoin
from requests.sessions import Session
from rich.console import Console
console = Console()
# Default User-Agent to identify CLI-originated traffic server-side
CLI_USER_AGENT = (
f"press-cli/python-{sys.version_info.major}.{sys.version_info.minor}; {platform.system().lower()})"
)
class CloudSession(Session):
"""Custom requests.Session with Jingrow sid cookie"""
def __init__(self, session_id: str):
super().__init__()
self.base_url = "https://jcloud.jingrow.com/api/method/"
self.cookies.set("sid", session_id)
def request(self, method, url, *args, **kwargs) -> dict[str, str]:
joined_url = urljoin(self.base_url, url)
# Inject a default User-Agent header for tracking CLI requests
headers = kwargs.pop("headers", None) or {}
headers.setdefault("User-Agent", CLI_USER_AGENT)
kwargs["headers"] = headers
if message := kwargs.pop("message", None):
with console.status(message, spinner="dots"):
response = super().request(method, joined_url, *args, **kwargs)
else:
response = super().request(method, joined_url, *args, **kwargs)
response.raise_for_status()
response = response.json()
if "message" in response:
return response["message"]
return response