Files
RustPython/Lib/_pyrepl/trace.py
T
youknowdot c84d862711 Update REPL rendering and completion for Python 3.15 (#9200)
* Preserve pyrepl console mock guards during migration

Keep the existing three named-function decorator workarounds and their explanations at exact audited anchors. Reject changed canonical or local preambles, and retain canonical test bodies.

Assisted-by: OpenAI Codex:model version unavailable

* Update pyrepl rendering and completion for Python 3.15

Sync the complete _pyrepl package and rlcompleter with CPython d220409a13b77de7a6c30abe16ea90db01528edc using scripts/update_lib copy-lib. Migrate the complete test_pyrepl package and existing repl/completion consumers, preserving existing RustPython guards and canonical assertions.

This is a source checkpoint. Interpreter, PTY, native platform, workspace, C-API and Clippy validation remain pending; host updater tests and configured commit hooks passed.

Assisted-by: OpenAI Codex:model version unavailable

* Include lazy soft keyword for canonical REPL highlighting

Assisted-by: OpenAI Codex:model version unavailable
2026-10-19 20:24:24 +09:00

41 lines
904 B
Python
Vendored

from __future__ import annotations
import os
import sys
# types
if False:
from typing import IO
trace_file: IO[str] | None = None
if trace_filename := os.environ.get("PYREPL_TRACE"):
trace_file = open(trace_filename, "a")
if sys.platform == "emscripten":
from posix import _emscripten_log
def trace(line: str, *k: object, **kw: object) -> None:
if "PYREPL_TRACE" not in os.environ:
return
if k or kw:
line = line.format(*k, **kw)
_emscripten_log(line)
else:
def trace(line: str, *k: object, **kw: object) -> None:
if trace_file is None:
return
if k or kw:
line = line.format(*k, **kw)
trace_file.write(line + "\n")
trace_file.flush()
def trace_text(text: str, limit: int = 60) -> str:
if len(text) > limit:
text = text[:limit] + "..."
return repr(text)