forked from retoor/devplacepy
update
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
# retoor <retoor@molodetz.nl>
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import contextvars
|
||||
import os
|
||||
from typing import Any
|
||||
|
||||
import httpx
|
||||
|
||||
from devplacepy import stealth
|
||||
|
||||
INTERNAL_CALLS: contextvars.ContextVar[int] = contextvars.ContextVar(
|
||||
"internal_calls", default=0
|
||||
)
|
||||
REQUEST_ID: contextvars.ContextVar[str] = contextvars.ContextVar("request_id", default="")
|
||||
|
||||
_POOL: httpx.AsyncClient | None = None
|
||||
|
||||
|
||||
def bump_internal_calls() -> None:
|
||||
INTERNAL_CALLS.set(INTERNAL_CALLS.get() + 1)
|
||||
|
||||
|
||||
def current_internal_calls() -> int:
|
||||
return INTERNAL_CALLS.get()
|
||||
|
||||
|
||||
def current_request_id() -> str:
|
||||
return REQUEST_ID.get()
|
||||
|
||||
|
||||
async def startup_pool() -> None:
|
||||
global _POOL
|
||||
if _POOL is None:
|
||||
_POOL = httpx.AsyncClient(
|
||||
limits=httpx.Limits(max_connections=32, max_keepalive_connections=32),
|
||||
timeout=httpx.Timeout(30.0),
|
||||
http2=False,
|
||||
)
|
||||
|
||||
|
||||
async def shutdown_pool() -> None:
|
||||
global _POOL
|
||||
if _POOL is not None:
|
||||
await _POOL.aclose()
|
||||
_POOL = None
|
||||
|
||||
|
||||
def stealth_async_client(**kwargs: Any) -> httpx.AsyncClient:
|
||||
return stealth.stealth_async_client(**kwargs)
|
||||
|
||||
|
||||
async def internal_request(
|
||||
method: str,
|
||||
url: str,
|
||||
*,
|
||||
json: dict | None = None,
|
||||
params: dict | None = None,
|
||||
headers: dict[str, str] | None = None,
|
||||
timeout: float = 30.0,
|
||||
) -> httpx.Response:
|
||||
await startup_pool()
|
||||
assert _POOL is not None
|
||||
bump_internal_calls()
|
||||
merged: dict[str, str] = {}
|
||||
request_id = current_request_id()
|
||||
if request_id:
|
||||
merged["X-Request-Id"] = request_id
|
||||
internal_key = os.environ.get("DEVPLACE_GATEWAY_INTERNAL_KEY", "").strip()
|
||||
if internal_key:
|
||||
merged["X-Internal-Key"] = internal_key
|
||||
if headers:
|
||||
merged.update(headers)
|
||||
return await _POOL.request(
|
||||
method, url, json=json, params=params, headers=merged, timeout=timeout
|
||||
)
|
||||
Reference in New Issue
Block a user