8000 update reprlib to 3.13.3 · RustPython/RustPython@2a0bd64 · GitHub
[go: up one dir, main page]

Skip to content

Commit 2a0bd64

Browse files
arihant2mathyouknowone
authored andcommitted
update reprlib to 3.13.3
1 parent 459c1ff commit 2a0bd64

File tree

2 files changed

+514
-29
lines changed

2 files changed

+514
-29
lines changed

Lib/reprlib.py

Lines changed: 83 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -29,49 +29,100 @@ def wrapper(self):
2929
wrapper.__name__ = getattr(user_function, '__name__')
3030
wrapper.__qualname__ = getattr(user_function, '__qualname__')
3131
wrapper.__annotations__ = getattr(user_function, '__annotations__', {})
32+
wrapper.__type_params__ = getattr(user_function, '__type_params__', ())
33+
wrapper.__wrapped__ = user_function
3234
return wrapper
3335

3436
return decorating_function
3537

3638
class Repr:
37-
38-
def __init__(self):
39-
self.maxlevel = 6
40-
self.maxtuple = 6
41-
self.maxlist = 6
42-
self.maxarray = 5
43-
self.maxdict = 4
44-
self.maxset = 6
45-
self.maxfrozenset = 6
46-
self.maxdeque = 6
47-
self.maxstring = 30
48-
self.maxlong = 40
49-
self.maxother = 30
39+
_lookup = {
40+
'tuple': 'builtins',
41+
'list': 'builtins',
42+
'array': 'array',
43+
'set': 'builtins',
44+
'frozenset': 'builtins',
45+
'deque': 'collections',
46+
'dict': 'builtins',
47+
'str': 'builtins',
48+
'int': 'builtins'
49+
}
50+
51+
def __init__(
52+
self, *, maxlevel=6, maxtuple=6, maxlist=6, maxarray=5, maxdict=4,
53+
maxset=6, maxfrozenset=6, maxdeque=6, maxstring=30, maxlong=40,
54+
maxother=30, fillvalue='...', indent=None,
55+
):
56+
self.maxlevel = maxlevel
57+
self.maxtuple = maxtuple
58+
self.maxlist = maxlist
59+
self.maxarray = maxarray
60+
self.maxdict = maxdict
61+
self.maxset = maxset
62+
self.maxfrozenset = maxfrozenset
63+
self.maxdeque = maxdeque
64+
self.maxstring = maxstring
65+
self.maxlong = maxlong
66+
self.maxother = maxother
67+
self.fillvalue = fillvalue
68+
self.indent = indent
5069

5170
def repr(self, x):
5271
return self.repr1(x, self.maxlevel)
5372

5473
def repr1(self, x, level):
55-
typename = type(x).__name__
74+
cls = type(x)
75+
typename = cls.__name__
76+
5677
if ' ' in typename:
5778
parts = typename.split()
5879
typename = '_'.join(parts)
59-
if hasattr(self, 'repr_' + typename):
60-
return getattr(self, 'repr_' + typename)(x, level)
61-
else:
62-
return self.repr_instance(x, level)
80+
81+
method = getattr(self, 'repr_' + typename, None)
82+
if method:
83+
# not defined in this class
84+
if typename not in self._lookup:
85+
return method(x, level)
86+
module = getattr(cls, '__module__', None)
87+
# defined in this class and is the module intended
88+
if module == self._lookup[typename]:
89+
return method(x, level)
90+
91+
return self.repr_instance(x, level)
92+
93+
def _join(self, pieces, level):
94+
if self.indent is None:
95+
return ', '.join(pieces)
96+
if not pieces:
97+
return ''
98+
indent = self.indent
99+
if isinstance(indent, int):
100+
if indent < 0:
101+
raise ValueError(
102+
f'Repr.indent cannot be negative int (was {indent!r})'
103+
)
104+
indent *= ' '
105+
try:
106+
sep = ',\n' + (self.maxlevel - level + 1) * indent
107+
except TypeError as error:
108+
raise TypeError(
109+
f'Repr.indent must be a str, int or None, not {type(indent)}'
110+
) from error
111+
return sep.join(('', *pieces, ''))[1:-len(indent) or None]
63112

64113
def _repr_iterable(self, x, level, left, right, maxiter, trail=''):
65114
n = len(x)
66115
if level <= 0 and n:
67-
s = '...'
116+
s = self.fillvalue
68117
else:
69118
newlevel = level - 1
70119
repr1 = self.repr1
71120
pieces = [repr1(elem, newlevel) for elem in islice(x, maxiter)]
72-
if n > maxiter: pieces.append('...')
73-
s = ', '.join(pieces)
74-
if n == 1 and trail: right = trail + right
121+
if n > maxiter:
122+
pieces.append(self.fillvalue)
123+
s = self._join(pieces, level)
124+
if n == 1 and trail and self.indent is None:
125+
right = trail + right
75126
return '%s%s%s' % (left, s, right)
76127

77128
def repr_tuple(self, x, level):
@@ -104,17 +155,20 @@ def repr_deque(self, x, level):
104155

105156
def repr_dict(self, x, level):
106157
n = len(x)
107-
if n == 0: return '{}'
108-
if level <= 0: return '{...}'
158+
if n == 0:
159+
return '{}'
160+
if level <= 0:
161+
return '{' + self.fillvalue + '}'
109162
newlevel = level - 1
110163
repr1 = self.repr1
111164
pieces = []
112165
for key in islice(_possibly_sorted(x), self.maxdict):
113166
keyrepr = repr1(key, newlevel)
114167
valrepr = repr1(x[key], newlevel)
115168
pieces.append('%s: %s' % (keyrepr, valrepr))
116-
if n > self.maxdict: pieces.append('...')
117-
s = ', '.join(pieces)
169+
if n > self.maxdict:
170+
pieces.append(self.fillvalue)
171+
s = self._join(pieces, level)
118172
return '{%s}' % (s,)
119173

120174
def repr_str(self, x, level):
@@ -123,15 +177,15 @@ def repr_str(self, x, level):
123177
i = max(0, (self.maxstring-3)//2)
124178
j = max(0, self.maxstring-3-i)
125179
s = builtins.repr(x[:i] + x[len(x)-j:])
126-
s = s[:i] + '...' + s[len(s)-j:]
180+
s = s[:i] + self.fillvalue + s[len(s)-j:]
127181
return s
128182

129183
def repr_int(self, x, level):
130184
s = builtins.repr(x) # XXX Hope this isn't too slow...
131185
if len(s) > self.maxlong:
132186
i = max(0, (self.maxlong-3)//2)
133187
j = max(0, self.maxlong-3-i)
134-
s = s[:i] + '...' + s[len(s)-j:]
188+
s = s[:i] + self.fillvalue + s[len(s)-j:]
135189
return s
136190

137191
def repr_instance(self, x, level):
@@ -144,7 +198,7 @@ def repr_instance(self, x, level):
144198
if len(s) > self.maxother:
145199
i = max(0, (self.maxother-3)//2)
146200
j = max(0, self.maxother-3-i)
147-
s = s[:i] + '...' + s[len(s)-j:]
201+
s = s[:i] + self.fillvalue + s[len(s)-j:]
148202
return s
149203

150204

0 commit comments

Comments
 (0)
0