From 1f2ba4b6dad80f97aeecb5be8f35f44ca792c983 Mon Sep 17 00:00:00 2001 From: Alexandre Vassalotti Date: Fri, 16 May 2008 07:12:44 +0000 Subject: Rename the repr module to reprlib. Merged revisions 63357 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r63357 | alexandre.vassalotti | 2008-05-16 02:58:49 -0400 (Fri, 16 May 2008) | 2 lines Changed references to the reprlib module to use its new name. ........ --- Demo/pdist/cmptree.py | 2 +- Demo/pdist/server.py | 2 +- Doc/library/repr.rst | 133 ------------------------------------------ Doc/library/reprlib.rst | 136 +++++++++++++++++++++++++++++++++++++++++++ Doc/tutorial/stdlib2.rst | 6 +- Lib/bdb.py | 6 +- Lib/copy.py | 19 +++--- Lib/idlelib/Debugger.py | 4 +- Lib/idlelib/ObjectBrowser.py | 2 +- Lib/pdb.py | 2 +- Lib/pydoc.py | 2 +- Lib/test/test___all__.py | 2 +- Lib/test/test_repr.py | 4 +- Misc/NEWS | 2 + 14 files changed, 163 insertions(+), 159 deletions(-) delete mode 100644 Doc/library/repr.rst create mode 100644 Doc/library/reprlib.rst diff --git a/Demo/pdist/cmptree.py b/Demo/pdist/cmptree.py index 1e9f985e..f804d31 100755 --- a/Demo/pdist/cmptree.py +++ b/Demo/pdist/cmptree.py @@ -1,7 +1,7 @@ """Compare local and remote dictionaries and transfer differing files -- like rdist.""" import sys -from repr import repr +from reprlib import repr import FSProxy import time import os diff --git a/Demo/pdist/server.py b/Demo/pdist/server.py index 7e77971..b3943ff 100755 --- a/Demo/pdist/server.py +++ b/Demo/pdist/server.py @@ -4,7 +4,7 @@ import sys import socket import pickle from fnmatch import fnmatch -from repr import repr +from reprlib import repr # Default verbosity (0 = silent, 1 = print connections, 2 = print requests too) diff --git a/Doc/library/repr.rst b/Doc/library/repr.rst deleted file mode 100644 index 3f7fc22..0000000 --- a/Doc/library/repr.rst +++ /dev/null @@ -1,133 +0,0 @@ - -:mod:`repr` --- Alternate :func:`repr` implementation -===================================================== - -.. module:: repr - :synopsis: Alternate repr() implementation with size limits. -.. sectionauthor:: Fred L. Drake, Jr. - - -The :mod:`repr` module provides a means for producing object representations -with limits on the size of the resulting strings. This is used in the Python -debugger and may be useful in other contexts as well. - -This module provides a class, an instance, and a function: - - -.. class:: Repr() - - Class which provides formatting services useful in implementing functions - similar to the built-in :func:`repr`; size limits for different object types - are added to avoid the generation of representations which are excessively long. - - -.. data:: aRepr - - This is an instance of :class:`Repr` which is used to provide the :func:`repr` - function described below. Changing the attributes of this object will affect - the size limits used by :func:`repr` and the Python debugger. - - -.. function:: repr(obj) - - This is the :meth:`repr` method of ``aRepr``. It returns a string similar to - that returned by the built-in function of the same name, but with limits on - most sizes. - - -.. _repr-objects: - -Repr Objects ------------- - -:class:`Repr` instances provide several members which can be used to provide -size limits for the representations of different object types, and methods -which format specific object types. - - -.. attribute:: Repr.maxlevel - - Depth limit on the creation of recursive representations. The default is ``6``. - - -.. attribute:: Repr.maxdict - Repr.maxlist - Repr.maxtuple - Repr.maxset - Repr.maxfrozenset - Repr.maxdeque - Repr.maxarray - - Limits on the number of entries represented for the named object type. The - default is ``4`` for :attr:`maxdict`, ``5`` for :attr:`maxarray`, and ``6`` for - the others. - - -.. attribute:: Repr.maxlong - - Maximum number of characters in the representation for an integer. Digits - are dropped from the middle. The default is ``40``. - - -.. attribute:: Repr.maxstring - - Limit on the number of characters in the representation of the string. Note - that the "normal" representation of the string is used as the character source: - if escape sequences are needed in the representation, these may be mangled when - the representation is shortened. The default is ``30``. - - -.. attribute:: Repr.maxother - - This limit is used to control the size of object types for which no specific - formatting method is available on the :class:`Repr` object. It is applied in a - similar manner as :attr:`maxstring`. The default is ``20``. - - -.. method:: Repr.repr(obj) - - The equivalent to the built-in :func:`repr` that uses the formatting imposed by - the instance. - - -.. method:: Repr.repr1(obj, level) - - Recursive implementation used by :meth:`repr`. This uses the type of *obj* to - determine which formatting method to call, passing it *obj* and *level*. The - type-specific methods should call :meth:`repr1` to perform recursive formatting, - with ``level - 1`` for the value of *level* in the recursive call. - - -.. method:: Repr.repr_TYPE(obj, level) - :noindex: - - Formatting methods for specific types are implemented as methods with a name - based on the type name. In the method name, **TYPE** is replaced by - ``string.join(string.split(type(obj).__name__, '_'))``. Dispatch to these - methods is handled by :meth:`repr1`. Type-specific methods which need to - recursively format a value should call ``self.repr1(subobj, level - 1)``. - - -.. _subclassing-reprs: - -Subclassing Repr Objects ------------------------- - -The use of dynamic dispatching by :meth:`Repr.repr1` allows subclasses of -:class:`Repr` to add support for additional built-in object types or to modify -the handling of types already supported. This example shows how special support -for file objects could be added:: - - import repr - import sys - - class MyRepr(repr.Repr): - def repr_file(self, obj, level): - if obj.name in ['', '', '']: - return obj.name - else: - return `obj` - - aRepr = MyRepr() - print(aRepr.repr(sys.stdin)) # prints '' - diff --git a/Doc/library/reprlib.rst b/Doc/library/reprlib.rst new file mode 100644 index 0000000..84fd6fb --- /dev/null +++ b/Doc/library/reprlib.rst @@ -0,0 +1,136 @@ + +:mod:`reprlib` --- Alternate :func:`repr` implementation +===================================================== + +.. module:: reprlib + :synopsis: Alternate repr() implementation with size limits. +.. sectionauthor:: Fred L. Drake, Jr. + + +The :mod:`reprlib` module provides a means for producing object representations +with limits on the size of the resulting strings. This is used in the Python +debugger and may be useful in other contexts as well. + +This module provides a class, an instance, and a function: + + +.. class:: Repr() + + Class which provides formatting services useful in implementing functions + similar to the built-in :func:`repr`; size limits for different object types + are added to avoid the generation of representations which are excessively long. + + +.. data:: aRepr + + This is an instance of :class:`Repr` which is used to provide the :func:`repr` + function described below. Changing the attributes of this object will affect + the size limits used by :func:`repr` and the Python debugger. + + +.. function:: repr(obj) + + This is the :meth:`repr` method of ``aRepr``. It returns a string similar to + that returned by the built-in function of the same name, but with limits on + most sizes. + + +.. _repr-objects: + +Repr Objects +------------ + +:class:`Repr` instances provide several members which can be used to provide +size limits for the representations of different object types, and methods +which format specific object types. + + +.. attribute:: Repr.maxlevel + + Depth limit on the creation of recursive representations. The default is ``6``. + + +.. attribute:: Repr.maxdict + Repr.maxlist + Repr.maxtuple + Repr.maxset + Repr.maxfrozenset + Repr.maxdeque + Repr.maxarray + + Limits on the number of entries represented for the named object type. The + default is ``4`` for :attr:`maxdict`, ``5`` for :attr:`maxarray`, and ``6`` for + the others. + + .. versionadded:: 2.4 + :attr:`maxset`, :attr:`maxfrozenset`, and :attr:`set`. + + +.. attribute:: Repr.maxlong + + Maximum number of characters in the representation for a long integer. Digits + are dropped from the middle. The default is ``40``. + + +.. attribute:: Repr.maxstring + + Limit on the number of characters in the representation of the string. Note + that the "normal" representation of the string is used as the character source: + if escape sequences are needed in the representation, these may be mangled when + the representation is shortened. The default is ``30``. + + +.. attribute:: Repr.maxother + + This limit is used to control the size of object types for which no specific + formatting method is available on the :class:`Repr` object. It is applied in a + similar manner as :attr:`maxstring`. The default is ``20``. + + +.. method:: Repr.repr(obj) + + The equivalent to the built-in :func:`repr` that uses the formatting imposed by + the instance. + + +.. method:: Repr.repr1(obj, level) + + Recursive implementation used by :meth:`repr`. This uses the type of *obj* to + determine which formatting method to call, passing it *obj* and *level*. The + type-specific methods should call :meth:`repr1` to perform recursive formatting, + with ``level - 1`` for the value of *level* in the recursive call. + + +.. method:: Repr.repr_TYPE(obj, level) + :noindex: + + Formatting methods for specific types are implemented as methods with a name + based on the type name. In the method name, **TYPE** is replaced by + ``string.join(string.split(type(obj).__name__, '_'))``. Dispatch to these + methods is handled by :meth:`repr1`. Type-specific methods which need to + recursively format a value should call ``self.repr1(subobj, level - 1)``. + + +.. _subclassing-reprs: + +Subclassing Repr Objects +------------------------ + +The use of dynamic dispatching by :meth:`Repr.repr1` allows subclasses of +:class:`Repr` to add support for additional built-in object types or to modify +the handling of types already supported. This example shows how special support +for file objects could be added:: + + import repr + import sys + + class MyRepr(repr.Repr): + def repr_file(self, obj, level): + if obj.name in ['', '', '']: + return obj.name + else: + return `obj` + + aRepr = MyRepr() + print aRepr.repr(sys.stdin) # prints '' + diff --git a/Doc/tutorial/stdlib2.rst b/Doc/tutorial/stdlib2.rst index d519fc4..33bc47a 100644 --- a/Doc/tutorial/stdlib2.rst +++ b/Doc/tutorial/stdlib2.rst @@ -13,11 +13,11 @@ programming needs. These modules rarely occur in small scripts. Output Formatting ================= -The :mod:`repr` module provides a version of :func:`repr` customized for +The :mod:`reprlib` module provides a version of :func:`repr` customized for abbreviated displays of large or deeply nested containers:: - >>> import repr - >>> repr.repr(set('supercalifragilisticexpialidocious')) + >>> import reprlib + >>> reprlib.repr(set('supercalifragilisticexpialidocious')) "set(['a', 'c', 'd', 'e', 'f', 'g', ...])" The :mod:`pprint` module offers more sophisticated control over printing both diff --git a/Lib/bdb.py b/Lib/bdb.py index b8a20ec..747e092 100644 --- a/Lib/bdb.py +++ b/Lib/bdb.py @@ -324,7 +324,7 @@ class Bdb: # def format_stack_entry(self, frame_lineno, lprefix=': '): - import linecache, repr + import linecache, reprlib frame, lineno = frame_lineno filename = self.canonic(frame.f_code.co_filename) s = '%s(%r)' % (filename, lineno) @@ -337,13 +337,13 @@ class Bdb: else: args = None if args: - s = s + repr.repr(args) + s = s + reprlib.repr(args) else: s = s + '()' if '__return__' in frame.f_locals: rv = frame.f_locals['__return__'] s = s + '->' - s = s + repr.repr(rv) + s = s + reprlib.repr(rv) line = linecache.getline(filename, lineno) if line: s = s + lprefix + line.strip() return s diff --git a/Lib/copy.py b/Lib/copy.py index 899ee4d..a334b79 100644 --- a/Lib/copy.py +++ b/Lib/copy.py @@ -354,17 +354,16 @@ def _test(): print(l2) l.append({l[1]: l, 'xyz': l[2]}) l3 = copy(l) - import repr - print(map(repr.repr, l)) - print(map(repr.repr, l1)) - print(map(repr.repr, l2)) - print(map(repr.repr, l3)) + import reprlib + print(map(reprlib.repr, l)) + print(map(reprlib.repr, l1)) + print(map(reprlib.repr, l2)) + print(map(reprlib.repr, l3)) l3 = deepcopy(l) - import repr - print(map(repr.repr, l)) - print(map(repr.repr, l1)) - print(map(repr.repr, l2)) - print(map(repr.repr, l3)) + print(map(reprlib.repr, l)) + print(map(reprlib.repr, l1)) + print(map(reprlib.repr, l2)) + print(map(reprlib.repr, l3)) if __name__ == '__main__': _test() diff --git a/Lib/idlelib/Debugger.py b/Lib/idlelib/Debugger.py index 346763f..00aa4bb 100644 --- a/Lib/idlelib/Debugger.py +++ b/Lib/idlelib/Debugger.py @@ -412,8 +412,8 @@ class NamespaceViewer: height = 20*len(dict) # XXX 20 == observed height of Entry widget self.master = master self.title = title - import repr - self.repr = repr.Repr() + import reprlib + self.repr = reprlib.Repr() self.repr.maxstring = 60 self.repr.maxother = 60 self.frame = frame = Frame(master) diff --git a/Lib/idlelib/ObjectBrowser.py b/Lib/idlelib/ObjectBrowser.py index 75bc3a6..4cb432f 100644 --- a/Lib/idlelib/ObjectBrowser.py +++ b/Lib/idlelib/ObjectBrowser.py @@ -11,7 +11,7 @@ from idlelib.TreeWidget import TreeItem, TreeNode, ScrolledCanvas -from repr import Repr +from reprlib import Repr myrepr = Repr() myrepr.maxstring = 100 diff --git a/Lib/pdb.py b/Lib/pdb.py index 7e1edb5..bc0ec68 100755 --- a/Lib/pdb.py +++ b/Lib/pdb.py @@ -8,7 +8,7 @@ import sys import linecache import cmd import bdb -from repr import Repr +from reprlib import Repr import os import re import pprint diff --git a/Lib/pydoc.py b/Lib/pydoc.py index c60a198..f94da3f 100755 --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -53,7 +53,7 @@ Richard Chamberlain, for the first implementation of textdoc. # path will be displayed. import sys, imp, os, re, inspect, builtins, pkgutil -from repr import Repr +from reprlib import Repr try: from collections import deque except ImportError: diff --git a/Lib/test/test___all__.py b/Lib/test/test___all__.py index dbc55cd..9d0487d 100644 --- a/Lib/test/test___all__.py +++ b/Lib/test/test___all__.py @@ -114,7 +114,7 @@ class AllTest(unittest.TestCase): self.check_all("quopri") self.check_all("random") self.check_all("re") - self.check_all("repr") + self.check_all("reprlib") self.check_all("rfc822") self.check_all("rlcompleter") self.check_all("robotparser") diff --git a/Lib/test/test_repr.py b/Lib/test/test_repr.py index ac1a0a0..442c048 100644 --- a/Lib/test/test_repr.py +++ b/Lib/test/test_repr.py @@ -9,8 +9,8 @@ import shutil import unittest from test.test_support import run_unittest -from repr import repr as r # Don't shadow builtin repr -from repr import Repr +from reprlib import repr as r # Don't shadow builtin repr +from reprlib import Repr def nestedTuple(nesting): diff --git a/Misc/NEWS b/Misc/NEWS index 6eb022d..7bb3b3f 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -42,6 +42,8 @@ Extension Modules Library ------- +- The repr module has been renamed to reprlib. + - The statvfs module has been removed. - #1713041: fix pprint's handling of maximum depth. -- cgit v0.12