From 93a39ad8891bc9ff5cd92e569560e981b7c32448 Mon Sep 17 00:00:00 2001 From: Patrick Nisble Date: Mon, 12 Jan 2026 08:37:16 +0100 Subject: [PATCH] update requests for DRY --- rplugin/python3/mrpy/requests.py | 72 +++++++++++++++++++++----------- 1 file changed, 48 insertions(+), 24 deletions(-) diff --git a/rplugin/python3/mrpy/requests.py b/rplugin/python3/mrpy/requests.py index 96ca37d..4418e33 100644 --- a/rplugin/python3/mrpy/requests.py +++ b/rplugin/python3/mrpy/requests.py @@ -1,5 +1,36 @@ +from json import dumps from ssl import SSLContext, create_default_context +from urllib.error import HTTPError from urllib.request import Request, urlopen +from urllib.parse import urlencode + + +def request( + url: str, + method: str, + query_params: dict[str, str] | None = None, + data: dict[str, str] | None = None, + headers: dict[str, str] | None = None, +) -> str: + try: + with urlopen( + Request( + url + + ( + ("?" + "&".join(f"{k}={v}" for k, v in query_params.items())) + if query_params + else "" + ), + dumps(data).encode() if data else None, + headers=headers or {}, + method=method, + ), + context=create_default_context(), + ) as resp: + return resp.read().decode("utf-8") + except HTTPError as e: + e.add_note(e.url) + raise def get( @@ -7,20 +38,15 @@ def get( 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", - ), - context=create_default_context(), - ) as resp: - return resp.read().decode("utf-8") + return request(url, "GET", query_params=query_params, headers=headers) + + +def post( + url: str, + data: dict[str, str] | None = None, + headers: dict[str, str] | None = None, +) -> str: + return request(url, "POST", data=data, headers=headers) def put( @@ -28,13 +54,11 @@ def put( 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", - ), - context=create_default_context(), - ) as resp: - return resp.read().decode("utf-8") + return request(url, "PUT", data=data, headers=headers) + + +def delete( + url: str, + headers: dict[str, str] | None = None, +) -> str: + return request(url, "DELETE", headers=headers)