failed CONTEXT NO_PATCH UNSUBMITTED agent_error · 29 tool calls · 26 s · Textualize/rich
perf: reduce Console and RichHandler import time by deferring unused imports ## E2E Results | Import | master | This PR | Speedup | |---|---|---|---| | `from rich.console import Console` | 78.1ms | 52.2ms | **1.50x faster** | | `from rich.logging import RichHandler` | 99.4ms | 56.9ms | **1.75x faster** | | `import rich` | 18.2ms | 18.3ms | (already lean) | ## Summary Defer module-level imports that are only needed in specific code paths, move annotation-only imports to `TYPE_CHECKING`, and remove dead code: | File | Change | Savings | |---|---|---| | `logging.py` | Defer `Traceback` to `emit()` (only when `rich_tracebacks=True`) | ~20ms | | `logging.py` | `from __future__ import annotations` + `TYPE_CHECKING` for `Console`, `ConsoleRenderable`, `Highlighter`, `FormatTimeCallable` | ~6ms | | `logging.py` | Replace `pathlib.Path` → `os.path.basename` (also a minor runtime win) | ~4-5ms | | `console.py` | Eliminate `import inspect`; replace `isclass` → `isinstance(x, type)`, `currentframe` → `sys._getframe` | ~10ms | | `console.py` | Defer `pretty` to `Console.print()` | ~3-5ms | | `console.py` | Defer `scope` to `Console.log()` (only when `log_locals=True`) | ~3-5ms | | `console.py` | Defer `getpass` to `Console.input()` (only when `password=True`) | ~2ms | | `console.py` | Defer `html.escape` and `zlib` to export methods | ~2.3ms | | `console.py` | Remove dead `_svg_hash` function (unused since 113997ac, fixes latent NameError) | cleanup | | `segment.py` | Remove dead `logging` import (`getLogger` assigned but never used) | ~2-3ms | | `theme.py` | Defer `configparser` to `Theme.from_file()` | ~1.5ms | | `syntax.py` | Move `Console`, `ConsoleOptions`, `JustifyMethod`, `RenderResult` to `TYPE_CHECKING` | eliminates console.py from syntax import chain | | `protocol.py` | Replace `from inspect import isclass` → `isinstance(x, type)` | prepares for dataclasses removal | | `repr.py` | Defer `import inspect` to `auto_rich_repr()` | prepares for dataclasses removal | All deferred imports are still available at runtime — they're loaded when the code path that needs them is actually hit. The `TYPE_CHECKING` imports are annotation-only and never needed at runtime (files use `from __future__ import annotations`). ## Benchmarks Environment: Standard_D2s_v5 (non-burstable), CPython 3.13.13, hyperfine --min-runs 30 ### Per-module breakdown (this PR) | Module | Time | |---|---| | `import rich` | 18.2ms | | `Console` | 52.5ms | | `RichHandler` | 56.4ms | | `Syntax` | 64.7ms | | `Traceback` | 92.5ms | | `Markdown` | 103.0ms | ## Motivation pip vendors Rich, and `Console`/`RichHandler` are imported on every `pip` invocation. These savings directly improve startup time for pip and every other tool that imports Rich. ## Testing - `pytest tests/` — 952 passed, 25 skipped - `mypy -p rich --no-incremental` — no issues - `black --check` — passes ## Disclosure This PR was developed with AI assistance (codeflash-agent). Benchmarked in a controlled environment (dedicated non-burstable Azure VM). All tests verified across multiple Python implementations.
| # | Tool | Arguments | Result |
|---|---|---|---|
| 1 | run_command | {
"command": "ls -R rich/"
} | {"status": "ok", "stdout": "rich/:\n__init__.py\n__main__.py\n_emoji_codes.py\n_emoji_replace.py\n_export_format.py\n_extension.py\n_fileno.py\n_inspect.py\n_lofull{"status": "ok", "stdout": "rich/:\n__init__.py\n__main__.py\n_emoji_codes.py\n_emoji_replace.py\n_export_format.py\n_extension.py\n_fileno.py\n_inspect.py\n_log_render.py\n_loop.py\n_null_file.py\n_palettes.py\n_pick.py\n_ratio.py\n_spinners.py\n_stack.py\n_timer.py\n_unicode_data\n_win32_console.py\n_windows.py\n_windows_renderer.py\n_wrap.py\nabc.py\nalign.py\nansi.py\nbar.py\nbox.py\ncells.py\ncolor.py\ncolor_triplet.py\ncolumns.py\nconsole.py\nconstrain.py\ncontainers.py\ncontrol.py\ndefault_styles.py\ndiagnose.py\nemoji.py\nerrors.py\nfile_proxy.py\nfilesize.py\nhighlighter.py\njson.py\njupyter.py\nlayout.py\nlive.py\nlive_render.py\nlogging.py\nmarkdown.py\nmarkup.py\nmeasure.py\npadding.py\npager.py\npalette.py\npanel.py\npretty.py\nprogress.py\nprogress_bar.py\nprompt.py\nprotocol.py\npy.typed\nregion.py\nrepr.py\nrule.py\nscope.py\nscreen.py\nsegment.py\nspinner.py\nstatus.py\nstyle.py\nstyled.py\nsyntax.py\ntable.py\nterminal_theme.py\ntext.py\ntheme.py\nthemes.py\ntraceback.py\ntree.py\n\nrich/_unicode_data:\n__init__.py\n_versions.py\nunicode10-0-0.py\nunicode11-0-0.py\nunicode12-0-0.py\nunicode12-1-0.py\nunicode13-0-0.py\nunicode14-0-0.py\nunicode15-0-0.py\nunicode15-1-0.py\nunicode16-0-0.py\nunicode17-0-0.py\nunicode4-1-0.py\nunicode5-0-0.py\nunicode5-1-0.py\nunicode5-2-0.py\nunicode6-0-0.py\nunicode6-1-0.py\nunicode6-2-0.py\nunicode6-3-0.py\nunicode7-0-0.py\nunicode8-0-0.py\nunicode9-0-0.py\n", "stderr": "", "exit_code": 0} |
| 2 | read_file | {
"filepath": "rich/logging.py"
} | {"status": "ok", "filepath": "rich/logging.py", "content": "import logging\nfrom datetime import datetime\nfrom logging import Handler, LogRecord\nfrom pathlib full{"status": "ok", "filepath": "rich/logging.py", "content": "import logging\nfrom datetime import datetime\nfrom logging import Handler, LogRecord\nfrom pathlib import Path\nfrom types import ModuleType\nfrom typing import ClassVar, Iterable, List, Optional, Type, Union\n\nfrom rich._null_file import NullFile\n\nfrom . import get_console\nfrom ._log_render import FormatTimeCallable, LogRender\nfrom .console import Console, ConsoleRenderable\nfrom .highlighter import Highlighter, ReprHighlighter\nfrom .text import Text\nfrom .traceback import Traceback\n\n\nclass RichHandler(Handler):\n \"\"\"A logging handler that renders output with Rich. The time / level / message and file are displayed in columns.\n The level is color coded, and the message is syntax highlighted.\n\n Note:\n Be careful when enabling console markup in log messages if you have configured logging for libraries not\n under your control. If a dependency writes messages containing square brackets, it may not produce the intended output.\n\n Args:\n level (Union[int, str], optional): Log level. Defaults to logging.NOTSET.\n console (:class:`~rich.console.Console`, optional): Optional console instance to write logs.\n Default will use a global console instance writing to stdout.\n show_time (bool, optional): Show a column for the time. Defaults to True.\n omit_repeated_times (bool, optional): Omit repetition of the same time. Defaults to True.\n show_level (bool, optional): Show a column for the level. Defaults to True.\n show_path (bool, optional): Show the path to the original log call. Defaults to True.\n enable_link_path (bool, optional): Enable terminal link of path column to file. Defaults to True.\n highlighter (Highlighter, optional): Highlighter to style log messages, or None to use ReprHighlighter. Defaults to None.\n markup (bool, optional): Enable console markup in log messages. Defaults to Fals |
| 3 | read_file | {
"filepath": "rich/logging.py",
"start_line\\\"": "151",
"end_line\\\"": "297"
} | {"status": "ok", "filepath": "rich/logging.py", "content": "import logging\nfrom datetime import datetime\nfrom logging import Handler, LogRecord\nfrom pathlib full{"status": "ok", "filepath": "rich/logging.py", "content": "import logging\nfrom datetime import datetime\nfrom logging import Handler, LogRecord\nfrom pathlib import Path\nfrom types import ModuleType\nfrom typing import ClassVar, Iterable, List, Optional, Type, Union\n\nfrom rich._null_file import NullFile\n\nfrom . import get_console\nfrom ._log_render import FormatTimeCallable, LogRender\nfrom .console import Console, ConsoleRenderable\nfrom .highlighter import Highlighter, ReprHighlighter\nfrom .text import Text\nfrom .traceback import Traceback\n\n\nclass RichHandler(Handler):\n \"\"\"A logging handler that renders output with Rich. The time / level / message and file are displayed in columns.\n The level is color coded, and the message is syntax highlighted.\n\n Note:\n Be careful when enabling console markup in log messages if you have configured logging for libraries not\n under your control. If a dependency writes messages containing square brackets, it may not produce the intended output.\n\n Args:\n level (Union[int, str], optional): Log level. Defaults to logging.NOTSET.\n console (:class:`~rich.console.Console`, optional): Optional console instance to write logs.\n Default will use a global console instance writing to stdout.\n show_time (bool, optional): Show a column for the time. Defaults to True.\n omit_repeated_times (bool, optional): Omit repetition of the same time. Defaults to True.\n show_level (bool, optional): Show a column for the level. Defaults to True.\n show_path (bool, optional): Show the path to the original log call. Defaults to True.\n enable_link_path (bool, optional): Enable terminal link of path column to file. Defaults to True.\n highlighter (Highlighter, optional): Highlighter to style log messages, or None to use ReprHighlighter. Defaults to None.\n markup (bool, optional): Enable console markup in log messages. Defaults to Fals |
| 4 | run_command | {
"command": "grep -n \"Traceback\" rich/logging.py"
} | {"status": "ok", "stdout": "15:from .traceback import Traceback\n144: traceback = Traceback.from_exception(\n211: traceback: Optional[Traceback],\n218: tracebacfull{"status": "ok", "stdout": "15:from .traceback import Traceback\n144: traceback = Traceback.from_exception(\n211: traceback: Optional[Traceback],\n218: traceback (Optional[Traceback]): Traceback instance or None for no Traceback.\n", "stderr": "", "exit_code": 0} |
| 5-6 ×2 | read_file | {
"filepath": "rich/logging.py",
"start_line": "1",
"end_line": "30"
} | {"status": "error", "error_type": "FileReadError", "error_message": "'>' not supported between instances of 'int' and 'str'"}full{"status": "error", "error_type": "FileReadError", "error_message": "'>' not supported between instances of 'int' and 'str'"} |
| 7 | read_file | {
"filepath": "rich/logging.py"
} | {"status": "ok", "filepath": "rich/logging.py", "content": "import logging\nfrom datetime import datetime\nfrom logging import Handler, LogRecord\nfrom pathlib full{"status": "ok", "filepath": "rich/logging.py", "content": "import logging\nfrom datetime import datetime\nfrom logging import Handler, LogRecord\nfrom pathlib import Path\nfrom types import ModuleType\nfrom typing import ClassVar, Iterable, List, Optional, Type, Union\n\nfrom rich._null_file import NullFile\n\nfrom . import get_console\nfrom ._log_render import FormatTimeCallable, LogRender\nfrom .console import Console, ConsoleRenderable\nfrom .highlighter import Highlighter, ReprHighlighter\nfrom .text import Text\nfrom .traceback import Traceback\n\n\nclass RichHandler(Handler):\n \"\"\"A logging handler that renders output with Rich. The time / level / message and file are displayed in columns.\n The level is color coded, and the message is syntax highlighted.\n\n Note:\n Be careful when enabling console markup in log messages if you have configured logging for libraries not\n under your control. If a dependency writes messages containing square brackets, it may not produce the intended output.\n\n Args:\n level (Union[int, str], optional): Log level. Defaults to logging.NOTSET.\n console (:class:`~rich.console.Console`, optional): Optional console instance to write logs.\n Default will use a global console instance writing to stdout.\n show_time (bool, optional): Show a column for the time. Defaults to True.\n omit_repeated_times (bool, optional): Omit repetition of the same time. Defaults to True.\n show_level (bool, optional): Show a column for the level. Defaults to True.\n show_path (bool, optional): Show the path to the original log call. Defaults to True.\n enable_link_path (bool, optional): Enable terminal link of path column to file. Defaults to True.\n highlighter (Highlighter, optional): Highlighter to style log messages, or None to use ReprHighlighter. Defaults to None.\n markup (bool, optional): Enable console markup in log messages. Defaults to Fals |
| 8 | read_file | {
"end_line": "297",
"filepath": "rich/logging.py",
"start_line": "151"
} | {"status": "error", "error_type": "FileReadError", "error_message": "'>' not supported between instances of 'int' and 'str'"}full{"status": "error", "error_type": "FileReadError", "error_message": "'>' not supported between instances of 'int' and 'str'"} |
| 9-10 ×2 | run_command | {
"command": "cat rich/logging.py"
} | {"status": "ok", "stdout": "import logging\nfrom datetime import datetime\nfrom logging import Handler, LogRecord\nfrom pathlib import Path\nfrom types import Mfull{"status": "ok", "stdout": "import logging\nfrom datetime import datetime\nfrom logging import Handler, LogRecord\nfrom pathlib import Path\nfrom types import ModuleType\nfrom typing import ClassVar, Iterable, List, Optional, Type, Union\n\nfrom rich._null_file import NullFile\n\nfrom . import get_console\nfrom ._log_render import FormatTimeCallable, LogRender\nfrom .console import Console, ConsoleRenderable\nfrom .highlighter import Highlighter, ReprHighlighter\nfrom .text import Text\nfrom .traceback import Traceback\n\n\nclass RichHandler(Handler):\n \"\"\"A logging handler that renders output with Rich. The time / level / message and file are displayed in columns.\n The level is color coded, and the message is syntax highlighted.\n\n Note:\n Be careful when enabling console markup in log messages if you have configured logging for libraries not\n under your control. If a dependency writes messages containing square brackets, it may not produce the intended output.\n\n Args:\n level (Union[int, str], optional): Log level. Defaults to logging.NOTSET.\n console (:class:`~rich.console.Console`, optional): Optional console instance to write logs.\n Default will use a global console instance writing to stdout.\n show_time (bool, optional): Show a column for the time. Defaults to True.\n omit_repeated_times (bool, optional): Omit repetition of the same time. Defaults to True.\n show_level (bool, optional): Show a column for the level. Defaults to True.\n show_path (bool, optional): Show the path to the original log call. Defaults to True.\n enable_link_path (bool, optional): Enable terminal link of path column to file. Defaults to True.\n highlighter (Highlighter, optional): Highlighter to style log messages, or None to use ReprHighlighter. Defaults to None.\n markup (bool, optional): Enable console markup in log messages. Defaults to False.\n rich_tracebacks (boo |
| 11 | run_command | {
"command": "cat rich/logging.py | head -n 100"
} | {"status": "ok", "stdout": "import logging\nfrom datetime import datetime\nfrom logging import Handler, LogRecord\nfrom pathlib import Path\nfrom types import Mfull{"status": "ok", "stdout": "import logging\nfrom datetime import datetime\nfrom logging import Handler, LogRecord\nfrom pathlib import Path\nfrom types import ModuleType\nfrom typing import ClassVar, Iterable, List, Optional, Type, Union\n\nfrom rich._null_file import NullFile\n\nfrom . import get_console\nfrom ._log_render import FormatTimeCallable, LogRender\nfrom .console import Console, ConsoleRenderable\nfrom .highlighter import Highlighter, ReprHighlighter\nfrom .text import Text\nfrom .traceback import Traceback\n\n\nclass RichHandler(Handler):\n \"\"\"A logging handler that renders output with Rich. The time / level / message and file are displayed in columns.\n The level is color coded, and the message is syntax highlighted.\n\n Note:\n Be careful when enabling console markup in log messages if you have configured logging for libraries not\n under your control. If a dependency writes messages containing square brackets, it may not produce the intended output.\n\n Args:\n level (Union[int, str], optional): Log level. Defaults to logging.NOTSET.\n console (:class:`~rich.console.Console`, optional): Optional console instance to write logs.\n Default will use a global console instance writing to stdout.\n show_time (bool, optional): Show a column for the time. Defaults to True.\n omit_repeated_times (bool, optional): Omit repetition of the same time. Defaults to True.\n show_level (bool, optional): Show a column for the level. Defaults to True.\n show_path (bool, optional): Show the path to the original log call. Defaults to True.\n enable_link_path (bool, optional): Enable terminal link of path column to file. Defaults to True.\n highlighter (Highlighter, optional): Highlighter to style log messages, or None to use ReprHighlighter. Defaults to None.\n markup (bool, optional): Enable console markup in log messages. Defaults to False.\n rich_tracebacks (boo |
| 12 | run_command | {
"command": "cat rich/logging.py | tail -n 150"
} | {"status": "ok", "stdout": " width=self.tracebacks_width,\n code_width=self.tracebacks_code_width,\n extra_lines=self.tracebacks_extra_lines,\n theme=self.tracefull{"status": "ok", "stdout": " width=self.tracebacks_width,\n code_width=self.tracebacks_code_width,\n extra_lines=self.tracebacks_extra_lines,\n theme=self.tracebacks_theme,\n word_wrap=self.tracebacks_word_wrap,\n show_locals=self.tracebacks_show_locals,\n locals_max_length=self.locals_max_length,\n locals_max_string=self.locals_max_string,\n suppress=self.tracebacks_suppress,\n max_frames=self.tracebacks_max_frames,\n )\n message = record.getMessage()\n if self.formatter:\n record.message = record.getMessage()\n formatter = self.formatter\n if hasattr(formatter, \"usesTime\") and formatter.usesTime():\n record.asctime = formatter.formatTime(record, formatter.datefmt)\n message = formatter.formatMessage(record)\n\n message_renderable = self.render_message(record, message)\n log_renderable = self.render(\n record=record, traceback=traceback, message_renderable=message_renderable\n )\n if isinstance(self.console.file, NullFile):\n # Handles pythonw, where stdout/stderr are null, and we return NullFile\n # instance from Console.file. In this case, we still want to make a log record\n # even though we won't be writing anything to a file.\n self.handleError(record)\n else:\n try:\n self.console.print(log_renderable)\n except Exception:\n self.handleError(record)\n\n def render_message(self, record: LogRecord, message: str) -> \"ConsoleRenderable\":\n \"\"\"Render message text in to Text.\n\n Args:\n record (LogRecord): logging Record.\n message (str): String containing log message.\n\n Returns:\n ConsoleRenderable: Ren |
| 13 | run_command | {
"command": "cat rich/logging.py"
} | {"status": "ok", "stdout": "import logging\nfrom datetime import datetime\nfrom logging import Handler, LogRecord\nfrom pathlib import Path\nfrom types import Mfull{"status": "ok", "stdout": "import logging\nfrom datetime import datetime\nfrom logging import Handler, LogRecord\nfrom pathlib import Path\nfrom types import ModuleType\nfrom typing import ClassVar, Iterable, List, Optional, Type, Union\n\nfrom rich._null_file import NullFile\n\nfrom . import get_console\nfrom ._log_render import FormatTimeCallable, LogRender\nfrom .console import Console, ConsoleRenderable\nfrom .highlighter import Highlighter, ReprHighlighter\nfrom .text import Text\nfrom .traceback import Traceback\n\n\nclass RichHandler(Handler):\n \"\"\"A logging handler that renders output with Rich. The time / level / message and file are displayed in columns.\n The level is color coded, and the message is syntax highlighted.\n\n Note:\n Be careful when enabling console markup in log messages if you have configured logging for libraries not\n under your control. If a dependency writes messages containing square brackets, it may not produce the intended output.\n\n Args:\n level (Union[int, str], optional): Log level. Defaults to logging.NOTSET.\n console (:class:`~rich.console.Console`, optional): Optional console instance to write logs.\n Default will use a global console instance writing to stdout.\n show_time (bool, optional): Show a column for the time. Defaults to True.\n omit_repeated_times (bool, optional): Omit repetition of the same time. Defaults to True.\n show_level (bool, optional): Show a column for the level. Defaults to True.\n show_path (bool, optional): Show the path to the original log call. Defaults to True.\n enable_link_path (bool, optional): Enable terminal link of path column to file. Defaults to True.\n highlighter (Highlighter, optional): Highlighter to style log messages, or None to use ReprHighlighter. Defaults to None.\n markup (bool, optional): Enable console markup in log messages. Defaults to False.\n rich_tracebacks (boo |
| 14 | run_command | {
"command": "cat rich/logging.py | tail -n +100"
} | {"status": "ok", "stdout": " level_width=None,\n )\n self.enable_link_path = enable_link_path\n self.markup = markup\n self.rich_tracebacks = rich_tracebacks\n full{"status": "ok", "stdout": " level_width=None,\n )\n self.enable_link_path = enable_link_path\n self.markup = markup\n self.rich_tracebacks = rich_tracebacks\n self.tracebacks_width = tracebacks_width\n self.tracebacks_extra_lines = tracebacks_extra_lines\n self.tracebacks_theme = tracebacks_theme\n self.tracebacks_word_wrap = tracebacks_word_wrap\n self.tracebacks_show_locals = tracebacks_show_locals\n self.tracebacks_suppress = tracebacks_suppress\n self.tracebacks_max_frames = tracebacks_max_frames\n self.tracebacks_code_width = tracebacks_code_width\n self.locals_max_length = locals_max_length\n self.locals_max_string = locals_max_string\n self.keywords = keywords\n\n def get_level_text(self, record: LogRecord) -> Text:\n \"\"\"Get the level name from the record.\n\n Args:\n record (LogRecord): LogRecord instance.\n\n Returns:\n Text: A tuple of the style and level name.\n \"\"\"\n level_name = record.levelname\n level_text = Text.styled(\n level_name.ljust(8), f\"logging.level.{level_name.lower()}\"\n )\n return level_text\n\n def emit(self, record: LogRecord) -> None:\n \"\"\"Invoked by logging.\"\"\"\n message = self.format(record)\n traceback = None\n if (\n self.rich_tracebacks\n and record.exc_info\n and record.exc_info != (None, None, None)\n ):\n exc_type, exc_value, exc_traceback = record.exc_info\n assert exc_type is not None\n assert exc_value is not None\n traceback = Traceback.from_exception(\n exc_type,\n exc_value,\n exc_traceback,\n width=self.tracebacks_width,\n code_width=self.tracebacks_code_width,\n extra_lines=self.tracebacks_extra_line |
| 15 | run_command | {
"command": "cat rich/logging.py | tail -n +200"
} | {"status": "ok", "stdout": " self.keywords = self.KEYWORDS\n\n if self.keywords:\n message_text.highlight_words(self.keywords, \"logging.keyword\")\n\n return mfull{"status": "ok", "stdout": " self.keywords = self.KEYWORDS\n\n if self.keywords:\n message_text.highlight_words(self.keywords, \"logging.keyword\")\n\n return message_text\n\n def render(\n self,\n *,\n record: LogRecord,\n traceback: Optional[Traceback],\n message_renderable: \"ConsoleRenderable\",\n ) -> \"ConsoleRenderable\":\n \"\"\"Render log for display.\n\n Args:\n record (LogRecord): logging Record.\n traceback (Optional[Traceback]): Traceback instance or None for no Traceback.\n message_renderable (ConsoleRenderable): Renderable (typically Text) containing log message contents.\n\n Returns:\n ConsoleRenderable: Renderable to display log.\n \"\"\"\n path = Path(record.pathname).name\n level = self.get_level_text(record)\n time_format = None if self.formatter is None else self.formatter.datefmt\n log_time = datetime.fromtimestamp(record.created)\n\n log_renderable = self._log_render(\n self.console,\n [message_renderable] if not traceback else [message_renderable, traceback],\n log_time=log_time,\n time_format=time_format,\n level=level,\n path=path,\n line_no=record.lineno,\n link_path=record.pathname if self.enable_link_path else None,\n )\n return log_renderable\n\n\nif __name__ == \"__main__\": # pragma: no cover\n from time import sleep\n\n FORMAT = \"%(message)s\"\n # FORMAT = \"%(asctime)-15s - %(levelname)s - %(message)s\"\n logging.basicConfig(\n level=\"NOTSET\",\n format=FORMAT,\n datefmt=\"[%X]\",\n handlers=[RichHandler(rich_tracebacks=True, tracebacks_show_locals=True)],\n )\n log = logging.getLogger(\"rich\")\n\n log.info(\"Server starting...\")\n log.info(\"Listening on http://127.0.0.1:8080\")\n sleep(1)\n\ |
| 16 | run_command | {
"command": "grep -n \"Path\" rich/logging.py"
} | {"status": "ok", "stdout": "4:from pathlib import Path\n224: path = Path(record.pathname).name\n", "stderr": "", "exit_code": 0}full{"status": "ok", "stdout": "4:from pathlib import Path\n224: path = Path(record.pathname).name\n", "stderr": "", "exit_code": 0} |
| 17 | run_command | {
"command": "grep -n \"inspect\" rich/console.py"
} | {"status": "ok", "stdout": "1:import inspect\n12:from inspect import isclass\n1904: currentframe: Callable[[], Optional[FrameType]] = inspect.currentframe,\n191full{"status": "ok", "stdout": "1:import inspect\n12:from inspect import isclass\n1904: currentframe: Callable[[], Optional[FrameType]] = inspect.currentframe,\n1911: retrieve the current frame. Defaults to ``inspect.currentframe``.\n1933: frame_info = inspect.stack()[offset]\n2348: injected by Rich can be found by inspecting the ``console.CONSOLE_SVG_FORMAT`` variable.\n2600: injected by Rich can be found by inspecting the ``console.CONSOLE_SVG_FORMAT`` variable.\n", "stderr": "", "exit_code": 0} |
| 18 | run_command | {
"command": "grep -n \"pretty\" rich/console.py"
} | {"status": "ok", "stdout": "53:from .pretty import Pretty, is_expandable\n1625: :meth:`~rich.console.Console.print` won't pretty print, wrap text, or apply markfull{"status": "ok", "stdout": "53:from .pretty import Pretty, is_expandable\n1625: :meth:`~rich.console.Console.print` won't pretty print, wrap text, or apply markup, but will\n", "stderr": "", "exit_code": 0} |
| 19 | run_command | {
"command": "grep -n \"scope\" rich/console.py"
} | {"status": "ok", "stdout": "56:from .scope import render_scope\n1991: renderables.append(render_scope(locals_map, title=\"[i]locals\"))\n", "stderr": "", "exit_full{"status": "ok", "stdout": "56:from .scope import render_scope\n1991: renderables.append(render_scope(locals_map, title=\"[i]locals\"))\n", "stderr": "", "exit_code": 0} |
| 20 | run_command | {
"command": "grep -n \"getpass\" rich/console.py"
} | {"status": "ok", "stdout": "10:from getpass import getpass\n2169: result = getpass(\"\", stream=stream)\n", "stderr": "", "exit_code": 0}full{"status": "ok", "stdout": "10:from getpass import getpass\n2169: result = getpass(\"\", stream=stream)\n", "stderr": "", "exit_code": 0} |
| 21 | run_command | {
"command": "grep -n \"html.escape\" rich/console.py"
} | {"status": "error", "error_type": "CommandError", "error_message": "", "details": {"stdout": "", "stderr": "", "exit_code": 1}}full{"status": "error", "error_type": "CommandError", "error_message": "", "details": {"stdout": "", "stderr": "", "exit_code": 1}} |
| 22 | run_command | {
"command": "grep -n \"zlib\" rich/console.py"
} | {"status": "ok", "stdout": "5:import zlib\n2451: zlib.adler32(\n2628: return str(zlib.adler32(svg_main_code.encode()))\n", "stderr": "", "exit_code": 0}full{"status": "ok", "stdout": "5:import zlib\n2451: zlib.adler32(\n2628: return str(zlib.adler32(svg_main_code.encode()))\n", "stderr": "", "exit_code": 0} |
| 23 | run_command | {
"command": "grep -n \"_svg_hash\" rich/console.py"
} | {"status": "ok", "stdout": "2619:def _svg_hash(svg_main_code: str) -> str:\n", "stderr": "", "exit_code": 0}full{"status": "ok", "stdout": "2619:def _svg_hash(svg_main_code: str) -> str:\n", "stderr": "", "exit_code": 0} |
| 24 | run_command | {
"command": "grep -n \"logging\" rich/segment.py"
} | {"status": "ok", "stdout": "4:from logging import getLogger\n", "stderr": "", "exit_code": 0}full{"status": "ok", "stdout": "4:from logging import getLogger\n", "stderr": "", "exit_code": 0} |
| 25 | run_command | {
"command": "grep -n \"configparser\" rich/theme.py"
} | {"status": "ok", "stdout": "1:import configparser\n52: config = configparser.ConfigParser()\n65: path (str): Path to a config file readable by Python configparsfull{"status": "ok", "stdout": "1:import configparser\n52: config = configparser.ConfigParser()\n65: path (str): Path to a config file readable by Python configparser module.\n", "stderr": "", "exit_code": 0} |
| 26 | run_command | {
"command": "grep -n \"Console\" rich/syntax.py"
} | {"status": "ok", "stdout": "47:from .console import Console, ConsoleOptions, JustifyMethod, RenderResult\n599: def _get_number_styles(self, console: Console) ->full{"status": "ok", "stdout": "47:from .console import Console, ConsoleOptions, JustifyMethod, RenderResult\n599: def _get_number_styles(self, console: Console) -> Tuple[Style, Style, Style]:\n623: self, console: \"Console\", options: \"ConsoleOptions\"\n641: self, console: Console, options: ConsoleOptions\n651: console: Console,\n652: options: ConsoleOptions,\n956: from rich.console import Console\n958: console = Console(force_terminal=args.force_color, width=args.width)\n", "stderr": "", "exit_code": 0} |
| 27 | run_command | {
"command": "grep -n \"isclass\" rich/protocol.py"
} | {"status": "ok", "stdout": "2:from inspect import isclass\n31: while hasattr(renderable, \"__rich__\") and not isclass(renderable):\n", "stderr": "", "exit_codefull{"status": "ok", "stdout": "2:from inspect import isclass\n31: while hasattr(renderable, \"__rich__\") and not isclass(renderable):\n", "stderr": "", "exit_code": 0} |
| 28 | run_command | {
"command": "grep -n \"inspect\" rich/repr.py"
} | {"status": "ok", "stdout": "1:import inspect\n71: signature = inspect.signature(self.__init__)\n", "stderr": "", "exit_code": 0}full{"status": "ok", "stdout": "1:import inspect\n71: signature = inspect.signature(self.__init__)\n", "stderr": "", "exit_code": 0} |
| 29 | read_file | {
"filepath": "rich/logging.py"
} | {"status": "ok", "filepath": "rich/logging.py", "content": "import logging\nfrom datetime import datetime\nfrom logging import Handler, LogRecord\nfrom pathlib full{"status": "ok", "filepath": "rich/logging.py", "content": "import logging\nfrom datetime import datetime\nfrom logging import Handler, LogRecord\nfrom pathlib import Path\nfrom types import ModuleType\nfrom typing import ClassVar, Iterable, List, Optional, Type, Union\n\nfrom rich._null_file import NullFile\n\nfrom . import get_console\nfrom ._log_render import FormatTimeCallable, LogRender\nfrom .console import Console, ConsoleRenderable\nfrom .highlighter import Highlighter, ReprHighlighter\nfrom .text import Text\nfrom .traceback import Traceback\n\n\nclass RichHandler(Handler):\n \"\"\"A logging handler that renders output with Rich. The time / level / message and file are displayed in columns.\n The level is color coded, and the message is syntax highlighted.\n\n Note:\n Be careful when enabling console markup in log messages if you have configured logging for libraries not\n under your control. If a dependency writes messages containing square brackets, it may not produce the intended output.\n\n Args:\n level (Union[int, str], optional): Log level. Defaults to logging.NOTSET.\n console (:class:`~rich.console.Console`, optional): Optional console instance to write logs.\n Default will use a global console instance writing to stdout.\n show_time (bool, optional): Show a column for the time. Defaults to True.\n omit_repeated_times (bool, optional): Omit repetition of the same time. Defaults to True.\n show_level (bool, optional): Show a column for the level. Defaults to True.\n show_path (bool, optional): Show the path to the original log call. Defaults to True.\n enable_link_path (bool, optional): Enable terminal link of path column to file. Defaults to True.\n highlighter (Highlighter, optional): Highlighter to style log messages, or None to use ReprHighlighter. Defaults to None.\n markup (bool, optional): Enable console markup in log messages. Defaults to Fals |