mirror of
https://github.com/bitechdev/ResolveSpec.git
synced 2026-10-01 19:20:31 +00:00
44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
"""ResolveSpec Python client: REST (ResolveSpec), HeaderSpec and WebSocketSpec."""
|
|
from typing import Mapping, Optional
|
|
|
|
from .headerspec import (
|
|
AsyncHeaderSpecClient,
|
|
HeaderSpecClient,
|
|
build_headers,
|
|
decode_header_value,
|
|
encode_header_value,
|
|
)
|
|
from .funcspec import AsyncFuncSpecClient, FuncSpecClient
|
|
from .http import ResolveSpecError, merge_headers
|
|
from .resolvespec import AsyncResolveSpecClient, ResolveSpecClient
|
|
from .types import * # noqa: F401,F403
|
|
from .websocket import Subscription, WebSocketClient
|
|
|
|
|
|
def _cache_key(base_url: str, token: Optional[str], headers: Optional[Mapping[str, str]]):
|
|
return (
|
|
base_url,
|
|
token,
|
|
tuple(sorted((k.lower(), v) for k, v in (headers or {}).items())),
|
|
)
|
|
|
|
|
|
_resolvespec: dict = {}
|
|
_headerspec: dict = {}
|
|
|
|
|
|
def get_resolvespec_client(base_url: str, token: Optional[str] = None, headers: Optional[Mapping[str, str]] = None) -> ResolveSpecClient:
|
|
"""Cached sync client, keyed by base_url + token + headers (case-insensitive names)."""
|
|
key = _cache_key(base_url, token, headers)
|
|
if key not in _resolvespec:
|
|
_resolvespec[key] = ResolveSpecClient(base_url, token, headers)
|
|
return _resolvespec[key]
|
|
|
|
|
|
def get_headerspec_client(base_url: str, token: Optional[str] = None, headers: Optional[Mapping[str, str]] = None) -> HeaderSpecClient:
|
|
"""Cached sync client, keyed by base_url + token + headers (case-insensitive names)."""
|
|
key = _cache_key(base_url, token, headers)
|
|
if key not in _headerspec:
|
|
_headerspec[key] = HeaderSpecClient(base_url, token, headers)
|
|
return _headerspec[key]
|