Skip to content

gh-123149: Suppress verbose repr in new REPL #123151

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Aug 19, 2024

Conversation

SnoopJ
Copy link
Contributor

@SnoopJ SnoopJ commented Aug 19, 2024

This changeset disables the automatic generation of a verbose (listing every registered field) repr for _ReadlineWrapper

Fixes #123149.

Copy link
Member

@picnixz picnixz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I personally kept the f_in and f_out just for to know which file descriptor is being used but otherwise we can also suppress the entire fields.

@SnoopJ
Copy link
Contributor Author

SnoopJ commented Aug 19, 2024

Before this patch, with 3.13.0b1:

>>> input
<bound method _ReadlineWrapper.input of _ReadlineWrapper(f_in=0, f_out=1, reader=ReadlineAlikeReader(console=WindowsConsole(screen=['\x1b[1;35m>>> \x1b[0minput'], height=35, width=140), buffer=['i', 'n', 'p', 'u', 't'], pos=5, ps1='>>> ', ps2='>>> ', ps3='... ', ps4='', kill_ring=[], msg='', arg=None, dirty=False, finished=True, paste_mode=False, in_bracketed_paste=False, commands={'digit_arg': <class '_pyrepl.commands.digit_arg'>, 'digit-arg': <class '_pyrepl.commands.digit_arg'>, 'clear_screen': <class '_pyrepl.commands.clear_screen'>, 'clear-screen': <class '_pyrepl.commands.clear_screen'>, 'refresh': <class '_pyrepl.commands.refresh'>, 'repaint': <class '_pyrepl.commands.repaint'>, 'kill_line': <class '_pyrepl.commands.kill_line'>, 'kill-line': <class '_pyrepl.commands.kill_line'>, 'unix_line_discard': <class '_pyrepl.commands.unix_line_discard'>, 'unix-line-discard': <class '_pyrepl.commands.unix_line_discard'>, 'unix_word_rubout': <class '_pyrepl.commands.unix_word_rubout'>, 'unix-word-rubout': <class '_pyrepl.commands.unix_word_rubout'>, 'kill_word': <class '_pyrepl.commands.kill_word'>, 'kill-word': <class '_pyrepl.commands.kill_word'>, 'backward_kill_word': <class '_pyrepl.commands.backward_kill_word'>, 'backward-kill-word': <class '_pyrepl.commands.backward_kill_word'>, 'yank': <class '_pyrepl.commands.yank'>, 'yank_pop': <class '_pyrepl.commands.yank_pop'>, 'yank-pop': <class '_pyrepl.commands.yank_pop'>, 'interrupt': <class '_pyrepl.commands.interrupt'>, 'ctrl_c': <class '_pyrepl.commands.ctrl_c'>, 'ctrl-c': <class '_pyrepl.commands.ctrl_c'>, 'suspend': <class '_pyrepl.commands.suspend'>, 'up': <class '_pyrepl.commands.up'>, 'down': <class '_pyrepl.commands.down'>, 'left': <class '_pyrepl.commands.left'>, 'right': <class '_pyrepl.commands.right'>, 'beginning_of_line': <class '_pyrepl.commands.beginning_of_line'>, 'beginning-of-line': <class '_pyrepl.commands.beginning_of_line'>, 'end_of_line': <class '_pyrepl.commands.end_of_line'>, 'end-of-line': <class '_pyrepl.commands.end_of_line'>, 'home': <class '_pyrepl.commands.home'>, 'end': <class '_pyrepl.commands.end'>, 'forward_word': <class '_pyrepl.commands.forward_word'>, 'forward-word': <class '_pyrepl.commands.forward_word'>, 'backward_word': <class '_pyrepl.commands.backward_word'>, 'backward-word': <class '_pyrepl.commands.backward_word'>, 'self_insert': <class '_pyrepl.completing_reader.self_insert'>, 'self-insert': <class '_pyrepl.completing_reader.self_insert'>, 'insert_nl': <class '_pyrepl.commands.insert_nl'>, 'insert-nl': <class '_pyrepl.commands.insert_nl'>, 'transpose_characters': <class '_pyrepl.commands.transpose_characters'>, 'transpose-characters': <class '_pyrepl.commands.transpose_characters'>, 'backspace': <class '_pyrepl.commands.backspace'>, 'delete': <class '_pyrepl.commands.delete'>, 'accept': <class '_pyrepl.commands.accept'>, 'help': <class '_pyrepl.commands.help'>, 'invalid_key': <class '_pyrepl.commands.invalid_key'>, 'invalid-key': <class '_pyrepl.commands.invalid_key'>, 'invalid_command': <class '_pyrepl.commands.invalid_command'>, 'invalid-command': <class '_pyrepl.commands.invalid_command'>, 'show_history': <class '_pyrepl.commands.show_history'>, 'show-history': <class '_pyrepl.commands.show_history'>, 'paste_mode': <class '_pyrepl.commands.paste_mode'>, 'paste-mode': <class '_pyrepl.commands.paste_mode'>, 'enable_bracketed_paste': <class '_pyrepl.commands.enable_bracketed_paste'>, 'enable-bracketed-paste': <class '_pyrepl.commands.enable_bracketed_paste'>, 'disable_bracketed_paste': <class '_pyrepl.commands.disable_bracketed_paste'>, 'disable-bracketed-paste': <class '_pyrepl.commands.disable_bracketed_paste'>, 'complete': <class '_pyrepl.completing_reader.complete'>, 'next_history': <class '_pyrepl.historical_reader.next_history'>, 'next-history': <class '_pyrepl.historical_reader.next_history'>, 'previous_history': <class '_pyrepl.historical_reader.previous_history'>, 'previous-history': <class '_pyrepl.historical_reader.previous_history'>, 'restore_history': <class '_pyrepl.historical_reader.restore_history'>, 'restore-history': <class '_pyrepl.historical_reader.restore_history'>, 'first_history': <class '_pyrepl.historical_reader.first_history'>, 'first-history': <class '_pyrepl.historical_reader.first_history'>, 'last_history': <class '_pyrepl.historical_reader.last_history'>, 'last-history': <class '_pyrepl.historical_reader.last_history'>, 'yank_arg': <class '_pyrepl.historical_reader.yank_arg'>, 'yank-arg': <class '_pyrepl.historical_reader.yank_arg'>, 'forward_history_isearch': <class '_pyrepl.historical_reader.forward_history_isearch'>, 'forward-history-isearch': <class '_pyrepl.historical_reader.forward_history_isearch'>, 'reverse_history_isearch': <class '_pyrepl.historical_reader.reverse_history_isearch'>, 'reverse-history-isearch': <class '_pyrepl.historical_reader.reverse_history_isearch'>, 'isearch_end': <class '_pyrepl.historical_reader.isearch_end'>, 'isearch-end': <class '_pyrepl.historical_reader.isearch_end'>, 'isearch_add_character': <class '_pyrepl.historical_reader.isearch_add_character'>, 'isearch-add-character': <class '_pyrepl.historical_reader.isearch_add_character'>, 'isearch_cancel': <class '_pyrepl.historical_reader.isearch_cancel'>, 'isearch-cancel': <class '_pyrepl.historical_reader.isearch_cancel'>, 'isearch_backspace': <class '_pyrepl.historical_reader.isearch_backspace'>, 'isearch-backspace': <class '_pyrepl.historical_reader.isearch_backspace'>, 'isearch_forwards': <class '_pyrepl.historical_reader.isearch_forwards'>, 'isearch-forwards': <class '_pyrepl.historical_reader.isearch_forwards'>, 'isearch_backwards': <class '_pyrepl.historical_reader.isearch_backwards'>, 'isearch-backwards': <class '_pyrepl.historical_reader.isearch_backwards'>, 'operate_and_get_next': <class '_pyrepl.historical_reader.operate_and_get_next'>, 'operate-and-get-next': <class '_pyrepl.historical_reader.operate_and_get_next'>, 'maybe_accept': <class '_pyrepl.readline.maybe_accept'>, 'maybe-accept': <class '_pyrepl.readline.maybe_accept'>, 'backspace_dedent': <class '_pyrepl.readline.backspace_dedent'>, 'backspace-dedent': <class '_pyrepl.readline.backspace_dedent'>}, last_command=<class '_pyrepl.readline.maybe_accept'>, syntax_table={'\x00': 2, '\x01': 2, '\x02': 2, '\x03': 2, '\x04': 2, '\x05': 2, '\x06': 2, '\x07': 2, '\x08': 2, '\t': 2, '\n': 0, '\x0b': 2, '\x0c': 2, '\r': 2, '\x0e': 2, '\x0f': 2, '\x10': 2, '\x11': 2, '\x12': 2, '\x13': 2, '\x14': 2, '\x15': 2, '\x16': 2, '\x17': 2, '\x18': 2, '\x19': 2, '\x1a': 2, '\x1b': 2, '\x1c': 2, '\x1d': 2, '\x1e': 2, '\x1f': 2, ' ': 0, '!': 2, '"': 2, '#': 2, '$': 2, '%': 2, '&': 2, "'": 2, '(': 2, ')': 2, '*': 2, '+': 2, ',': 2, '-': 2, '.': 2, '/': 2, '0': 1, '1': 1, '2': 1, '3': 1, '4': 1, '5': 1, '6': 1, '7': 1, '8': 1, '9': 1, ':': 2, ';': 2, '<': 2, '=': 2, '>': 2, '?': 2, '@': 2, 'A': 1, 'B': 1, 'C': 1, 'D': 1, 'E': 1, 'F': 1, 'G': 1, 'H': 1, 'I': 1, 'J': 1, 'K': 1, 'L': 1, 'M': 1, 'N': 1, 'O': 1, 'P': 1, 'Q': 1, 'R': 1, 'S': 1, 'T': 1, 'U': 1, 'V': 1, 'W': 1, 'X': 1, 'Y': 1, 'Z': 1, '[': 2, '\\': 2, ']': 2, '^': 2, '_': 2, '`': 2, 'a': 1, 'b': 1, 'c': 1, 'd': 1, 'e': 1, 'f': 1, 'g': 1, 'h': 1, 'i': 1, 'j': 1, 'k': 1, 'l': 1, 'm': 1, 'n': 1, 'o': 1, 'p': 1, 'q': 1, 'r': 1, 's': 1, 't': 1, 'u': 1, 'v': 1, 'w': 1, 'x': 1, 'y': 1, 'z': 1, '{': 2, '|': 2, '}': 2, '~': 2, '\x7f': 2, '\x80': 2, '\x81': 2, '\x82': 2, '\x83': 2, '\x84': 2, '\x85': 2, '\x86': 2, '\x87': 2, '\x88': 2, '\x89': 2, '\x8a': 2, '\x8b': 2, '\x8c': 2, '\x8d': 2, '\x8e': 2, '\x8f': 2, '\x90': 2, '\x91': 2, '\x92': 2, '\x93': 2, '\x94': 2, '\x95': 2, '\x96': 2, '\x97': 2, '\x98': 2, '\x99': 2, '\x9a': 2, '\x9b': 2, '\x9c': 2, '\x9d': 2, '\x9e': 2, '\x9f': 2, '\xa0': 2, '¡': 2, '¢': 2, '£': 2, '¤': 2, '¥': 2, '¦': 2, '§': 2, '¨': 2, '©': 2, 'ª': 1, '«': 2, '¬': 2, '\xad': 2, '®': 2, '¯': 2, '°': 2, '±': 2, '²': 1, '³': 1, '´': 2, 'µ': 1, '¶': 2, '·': 2, '¸': 2, '¹': 1, 'º': 1, '»': 2, '¼': 1, '½': 1, '¾': 1, '¿': 2, 'À': 1, 'Á': 1, 'Â': 1, 'Ã': 1, 'Ä': 1, 'Å': 1, 'Æ': 1, 'Ç': 1, 'È': 1, 'É': 1, 'Ê': 1, 'Ë': 1, 'Ì': 1, 'Í': 1, 'Î': 1, 'Ï': 1, 'Ð': 1, 'Ñ': 1, 'Ò': 1, 'Ó': 1, 'Ô': 1, 'Õ': 1, 'Ö': 1, '×': 2, 'Ø': 1, 'Ù': 1, 'Ú': 1, 'Û': 1, 'Ü': 1, 'Ý': 1, 'Þ': 1, 'ß': 1, 'à': 1, 'á': 1, 'â': 1, 'ã': 1, 'ä': 1, 'å': 1, 'æ': 1, 'ç': 1, 'è': 1, 'é': 1, 'ê': 1, 'ë': 1, 'ì': 1, 'í': 1, 'î': 1, 'ï': 1, 'ð': 1, 'ñ': 1, 'ò': 1, 'ó': 1, 'ô': 1, 'õ': 1, 'ö': 1, '÷': 2, 'ø': 1, 'ù': 1, 'ú': 1, 'û': 1, 'ü': 1, 'ý': 1, 'þ': 1, 'ÿ': 1}, keymap=(('\\C-a', 'beginning-of-line'), ('\\C-b', 'left'), ('\\C-c', 'interrupt'), ('\\C-d', 'delete'), ('\\C-e', 'end-of-line'), ('\\C-f', 'right'), ('\\C-g', 'cancel'), ('\\C-h', 'backspace'), ('\\C-j', 'accept'), ('\\<return>', 'accept'), ('\\C-k', 'kill-line'), ('\\C-l', 'clear-screen'), ('\\C-m', 'accept'), ('\\C-t', 'transpose-characters'), ('\\C-u', 'unix-line-discard'), ('\\C-w', 'unix-word-rubout'), ('\\C-x\\C-u', 'upcase-region'), ('\\C-y', 'yank'), ('\\C-z', 'suspend'), ('\\M-b', 'backward-word'), ('\\M-c', 'capitalize-word'), ('\\M-d', 'kill-word'), ('\\M-f', 'forward-word'), ('\\M-l', 'downcase-word'), ('\\M-t', 'transpose-words'), ('\\M-u', 'upcase-word'), ('\\M-y', 'yank-pop'), ('\\M--', 'digit-arg'), ('\\M-0', 'digit-arg'), ('\\M-1', 'digit-arg'), ('\\M-2', 'digit-arg'), ('\\M-3', 'digit-arg'), ('\\M-4', 'digit-arg'), ('\\M-5', 'digit-arg'), ('\\M-6', 'digit-arg'), ('\\M-7', 'digit-arg'), ('\\M-8', 'digit-arg'), ('\\M-9', 'digit-arg'), ('\\M-\\n', 'accept'), ('\\\\', 'self-insert'), ('\\x1b[200~', 'enable_bracketed_paste'), ('\\x1b[201~', 'disable_bracketed_paste'), ('\\x03', 'ctrl-c'), (' ', 'self-insert'), ('!', 'self-insert'), ('"', 'self-insert'), ('#', 'self-insert'), ('$', 'self-insert'), ('%', 'self-insert'), ('&', 'self-insert'), ("'", 'self-insert'), ('(', 'self-insert'), (')', 'self-insert'), ('*', 'self-insert'), ('+', 'self-insert'), (',', 'self-insert'), ('-', 'self-insert'), ('.', 'self-insert'), ('/', 'self-insert'), ('0', 'self-insert'), ('1', 'self-insert'), ('2', 'self-insert'), ('3', 'self-insert'), ('4', 'self-insert'), ('5', 'self-insert'), ('6', 'self-insert'), ('7', 'self-insert'), ('8', 'self-insert'), ('9', 'self-insert'), (':', 'self-insert'), (';', 'self-insert'), ('<', 'self-insert'), ('=', 'self-insert'), ('>', 'self-insert'), ('?', 'self-insert'), ('@', 'self-insert'), ('A', 'self-insert'), ('B', 'self-insert'), ('C', 'self-insert'), ('D', 'self-insert'), ('E', 'self-insert'), ('F', 'self-insert'), ('G', 'self-insert'), ('H', 'self-insert'), ('I', 'self-insert'), ('J', 'self-insert'), ('K', 'self-insert'), ('L', 'self-insert'), ('M', 'self-insert'), ('N', 'self-insert'), ('O', 'self-insert'), ('P', 'self-insert'), ('Q', 'self-insert'), ('R', 'self-insert'), ('S', 'self-insert'), ('T', 'self-insert'), ('U', 'self-insert'), ('V', 'self-insert'), ('W', 'self-insert'), ('X', 'self-insert'), ('Y', 'self-insert'), ('Z', 'self-insert'), ('[', 'self-insert'), (']', 'self-insert'), ('^', 'self-insert'), ('_', 'self-insert'), ('`', 'self-insert'), ('a', 'self-insert'), ('b', 'self-insert'), ('c', 'self-insert'), ('d', 'self-insert'), ('e', 'self-insert'), ('f', 'self-insert'), ('g', 'self-insert'), ('h', 'self-insert'), ('i', 'self-insert'), ('j', 'self-insert'), ('k', 'self-insert'), ('l', 'self-insert'), ('m', 'self-insert'), ('n', 'self-insert'), ('o', 'self-insert'), ('p', 'self-insert'), ('q', 'self-insert'), ('r', 'self-insert'), ('s', 'self-insert'), ('t', 'self-insert'), ('u', 'self-insert'), ('v', 'self-insert'), ('w', 'self-insert'), ('x', 'self-insert'), ('y', 'self-insert'), ('z', 'self-insert'), ('{', 'self-insert'), ('|', 'self-insert'), ('}', 'self-insert'), ('~', 'self-insert'), ('ª', 'self-insert'), ('µ', 'self-insert'), ('º', 'self-insert'), ('À', 'self-insert'), ('Á', 'self-insert'), ('Â', 'self-insert'), ('Ã', 'self-insert'), ('Ä', 'self-insert'), ('Å', 'self-insert'), ('Æ', 'self-insert'), ('Ç', 'self-insert'), ('È', 'self-insert'), ('É', 'self-insert'), ('Ê', 'self-insert'), ('Ë', 'self-insert'), ('Ì', 'self-insert'), ('Í', 'self-insert'), ('Î', 'self-insert'), ('Ï', 'self-insert'), ('Ð', 'self-insert'), ('Ñ', 'self-insert'), ('Ò', 'self-insert'), ('Ó', 'self-insert'), ('Ô', 'self-insert'), ('Õ', 'self-insert'), ('Ö', 'self-insert'), ('Ø', 'self-insert'), ('Ù', 'self-insert'), ('Ú', 'self-insert'), ('Û', 'self-insert'), ('Ü', 'self-insert'), ('Ý', 'self-insert'), ('Þ', 'self-insert'), ('ß', 'self-insert'), ('à', 'self-insert'), ('á', 'self-insert'), ('â', 'self-insert'), ('ã', 'self-insert'), ('ä', 'self-insert'), ('å', 'self-insert'), ('æ', 'self-insert'), ('ç', 'self-insert'), ('è', 'self-insert'), ('é', 'self-insert'), ('ê', 'self-insert'), ('ë', 'self-insert'), ('ì', 'self-insert'), ('í', 'self-insert'), ('î', 'self-insert'), ('ï', 'self-insert'), ('ð', 'self-insert'), ('ñ', 'self-insert'), ('ò', 'self-insert'), ('ó', 'self-insert'), ('ô', 'self-insert'), ('õ', 'self-insert'), ('ö', 'self-insert'), ('ø', 'self-insert'), ('ù', 'self-insert'), ('ú', 'self-insert'), ('û', 'self-insert'), ('ü', 'self-insert'), ('ý', 'self-insert'), ('þ', 'self-insert'), ('ÿ', 'self-insert'), ('\\<up>', 'up'), ('\\<down>', 'down'), ('\\<left>', 'left'), ('\\C-\\<left>', 'backward-word'), ('\\<right>', 'right'), ('\\C-\\<right>', 'forward-word'), ('\\<delete>', 'delete'), ('\\<backspace>', 'backspace'), ('\\M-\\<backspace>', 'backward-kill-word'), ('\\<end>', 'end-of-line'), ('\\<home>', 'beginning-of-line'), ('\\<f1>', 'help'), ('\\<f2>', 'show-history'), ('\\<f3>', 'paste-mode'), ('\\EOF', 'end'), ('\\EOH', 'home'), ('\\t', 'complete'), ('\\C-n', 'next-history'), ('\\C-p', 'previous-history'), ('\\C-o', 'operate-and-get-next'), ('\\C-r', 'reverse-history-isearch'), ('\\C-s', 'forward-history-isearch'), ('\\M-r', 'restore-history'), ('\\M-.', 'yank-arg'), ('\\<page down>', 'last-history'), ('\\<page up>', 'first-history'), ('\\n', 'maybe-accept'), ('\\<backspace>', 'backspace-dedent')), input_trans=<_pyrepl.input.KeymapTranslator object at 0x0000015EC6269400s=[], can_colorize=True, last_refresh_cache=Reader.RefreshCache(in_bracketed_paste=False, screen=['\x1b[1;35m>>> \x1b[0minput'], screeninfo=le=False, cmpltn_message_visible=False, cmpltn_menu_end=0, cmpltn_menu_choices=[], history=['vars()', 'vars().foo = 1', 'globals()', 'locals()', 'locals() is globals() is vars()', 'foo = 1', 'def fun():\n    bar = 2\n    print(vars())\n    ', 'fun()', 'def fun():\n    bar = 2\n    print(dict(globals()).update(locals()))', 'fun()', 'def fun():\n    bar = 2\n    print(dict(**globals(), **locals()))', 'fun()', 'def fun():\n    bar = 2\n    print(dict(**__builtins__, **globals(), **locals()))', 'fun()', 'def fun():\n    bar = 2\n    print(dict(**vars(__builtins__), **globals(), **locals()))', 'fun()', 'def fun():\n    bar = 2\n    print(vars(__builtins__) | globals() | locals())', 'fun()', 'bar = 1', 'fun()', 'def fun():\n    bar = 2\n    print(vars(__builtins__) | globals() | locals())', 'fun()', 'for k, v in (vars(__builtins__) | globals() | locals()).items():\n    print(f"{k}\\n{v}\\n")\n    ', 'input'], historyi=23, next_history=None, transient_history={}, isearch_term='', isearch_direction='', isearch_start=(0, 0), isearch_trans=<_pyrepl.input.KeymapTranslator object at 0x0000015EC4963ED0>, yank_arg_i=0, yank_arg_yanked='', config=ReadlineConfig(readline_completer=<bound method Completer.complete of <rlcompleter.Completer object at 0x0000015EC6269940>>, completer_delims=frozenset({'$', '{', '"', '#', ',', ')', '!', '|', '%', '+', '~', ':', '?', '@', "'", '*', '^', '-', '(', '\t', '[', '}', '=', ' ', '/', '>', '\n', ';', '\\', '&', '`', '<', ']'})), more_lines=None, last_used_indentation='    '), saved_history_length=-1, startup_hook=None, config=ReadlineConfig(readline_completer=<bound method Completer.complete of <rlcompleter.Completer object at 0x0000015EC6269940>>, completer_delims=frozenset({'$', '{', '"', '#', ',', ')', '!', '|', '%', '+', '~', ':', '?', '@', "'", '*', '^', '-', '(', '\t', '[', '}', '=', ' ', '/', '>', '\n', ';', '\\', '&', '`', '<', ']'})))>

With this patch:

>>> input
<bound method _ReadlineWrapper.input of <_pyrepl.readline._ReadlineWrapper object at 0x7f0b652cfbf0>>

This reverts commit 199e785.
@SnoopJ
Copy link
Contributor Author

SnoopJ commented Aug 19, 2024

I personally kept the f_in and f_out just for to know which file descriptor is being used but otherwise we can also suppress the entire fields.

Good point, I'll tweak the changeset to suppress only the reader, config objects which are the bulk of the long repr (it seems like it is useful to also report the history length in the repr)

@picnixz
Copy link
Member

picnixz commented Aug 19, 2024

For now, let's keep your solution. I'd wait for @pablogsal's opinion on that matter.

@SnoopJ
Copy link
Contributor Author

SnoopJ commented Aug 19, 2024

My bad, I committed faster than that comment. We'll see what Pablo thinks one way or the other :)

@Eclips4 Eclips4 added the needs backport to 3.13 bugs and security fixes label Aug 19, 2024
Copy link
Member

@pablogsal pablogsal left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 🚀

@pablogsal
Copy link
Member

Thanks a lot @SnoopJ for the PR and @picnixz for the review!

@pablogsal pablogsal merged commit 833c58b into python:main Aug 19, 2024
43 checks passed
@miss-islington-app
Copy link

Thanks @SnoopJ for the PR, and @pablogsal for merging it 🌮🎉.. I'm working now to backport this PR to: 3.13.
🐍🍒⛏🤖

miss-islington pushed a commit to miss-islington/cpython that referenced this pull request Aug 19, 2024
@bedevere-app
Copy link

bedevere-app bot commented Aug 19, 2024

GH-123157 is a backport of this pull request to the 3.13 branch.

@bedevere-app bedevere-app bot removed the needs backport to 3.13 bugs and security fixes label Aug 19, 2024
@SnoopJ SnoopJ deleted the tweak/suppress-large-repl-repr branch August 19, 2024 19:05
pablogsal pushed a commit that referenced this pull request Aug 19, 2024
)

gh-123149: Suppress verbose repr in new REPL (GH-123151)
(cherry picked from commit 833c58b)

Co-authored-by: James <[email protected]>
jeremyhylton pushed a commit to jeremyhylton/cpython that referenced this pull request Aug 19, 2024
blhsing pushed a commit to blhsing/cpython that referenced this pull request Aug 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

The repr() of the input function is absurdly long
4 participants