updates
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
from stripe._requestor_options import RequestorOptions
|
||||
from typing import Mapping, Optional, Dict, Tuple, Any
|
||||
from typing_extensions import NotRequired, TypedDict, TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from stripe._stripe_context import StripeContext
|
||||
|
||||
|
||||
class RequestOptions(TypedDict):
|
||||
api_key: NotRequired["str|None"]
|
||||
stripe_version: NotRequired["str|None"]
|
||||
stripe_account: NotRequired["str|None"]
|
||||
stripe_context: NotRequired["str | StripeContext | None"]
|
||||
max_network_retries: NotRequired["int|None"]
|
||||
idempotency_key: NotRequired["str|None"]
|
||||
content_type: NotRequired["str|None"]
|
||||
headers: NotRequired["Mapping[str, str]|None"]
|
||||
|
||||
|
||||
def merge_options(
|
||||
requestor: RequestorOptions,
|
||||
request: Optional[RequestOptions],
|
||||
) -> RequestOptions:
|
||||
"""
|
||||
Merge a client and request object, giving precedence to the values from
|
||||
the request object.
|
||||
"""
|
||||
if request is None:
|
||||
return {
|
||||
"api_key": requestor.api_key,
|
||||
"stripe_account": requestor.stripe_account,
|
||||
"stripe_context": requestor.stripe_context,
|
||||
"stripe_version": requestor.stripe_version,
|
||||
"max_network_retries": requestor.max_network_retries,
|
||||
"idempotency_key": None,
|
||||
"content_type": None,
|
||||
"headers": None,
|
||||
}
|
||||
|
||||
return {
|
||||
"api_key": request.get("api_key") or requestor.api_key,
|
||||
"stripe_account": request.get("stripe_account")
|
||||
or requestor.stripe_account,
|
||||
"stripe_context": request.get("stripe_context")
|
||||
or requestor.stripe_context,
|
||||
"stripe_version": request.get("stripe_version")
|
||||
or requestor.stripe_version,
|
||||
"max_network_retries": request.get("max_network_retries")
|
||||
if request.get("max_network_retries") is not None
|
||||
else requestor.max_network_retries,
|
||||
"idempotency_key": request.get("idempotency_key"),
|
||||
"content_type": request.get("content_type"),
|
||||
"headers": request.get("headers"),
|
||||
}
|
||||
|
||||
|
||||
PERSISTENT_OPTIONS_KEYS = {
|
||||
"api_key",
|
||||
"stripe_version",
|
||||
"stripe_account",
|
||||
"stripe_context",
|
||||
}
|
||||
"""
|
||||
These are the keys in RequestOptions that should persist across requests made
|
||||
by the same requestor.
|
||||
"""
|
||||
|
||||
|
||||
def extract_options_from_dict(
|
||||
d: Optional[Mapping[str, Any]],
|
||||
) -> Tuple[RequestOptions, Dict[str, Any]]:
|
||||
"""
|
||||
Extracts a RequestOptions object from a dict, and returns a tuple of
|
||||
the RequestOptions object and the remaining dict.
|
||||
"""
|
||||
if not d:
|
||||
return {}, {}
|
||||
options: RequestOptions = {}
|
||||
d_copy = dict(d)
|
||||
for key in [
|
||||
"api_key",
|
||||
"stripe_version",
|
||||
"stripe_account",
|
||||
"stripe_context",
|
||||
"max_network_retries",
|
||||
"idempotency_key",
|
||||
"content_type",
|
||||
"headers",
|
||||
]:
|
||||
if key in d_copy:
|
||||
options[key] = d_copy.pop(key)
|
||||
|
||||
return options, d_copy
|
||||
Reference in New Issue
Block a user