Utility Classes¶
Enums¶
- class PureToken(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]¶
Bases:
CaseAndEncodingInsensitiveEnum
Enum for using pure-tokens with the redis api.
- UNIQUE = b'UNIQUE'¶
Used by:
GRAPH.CONSTRAINT CREATE
GRAPH.CONTRAINT DROP
- MANDATORY = b'MANDATORY'¶
Used by:
GRAPH.CONSTRAINT CREATE
GRAPH.CONTRAINT DROP
- RESET = b'RESET'¶
Used by:
ACL LOG
- SCHEDULE = b'SCHEDULE'¶
Used by:
BGSAVE
- BIT = b'BIT'¶
Used by:
BITCOUNT
BITPOS
- BYTE = b'BYTE'¶
Used by:
BITCOUNT
BITPOS
- FAIL = b'FAIL'¶
Used by:
BITFIELD
- SAT = b'SAT'¶
Used by:
BITFIELD
- WRAP = b'WRAP'¶
Used by:
BITFIELD
- AND = b'AND'¶
Used by:
BITOP
- NOT = b'NOT'¶
Used by:
BITOP
- OR = b'OR'¶
Used by:
BITOP
- XOR = b'XOR'¶
Used by:
BITOP
- LEFT = b'LEFT'¶
Used by:
BLMOVE
BLMPOP
LMOVE
LMPOP
- RIGHT = b'RIGHT'¶
Used by:
BLMOVE
BLMPOP
LMOVE
LMPOP
- MAX = b'MAX'¶
Used by:
BZMPOP
TS.ADD
TS.ALTER
TS.CREATE
TS.CREATERULE
TS.MRANGE
TS.MREVRANGE
TS.RANGE
TS.REVRANGE
ZINTER
ZINTERSTORE
ZMPOP
ZUNION
ZUNIONSTORE
- MIN = b'MIN'¶
Used by:
BZMPOP
TS.ADD
TS.ALTER
TS.CREATE
TS.CREATERULE
TS.MRANGE
TS.MREVRANGE
TS.RANGE
TS.REVRANGE
ZINTER
ZINTERSTORE
ZMPOP
ZUNION
ZUNIONSTORE
- NO = b'NO'¶
Used by:
CLIENT CACHING
CLIENT KILL
SCRIPT DEBUG
- YES = b'YES'¶
Used by:
CLIENT CACHING
CLIENT KILL
SCRIPT DEBUG
- MASTER = b'MASTER'¶
Used by:
CLIENT KILL
CLIENT LIST
- NORMAL = b'NORMAL'¶
Used by:
CLIENT KILL
CLIENT LIST
- PUBSUB = b'PUBSUB'¶
Used by:
CLIENT KILL
CLIENT LIST
- REPLICA = b'REPLICA'¶
Used by:
CLIENT KILL
CLIENT LIST
- SLAVE = b'SLAVE'¶
Used by:
CLIENT KILL
- OFF = b'OFF'¶
Used by:
CLIENT NO-EVICT
CLIENT NO-TOUCH
CLIENT REPLY
CLIENT TRACKING
- ON = b'ON'¶
Used by:
CLIENT NO-EVICT
CLIENT NO-TOUCH
CLIENT REPLY
CLIENT TRACKING
- ALL = b'ALL'¶
Used by:
CLIENT PAUSE
- WRITE = b'WRITE'¶
Used by:
CLIENT PAUSE
- SKIP = b'SKIP'¶
Used by:
CLIENT REPLY
- BCAST = b'BCAST'¶
Used by:
CLIENT TRACKING
- NOLOOP = b'NOLOOP'¶
Used by:
CLIENT TRACKING
- OPTIN = b'OPTIN'¶
Used by:
CLIENT TRACKING
- OPTOUT = b'OPTOUT'¶
Used by:
CLIENT TRACKING
- ERROR = b'ERROR'¶
Used by:
CLIENT UNBLOCK
- TIMEOUT = b'TIMEOUT'¶
Used by:
CLIENT UNBLOCK
- FORCE = b'FORCE'¶
Used by:
CLUSTER FAILOVER
FAILOVER
SHUTDOWN
XCLAIM
- TAKEOVER = b'TAKEOVER'¶
Used by:
CLUSTER FAILOVER
- HARD = b'HARD'¶
Used by:
CLUSTER RESET
- SOFT = b'SOFT'¶
Used by:
CLUSTER RESET
- STABLE = b'STABLE'¶
Used by:
CLUSTER SETSLOT
- REPLACE = b'REPLACE'¶
Used by:
COPY
FUNCTION LOAD
FUNCTION RESTORE
MIGRATE
RESTORE
RESTORE-ASKING
- GT = b'GT'¶
Used by:
EXPIRE
EXPIREAT
PEXPIRE
PEXPIREAT
ZADD
- LT = b'LT'¶
Used by:
EXPIRE
EXPIREAT
PEXPIRE
PEXPIREAT
ZADD
- NX = b'NX'¶
Used by:
EXPIRE
EXPIREAT
GEOADD
JSON.SET
PEXPIRE
PEXPIREAT
SET
ZADD
- XX = b'XX'¶
Used by:
EXPIRE
EXPIREAT
GEOADD
JSON.SET
PEXPIRE
PEXPIREAT
SET
ZADD
- ABORT = b'ABORT'¶
Used by:
FAILOVER
SHUTDOWN
- ASYNC = b'ASYNC'¶
Used by:
FLUSHALL
FLUSHDB
FUNCTION FLUSH
SCRIPT FLUSH
- SYNC = b'SYNC'¶
Used by:
FLUSHALL
FLUSHDB
FUNCTION FLUSH
SCRIPT DEBUG
SCRIPT FLUSH
- WITHCODE = b'WITHCODE'¶
Used by:
FUNCTION LIST
- APPEND = b'APPEND'¶
Used by:
FUNCTION RESTORE
- FLUSH = b'FLUSH'¶
Used by:
FUNCTION RESTORE
- CHANGE = b'CH'¶
Used by:
GEOADD
ZADD
- FT = b'FT'¶
Used by:
FT.SEARCH
GEODIST
GEORADIUS
GEORADIUSBYMEMBER
GEORADIUSBYMEMBER_RO
GEORADIUS_RO
GEOSEARCH
GEOSEARCHSTORE
- KM = b'KM'¶
Used by:
FT.SEARCH
GEODIST
GEORADIUS
GEORADIUSBYMEMBER
GEORADIUSBYMEMBER_RO
GEORADIUS_RO
GEOSEARCH
GEOSEARCHSTORE
- M = b'M'¶
Used by:
FT.SEARCH
GEODIST
GEORADIUS
GEORADIUSBYMEMBER
GEORADIUSBYMEMBER_RO
GEORADIUS_RO
GEOSEARCH
GEOSEARCHSTORE
- MI = b'MI'¶
Used by:
FT.SEARCH
GEODIST
GEORADIUS
GEORADIUSBYMEMBER
GEORADIUSBYMEMBER_RO
GEORADIUS_RO
GEOSEARCH
GEOSEARCHSTORE
- ANY = b'ANY'¶
Used by:
GEORADIUS
GEORADIUSBYMEMBER
GEORADIUSBYMEMBER_RO
GEORADIUS_RO
GEOSEARCH
GEOSEARCHSTORE
- ASC = b'ASC'¶
Used by:
FT.AGGREGATE
FT.SEARCH
GEORADIUS
GEORADIUSBYMEMBER
GEORADIUSBYMEMBER_RO
GEORADIUS_RO
GEOSEARCH
GEOSEARCHSTORE
SORT
SORT_RO
- DESC = b'DESC'¶
Used by:
FT.AGGREGATE
FT.SEARCH
GEORADIUS
GEORADIUSBYMEMBER
GEORADIUSBYMEMBER_RO
GEORADIUS_RO
GEOSEARCH
GEOSEARCHSTORE
SORT
SORT_RO
- WITHCOORD = b'WITHCOORD'¶
Used by:
GEORADIUS
GEORADIUSBYMEMBER
GEORADIUSBYMEMBER_RO
GEORADIUS_RO
GEOSEARCH
- WITHDIST = b'WITHDIST'¶
Used by:
GEORADIUS
GEORADIUSBYMEMBER
GEORADIUSBYMEMBER_RO
GEORADIUS_RO
GEOSEARCH
- WITHHASH = b'WITHHASH'¶
Used by:
GEORADIUS
GEORADIUSBYMEMBER
GEORADIUSBYMEMBER_RO
GEORADIUS_RO
GEOSEARCH
- STOREDIST = b'STOREDIST'¶
Used by:
GEOSEARCHSTORE
- PERSIST = b'PERSIST'¶
Used by:
GETEX
- WITHVALUES = b'WITHVALUES'¶
Used by:
HRANDFIELD
- IDX = b'IDX'¶
Used by:
LCS
- LEN = b'LEN'¶
Used by:
LCS
- WITHMATCHLEN = b'WITHMATCHLEN'¶
Used by:
LCS
- AFTER = b'AFTER'¶
Used by:
LINSERT
- BEFORE = b'BEFORE'¶
Used by:
LINSERT
- COPY = b'COPY'¶
Used by:
MIGRATE
- EMPTY_STRING = b''¶
Used by:
MIGRATE
- ABSTTL = b'ABSTTL'¶
Used by:
RESTORE
RESTORE-ASKING
- GET = b'GET'¶
Used by:
SET
- KEEPTTL = b'KEEPTTL'¶
Used by:
SET
- NOSAVE = b'NOSAVE'¶
Used by:
SHUTDOWN
- NOW = b'NOW'¶
Used by:
SHUTDOWN
- SAVE = b'SAVE'¶
Used by:
SHUTDOWN
- SORTING = b'ALPHA'¶
Used by:
SORT
SORT_RO
- APPROXIMATELY = b'~'¶
Used by:
XADD
XTRIM
- AUTO_ID = b'*'¶
Used by:
XADD
- EQUAL = b'='¶
Used by:
XADD
XTRIM
- MAXLEN = b'MAXLEN'¶
Used by:
XADD
XTRIM
- MINID = b'MINID'¶
Used by:
XADD
XTRIM
- NOMKSTREAM = b'NOMKSTREAM'¶
Used by:
XADD
- JUSTID = b'JUSTID'¶
Used by:
XAUTOCLAIM
XCLAIM
- MKSTREAM = b'MKSTREAM'¶
Used by:
XGROUP CREATE
- NEW_ID = b'$'¶
Used by:
XGROUP CREATE
XGROUP SETID
- FULL = b'FULL'¶
Used by:
XINFO STREAM
- NOACK = b'NOACK'¶
Used by:
XREADGROUP
- INCREMENT = b'INCR'¶
Used by:
ZADD
- WITHSCORES = b'WITHSCORES'¶
Used by:
FT.SEARCH
FT.SUGGET
ZDIFF
ZINTER
ZRANDMEMBER
ZRANGE
ZRANGEBYSCORE
ZREVRANGE
ZREVRANGEBYSCORE
ZUNION
- SUM = b'SUM'¶
Used by:
TS.ADD
TS.ALTER
TS.CREATE
TS.CREATERULE
TS.MRANGE
TS.MREVRANGE
TS.RANGE
TS.REVRANGE
ZINTER
ZINTERSTORE
ZUNION
ZUNIONSTORE
- BYLEX = b'BYLEX'¶
Used by:
ZRANGE
ZRANGESTORE
- BYSCORE = b'BYSCORE'¶
Used by:
ZRANGE
ZRANGESTORE
- REV = b'REV'¶
Used by:
ZRANGE
ZRANGESTORE
- WITHSCORE = b'WITHSCORE'¶
Used by:
ZRANK
ZREVRANK
- NONSCALING = b'NONSCALING'¶
Used by:
BF.INSERT
BF.RESERVE
- ITEMS = b'ITEMS'¶
Used by:
BF.INFO
BF.INSERT
CF.INSERT
CF.INSERTNX
- NOCREATE = b'NOCREATE'¶
Used by:
BF.INSERT
CF.INSERT
CF.INSERTNX
- CAPACITY = b'CAPACITY'¶
Used by:
BF.INFO
- EXPANSION = b'EXPANSION'¶
Used by:
BF.INFO
- FILTERS = b'FILTERS'¶
Used by:
BF.INFO
- SIZE = b'SIZE'¶
Used by:
BF.INFO
- WEIGHTS = b'WEIGHTS'¶
Used by:
CMS.MERGE
- WITHCOUNT = b'WITHCOUNT'¶
Used by:
TOPK.LIST
- COMPRESSION = b'COMPRESSION'¶
Used by:
TDIGEST.MERGE
- OVERRIDE = b'OVERRIDE'¶
Used by:
TDIGEST.MERGE
- BLOCK = b'BLOCK'¶
Used by:
TS.ADD
TS.ALTER
TS.CREATE
- COMPRESSED = b'COMPRESSED'¶
Used by:
TS.ADD
TS.CREATE
- FIRST = b'FIRST'¶
Used by:
TS.ADD
TS.ALTER
TS.CREATE
TS.CREATERULE
TS.MRANGE
TS.MREVRANGE
TS.RANGE
TS.REVRANGE
- LAST = b'LAST'¶
Used by:
TS.ADD
TS.ALTER
TS.CREATE
TS.CREATERULE
TS.MRANGE
TS.MREVRANGE
TS.RANGE
TS.REVRANGE
- UNCOMPRESSED = b'UNCOMPRESSED'¶
Used by:
TS.ADD
TS.CREATE
TS.DECRBY
TS.INCRBY
- AVG = b'AVG'¶
Used by:
TS.CREATERULE
TS.MRANGE
TS.MREVRANGE
TS.RANGE
TS.REVRANGE
- COUNT = b'COUNT'¶
Used by:
TS.CREATERULE
TS.MRANGE
TS.MREVRANGE
TS.RANGE
TS.REVRANGE
- RANGE = b'RANGE'¶
Used by:
TS.CREATERULE
TS.MRANGE
TS.MREVRANGE
TS.RANGE
TS.REVRANGE
- STD_P = b'STD.P'¶
Used by:
TS.CREATERULE
TS.MRANGE
TS.MREVRANGE
TS.RANGE
TS.REVRANGE
- STD_S = b'STD.S'¶
Used by:
TS.CREATERULE
TS.MRANGE
TS.MREVRANGE
TS.RANGE
TS.REVRANGE
- TWA = b'TWA'¶
Used by:
TS.CREATERULE
TS.MRANGE
TS.MREVRANGE
TS.RANGE
TS.REVRANGE
- VAR_P = b'VAR.P'¶
Used by:
TS.CREATERULE
TS.MRANGE
TS.MREVRANGE
TS.RANGE
TS.REVRANGE
- VAR_S = b'VAR.S'¶
Used by:
TS.CREATERULE
TS.MRANGE
TS.MREVRANGE
TS.RANGE
TS.REVRANGE
- BUCKETTIMESTAMP = b'BUCKETTIMESTAMP'¶
Used by:
TS.MRANGE
TS.MREVRANGE
TS.RANGE
TS.REVRANGE
- EMPTY = b'EMPTY'¶
Used by:
TS.MRANGE
TS.MREVRANGE
TS.RANGE
TS.REVRANGE
- FILTER_BY_VALUE = b'FILTER_BY_VALUE'¶
Used by:
TS.MRANGE
TS.MREVRANGE
TS.RANGE
TS.REVRANGE
- GROUPBY = b'GROUPBY'¶
Used by:
TS.MRANGE
TS.MREVRANGE
- SELECTED_LABELS = b'SELECTED_LABELS'¶
Used by:
TS.MGET
TS.MRANGE
TS.MREVRANGE
- WITHLABELS = b'WITHLABELS'¶
Used by:
TS.MGET
TS.MRANGE
TS.MREVRANGE
- GEO = b'GEO'¶
Used by:
FT.CREATE
- HASH = b'HASH'¶
Used by:
FT.CREATE
- JSON = b'JSON'¶
Used by:
FT.CREATE
- MAXTEXTFIELDS = b'MAXTEXTFIELDS'¶
Used by:
FT.CREATE
- NOFIELDS = b'NOFIELDS'¶
Used by:
FT.CREATE
- NOFREQS = b'NOFREQS'¶
Used by:
FT.CREATE
- NOHL = b'NOHL'¶
Used by:
FT.CREATE
- NOINDEX = b'NOINDEX'¶
Used by:
FT.CREATE
- NOOFFSETS = b'NOOFFSETS'¶
Used by:
FT.CREATE
- NUMERIC = b'NUMERIC'¶
Used by:
FT.CREATE
- SCHEMA = b'SCHEMA'¶
Used by:
FT.ALTER
FT.CREATE
- SKIPINITIALSCAN = b'SKIPINITIALSCAN'¶
Used by:
FT.ALTER
FT.CREATE
FT.SYNUPDATE
- SORTABLE = b'SORTABLE'¶
Used by:
FT.CREATE
- TAG = b'TAG'¶
Used by:
FT.CREATE
- TEXT = b'TEXT'¶
Used by:
FT.CREATE
- UNF = b'UNF'¶
Used by:
FT.CREATE
- VECTOR = b'VECTOR'¶
Used by:
FT.CREATE
- WITHSUFFIXTRIE = b'WITHSUFFIXTRIE'¶
Used by:
FT.CREATE
- ADD = b'ADD'¶
Used by:
FT.ALTER
- DELETE_DOCS = b'DD'¶
Used by:
FT.DROPINDEX
- EXCLUDE = b'EXCLUDE'¶
Used by:
FT.SPELLCHECK
- INCLUDE = b'INCLUDE'¶
Used by:
FT.SPELLCHECK
- EXPLAINSCORE = b'EXPLAINSCORE'¶
Used by:
FT.SEARCH
- HIGHLIGHT = b'HIGHLIGHT'¶
Used by:
FT.SEARCH
- INORDER = b'INORDER'¶
Used by:
FT.SEARCH
- LIMIT = b'LIMIT'¶
Used by:
FT.AGGREGATE
FT.SEARCH
- NOCONTENT = b'NOCONTENT'¶
Used by:
FT.SEARCH
- NOSTOPWORDS = b'NOSTOPWORDS'¶
Used by:
FT.SEARCH
- PARAMS = b'PARAMS'¶
Used by:
FT.AGGREGATE
FT.SEARCH
- SUMMARIZE = b'SUMMARIZE'¶
Used by:
FT.SEARCH
- TAGS = b'TAGS'¶
Used by:
FT.SEARCH
- VERBATIM = b'VERBATIM'¶
Used by:
FT.AGGREGATE
FT.SEARCH
- WITHPAYLOADS = b'WITHPAYLOADS'¶
Used by:
FT.SEARCH
FT.SUGGET
- WITHSORTKEYS = b'WITHSORTKEYS'¶
Used by:
FT.SEARCH
- LOADALL = b'LOAD *'¶
Used by:
FT.AGGREGATE
- WITHCURSOR = b'WITHCURSOR'¶
Used by:
FT.AGGREGATE
- AGGREGATE = b'AGGREGATE'¶
Used by:
FT.PROFILE
- LIMITED = b'LIMITED'¶
Used by:
FT.PROFILE
- QUERYWORD = b'QUERY'¶
Used by:
FT.PROFILE
- SEARCH = b'SEARCH'¶
Used by:
FT.PROFILE
- INCR = b'INCR'¶
Used by:
FT.SUGADD
- FUZZY = b'FUZZY'¶
Used by:
FT.SUGGET
Monitor¶
- class Monitor(client: coredis.client.Client[AnyStr])[source]¶
Monitor is useful for handling the
MONITOR
command to the redis server.It can be used as an infinite async iterator:
async for command in client.monitor(): print(command.time, command.client_type, command.command, command.args)
Alternatively, each command can be fetched explicitly:
monitor = client.monitor() command1 = await monitor.get_command() command2 = await monitor.get_command() monitor.stop()
- async get_command() MonitorResult [source]¶
Wait for the next command issued and return the details
- run_in_thread(response_handler: Callable[[MonitorResult], None], loop: AbstractEventLoop | None = None) MonitorThread [source]¶
Runs the monitor in a
MonitorThread
and invokesresponse_handler
for every command received.To stop the processing call
MonitorThread.stop()
on the instance returned by this method.
- class MonitorThread(monitor: Monitor[Any], loop: AbstractEventLoop, response_handler: Callable[[MonitorResult], None])[source]¶
Bases:
Thread
Thread to be used to run monitor
- run() None [source]¶
Method representing the thread’s activity.
You may override this method in a subclass. The standard run() method invokes the callable object passed to the object’s constructor as the target argument, if any, with sequential and keyword arguments taken from the args and kwargs arguments, respectively.
Retries¶
coredis.retry
Utilities for managing errors that can be recovered from by providing retry policies.
- class ConstantRetryPolicy(retryable_exceptions: tuple[Type[BaseException], ...], retries: int, delay: float)[source]¶
Retry policy that pauses
ConstantRetryPolicy.delay
seconds betweenConstantRetryPolicy.retries
if any ofConstantRetryPolicy.retryable_exceptions
are encountered.- async call_with_retries(func: Callable[[...], Coroutine[Any, Any, R]], before_hook: Callable[[...], Coroutine[Any, Any, Any]] | None = None, failure_hook: Callable[[...], Coroutine[Any, Any, None]] | dict[Type[BaseException], Callable[[...], Coroutine[Any, Any, None]]] | None = None) R ¶
- Parameters:
func¶ – a function that should return the coroutine that will be awaited when retrying if
RetryPolicy.retryable_exceptions
is encountered.before_hook¶ – if provided will be called on every attempt.
failure_hook¶ – if provided and is a callable it will be called everytime a retryable exception is encountered. If it is a mapping of exception types to callables, the first exception type that is a parent of any encountered exception will be called.
- class ExponentialBackoffRetryPolicy(retryable_exceptions: tuple[Type[BaseException], ...], retries: int, initial_delay: float)[source]¶
Retry policy that exponentially backs off before retrying up to
ExponentialBackoffRetryPolicy.retries
if any ofExponentialBackoffRetryPolicy.retryable_exceptions
are encountered.ExponentialBckoffRetryPolicy.initial_delay
is used as the initial value for calculating the exponential backoff.- async call_with_retries(func: Callable[[...], Coroutine[Any, Any, R]], before_hook: Callable[[...], Coroutine[Any, Any, Any]] | None = None, failure_hook: Callable[[...], Coroutine[Any, Any, None]] | dict[Type[BaseException], Callable[[...], Coroutine[Any, Any, None]]] | None = None) R ¶
- Parameters:
func¶ – a function that should return the coroutine that will be awaited when retrying if
RetryPolicy.retryable_exceptions
is encountered.before_hook¶ – if provided will be called on every attempt.
failure_hook¶ – if provided and is a callable it will be called everytime a retryable exception is encountered. If it is a mapping of exception types to callables, the first exception type that is a parent of any encountered exception will be called.
- class CompositeRetryPolicy(*retry_policies: RetryPolicy)[source]¶
Convenience class to combine multiple retry policies
- add_retry_policy(policy: RetryPolicy) None [source]¶
Add to the retry policies that this instance was created with
- async call_with_retries(func: Callable[[...], Coroutine[Any, Any, R]], before_hook: Callable[[...], Coroutine[Any, Any, Any]] | None = None, failure_hook: Callable[[...], Coroutine[Any, Any, None]] | dict[Type[BaseException], Callable[[...], Coroutine[Any, Any, None]]] | None = None) R [source]¶
Calls
func
repeatedly according to the retry policies that this class was instantiated with (CompositeRetryPolicy.retry_policies
).- Parameters:
func¶ – a function that should return the coroutine that will be awaited when retrying if
RetryPolicy.retryable_exceptions
is encountered.before_hook¶ – if provided will be called before every attempt.
failure_hook¶ – if provided and is a callable it will be called everytime a retryable exception is encountered. If it is a mapping of exception types to callables, the first exception type that is a parent of any encountered exception will be called.
- retryable(policy: RetryPolicy, failure_hook: Callable[[...], Coroutine[Any, Any, None]] | None = None) Callable[[Callable[[P], Coroutine[Any, Any, R]]], Callable[[P], Coroutine[Any, Any, R]]] [source]¶
Decorator to be used to apply a retry policy to a coroutine
All retry policies need to derive from coredis.retry.RetryPolicy
- class RetryPolicy(retries: int, retryable_exceptions: tuple[Type[BaseException], ...])[source]¶
Abstract retry policy
- async call_with_retries(func: Callable[[...], Coroutine[Any, Any, R]], before_hook: Callable[[...], Coroutine[Any, Any, Any]] | None = None, failure_hook: Callable[[...], Coroutine[Any, Any, None]] | dict[Type[BaseException], Callable[[...], Coroutine[Any, Any, None]]] | None = None) R [source]¶
- Parameters:
func¶ – a function that should return the coroutine that will be awaited when retrying if
RetryPolicy.retryable_exceptions
is encountered.before_hook¶ – if provided will be called on every attempt.
failure_hook¶ – if provided and is a callable it will be called everytime a retryable exception is encountered. If it is a mapping of exception types to callables, the first exception type that is a parent of any encountered exception will be called.