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

Class _ReadlineWrapper

Lib/_pyrepl/readline.py:349–532  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

347
348@dataclass(slots=True)
349class _ReadlineWrapper:
350 f_in: int = -1
351 f_out: int = -1
352 reader: ReadlineAlikeReader | None = field(default=None, repr=False)
353 saved_history_length: int = -1
354 startup_hook: Callback | None = None
355 config: ReadlineConfig = field(default_factory=ReadlineConfig, repr=False)
356
357 def __post_init__(self) -> None:
358 if self.f_in == -1:
359 self.f_in = os.dup(0)
360 if self.f_out == -1:
361 self.f_out = os.dup(1)
362
363 def get_reader(self) -> ReadlineAlikeReader:
364 if self.reader is None:
365 console = Console(self.f_in, self.f_out, encoding=ENCODING)
366 self.reader = ReadlineAlikeReader(console=console, config=self.config)
367 return self.reader
368
369 def input(self, prompt: object = "") -> str:
370 try:
371 reader = self.get_reader()
372 except _error:
373 assert raw_input is not None
374 return raw_input(prompt)
375 prompt_str = str(prompt)
376 reader.ps1 = prompt_str
377 sys.audit("builtins.input", prompt_str)
378 result = reader.readline(startup_hook=self.startup_hook)
379 sys.audit("builtins.input/result", result)
380 return result
381
382 def multiline_input(self, more_lines: MoreLinesCallable, ps1: str, ps2: str) -> str:
383 """Read an input on possibly multiple lines, asking for more
384 lines as long as 'more_lines(unicodetext)' returns an object whose
385 boolean value is true.
386 """
387 reader = self.get_reader()
388 saved = reader.more_lines
389 try:
390 reader.more_lines = more_lines
391 reader.ps1 = ps1
392 reader.ps2 = ps1
393 reader.ps3 = ps2
394 reader.ps4 = ""
395 with warnings.catch_warnings(action="ignore"):
396 return reader.readline()
397 finally:
398 reader.more_lines = saved
399 reader.paste_mode = False
400
401 def parse_and_bind(self, string: str) -> None:
402 pass # XXX we don't support parsing GNU-readline-style init files
403
404 def set_completer(self, function: Completer | None = None) -> None:
405 self.config.readline_completer = function
406

Callers 2

readline.pyFile · 0.85

Calls 1

fieldFunction · 0.90

Tested by 1

Used in the wild real call sites across dependent graphs

searching dependent graphs…