MCPcopy
hub / github.com/nonebot/nonebot2 / DependencyCache

Class DependencyCache

nonebot/internal/params.py:107–169  ·  view source on GitHub ↗

子依赖结果缓存。 用于缓存子依赖的结果,以避免重复计算。

Source from the content-addressed store, hash-verified

105
106
107class DependencyCache:
108 """子依赖结果缓存。
109
110 用于缓存子依赖的结果,以避免重复计算。
111 """
112
113 def __init__(self):
114 self._state = CacheState.PENDING
115 self._result: Any = None
116 self._exception: BaseException | None = None
117 self._waiter = anyio.Event()
118
119 def done(self) -> bool:
120 return self._state == CacheState.FINISHED
121
122 def result(self) -> Any:
123 """获取子依赖结果"""
124
125 if self._state != CacheState.FINISHED:
126 raise RuntimeError("Result is not ready")
127
128 if self._exception is not None:
129 raise self._exception
130 return self._result
131
132 def exception(self) -> BaseException | None:
133 """获取子依赖异常"""
134
135 if self._state != CacheState.FINISHED:
136 raise RuntimeError("Result is not ready")
137
138 return self._exception
139
140 def set_result(self, result: Any) -> None:
141 """设置子依赖结果"""
142
143 if self._state != CacheState.PENDING:
144 raise RuntimeError(f"Cache state invalid: {self._state}")
145
146 self._result = result
147 self._state = CacheState.FINISHED
148 self._waiter.set()
149
150 def set_exception(self, exception: BaseException) -> None:
151 """设置子依赖异常"""
152
153 if self._state != CacheState.PENDING:
154 raise RuntimeError(f"Cache state invalid: {self._state}")
155
156 self._exception = exception
157 self._state = CacheState.FINISHED
158 self._waiter.set()
159
160 async def wait(self):
161 """等待子依赖结果"""
162 await self._waiter.wait()
163 if self._state != CacheState.FINISHED:
164 raise RuntimeError("Invalid cache state")

Callers 1

_solveMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected