MCPcopy Index your code
hub / github.com/python/cpython / RefreshCache

Class RefreshCache

Lib/_pyrepl/reader.py:220–261  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

218 ## cached metadata to speed up screen refreshes
219 @dataclass
220 class RefreshCache:
221 screen: list[str] = field(default_factory=list)
222 screeninfo: list[tuple[int, list[int]]] = field(init=False)
223 line_end_offsets: list[int] = field(default_factory=list)
224 pos: int = field(init=False)
225 cxy: tuple[int, int] = field(init=False)
226 dimensions: tuple[int, int] = field(init=False)
227 invalidated: bool = False
228
229 def update_cache(self,
230 reader: Reader,
231 screen: list[str],
232 screeninfo: list[tuple[int, list[int]]],
233 ) -> None:
234 self.screen = screen.copy()
235 self.screeninfo = screeninfo.copy()
236 self.pos = reader.pos
237 self.cxy = reader.cxy
238 self.dimensions = reader.console.width, reader.console.height
239 self.invalidated = False
240
241 def valid(self, reader: Reader) -> bool:
242 if self.invalidated:
243 return False
244 dimensions = reader.console.width, reader.console.height
245 dimensions_changed = dimensions != self.dimensions
246 return not dimensions_changed
247
248 def get_cached_location(self, reader: Reader) -> tuple[int, int]:
249 if self.invalidated:
250 raise ValueError("Cache is invalidated")
251 offset = 0
252 earliest_common_pos = min(reader.pos, self.pos)
253 num_common_lines = len(self.line_end_offsets)
254 while num_common_lines > 0:
255 offset = self.line_end_offsets[num_common_lines - 1]
256 if earliest_common_pos > offset:
257 break
258 num_common_lines -= 1
259 else:
260 offset = 0
261 return offset, num_common_lines
262
263 last_refresh_cache: RefreshCache = field(default_factory=RefreshCache)
264

Callers

nothing calls this directly

Calls 1

fieldFunction · 0.90

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…