Interpolate {name} placeholders in template from keyword arguments.
Wrapper over transform() that allows None to be passed.
See transform() for more details.
Wrapper over async_transform() that allows None to be passed.
See async_transform() for more details.
Higher order function that takes one of our bound API methods and wraps it
to support returning the raw APIResponse object directly.
Higher order function that takes one of our bound API methods and wraps it
to support streaming and returning the raw APIResponse object directly.
Higher order function that takes one of our bound API methods and wraps it
to support returning the raw APIResponse object directly.
Higher order function that takes one of our bound API methods and wraps it
to support streaming and returning the raw APIResponse object directly.
Create a dict of type RequestOptions without keys of NotGiven values.
Decorator to enforce a given set of arguments or variants of arguments are passed to the decorated function.
Useful for enforcing runtime validation of overloaded functions.
Example usage:
@overload
def foo(*, a: str) -> str: ...
@overload
def foo(*, b: bool) -> str: ...
# This enforces the same constraints that a static type checker would
# i.e. that either a or b must be passed to the function
@required_args(["a"], ["b"])
def foo(*, a: str | None = None, b: bool | None = None) -> str: ...To explicitly omit something from being sent in a request, use omit.
# as the default `Content-Type` header is `application/json` that will be sent
client.post("/upload/files", files={"file": b"my raw file content"})
# you can't explicitly override the header as it has to be dynamically generated
# to look something like: 'multipart/form-data; boundary=0d8382fcf5f8c3be01ca2e11002d2983'
client.post(..., headers={"Content-Type": "multipart/form-data"})
# instead you can remove the default `application/json` header by passing omit
client.post(..., headers={"Content-Type": omit})For parameters with a meaningful None value, we need to distinguish between the user explicitly passing None, and the user not passing the parameter at all.
User code shouldn't need to use not_given directly.
For example:
def create(timeout: Timeout | None | NotGiven = not_given): ...
create(timeout=1) # 1s timeout
create(timeout=None) # No timeout
create() # Default timeout behavior