MCPcopy Index your code
hub / github.com/RustPython/RustPython / _ReadlineWrapper

Class _ReadlineWrapper

Lib/_pyrepl/readline.py:342–511  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers 1

readline.pyFile · 0.85

Calls 1

fieldFunction · 0.90

Tested by

no test coverage detected