PHP 8.5.2
Preview: reprlib.py Size: 6.42 KB
/lib/python3.12/reprlib.py

"""Redo the builtin repr() (representation) but with limits on most sizes."""

__all__ = ["Repr", "repr", "recursive_repr"]

import builtins
from itertools import islice
from _thread import get_ident

def recursive_repr(fillvalue='...'):
    'Decorator to make a repr function return fillvalue for a recursive call'

    def decorating_function(user_function):
        repr_running = set()

        def wrapper(self):
            key = id(self), get_ident()
            if key in repr_running:
                return fillvalue
            repr_running.add(key)
            try:
                result = user_function(self)
            finally:
                repr_running.discard(key)
            return result

        # Can't use functools.wraps() here because of bootstrap issues
        wrapper.__module__ = getattr(user_function, '__module__')
        wrapper.__doc__ = getattr(user_function, '__doc__')
        wrapper.__name__ = getattr(user_function, '__name__')
        wrapper.__qualname__ = getattr(user_function, '__qualname__')
        wrapper.__annotations__ = getattr(user_function, '__annotations__', {})
        wrapper.__type_params__ = getattr(user_function, '__type_params__', ())
        return wrapper

    return decorating_function

class Repr:

    def __init__(
        self, *, maxlevel=6, maxtuple=6, maxlist=6, maxarray=5, maxdict=4,
        maxset=6, maxfrozenset=6, maxdeque=6, maxstring=30, maxlong=40,
        maxother=30, fillvalue='...', indent=None,
    ):
        self.maxlevel = maxlevel
        self.maxtuple = maxtuple
        self.maxlist = maxlist
        self.maxarray = maxarray
        self.maxdict = maxdict
        self.maxset = maxset
        self.maxfrozenset = maxfrozenset
        self.maxdeque = maxdeque
        self.maxstring = maxstring
        self.maxlong = maxlong
        self.maxother = maxother
        self.fillvalue = fillvalue
        self.indent = indent

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

    def repr1(self, x, level):
        typename = type(x).__name__
        if ' ' in typename:
            parts = typename.split()
            typename = '_'.join(parts)
        if hasattr(self, 'repr_' + typename):
            return getattr(self, 'repr_' + typename)(x, level)
        else:
            return self.repr_instance(x, level)

    def _join(self, pieces, level):
        if self.indent is None:
            return ', '.join(pieces)
        if not pieces:
            return ''
        indent = self.indent
        if isinstance(indent, int):
            if indent < 0:
                raise ValueError(
                    f'Repr.indent cannot be negative int (was {indent!r})'
                )
            indent *= ' '
        try:
            sep = ',\n' + (self.maxlevel - level + 1) * indent
        except TypeError as error:
            raise TypeError(
                f'Repr.indent must be a str, int or None, not {type(indent)}'
            ) from error
        return sep.join(('', *pieces, ''))[1:-len(indent) or None]

    def _repr_iterable(self, x, level, left, right, maxiter, trail=''):
        n = len(x)
        if level <= 0 and n:
            s = self.fillvalue
        else:
            newlevel = level - 1
            repr1 = self.repr1
            pieces = [repr1(elem, newlevel) for elem in islice(x, maxiter)]
            if n > maxiter:
                pieces.append(self.fillvalue)
            s = self._join(pieces, level)
            if n == 1 and trail and self.indent is None:
                right = trail + right
        return '%s%s%s' % (left, s, right)

    def repr_tuple(self, x, level):
        return self._repr_iterable(x, level, '(', ')', self.maxtuple, ',')

    def repr_list(self, x, level):
        return self._repr_iterable(x, level, '[', ']', self.maxlist)

    def repr_array(self, x, level):
        if not x:
            return "array('%s')" % x.typecode
        header = "array('%s', [" % x.typecode
        return self._repr_iterable(x, level, header, '])', self.maxarray)

    def repr_set(self, x, level):
        if not x:
            return 'set()'
        x = _possibly_sorted(x)
        return self._repr_iterable(x, level, '{', '}', self.maxset)

    def repr_frozenset(self, x, level):
        if not x:
            return 'frozenset()'
        x = _possibly_sorted(x)
        return self._repr_iterable(x, level, 'frozenset({', '})',
                                   self.maxfrozenset)

    def repr_deque(self, x, level):
        return self._repr_iterable(x, level, 'deque([', '])', self.maxdeque)

    def repr_dict(self, x, level):
        n = len(x)
        if n == 0:
            return '{}'
        if level <= 0:
            return '{' + self.fillvalue + '}'
        newlevel = level - 1
        repr1 = self.repr1
        pieces = []
        for key in islice(_possibly_sorted(x), self.maxdict):
            keyrepr = repr1(key, newlevel)
            valrepr = repr1(x[key], newlevel)
            pieces.append('%s: %s' % (keyrepr, valrepr))
        if n > self.maxdict:
            pieces.append(self.fillvalue)
        s = self._join(pieces, level)
        return '{%s}' % (s,)

    def repr_str(self, x, level):
        s = builtins.repr(x[:self.maxstring])
        if len(s) > self.maxstring:
            i = max(0, (self.maxstring-3)//2)
            j = max(0, self.maxstring-3-i)
            s = builtins.repr(x[:i] + x[len(x)-j:])
            s = s[:i] + self.fillvalue + s[len(s)-j:]
        return s

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

    def repr_instance(self, x, level):
        try:
            s = builtins.repr(x)
            # Bugs in x.__repr__() can cause arbitrary
            # exceptions -- then make up something
        except Exception:
            return '<%s instance at %#x>' % (x.__class__.__name__, id(x))
        if len(s) > self.maxother:
            i = max(0, (self.maxother-3)//2)
            j = max(0, self.maxother-3-i)
            s = s[:i] + self.fillvalue + s[len(s)-j:]
        return s


def _possibly_sorted(x):
    # Since not all sequences of items can be sorted and comparison
    # functions may raise arbitrary exceptions, return an unsorted
    # sequence in that case.
    try:
        return sorted(x)
    except Exception:
        return list(x)

aRepr = Repr()
repr = aRepr.repr

Directory Contents

Dirs: 31 × Files: 169

Name Size Perms Modified Actions
asyncio DIR
- drwxr-xr-x 2026-02-07 06:05:43
Edit Download
- drwxr-xr-x 2026-02-07 06:05:14
Edit Download
- drwxr-xr-x 2026-02-07 06:05:44
Edit Download
- drwxr-xr-x 2026-02-07 06:05:10
Edit Download
ctypes DIR
- drwxr-xr-x 2026-02-07 06:05:40
Edit Download
curses DIR
- drwxr-xr-x 2026-02-07 06:05:40
Edit Download
dbm DIR
- drwxr-xr-x 2026-02-07 06:05:44
Edit Download
email DIR
- drwxr-xr-x 2026-02-07 06:05:42
Edit Download
encodings DIR
- drwxr-xr-x 2026-02-07 06:05:14
Edit Download
html DIR
- drwxr-xr-x 2026-02-07 06:05:44
Edit Download
http DIR
- drwxr-xr-x 2026-02-07 06:05:44
Edit Download
importlib DIR
- drwxr-xr-x 2026-02-07 06:05:14
Edit Download
json DIR
- drwxr-xr-x 2026-02-07 06:05:44
Edit Download
- drwxr-xr-x 2026-02-07 06:05:12
Edit Download
logging DIR
- drwxr-xr-x 2026-02-07 06:05:14
Edit Download
- drwxr-xr-x 2026-02-07 06:05:44
Edit Download
- drwxr-xr-x 2026-02-07 06:05:44
Edit Download
re DIR
- drwxr-xr-x 2026-02-07 06:05:14
Edit Download
sqlite3 DIR
- drwxr-xr-x 2026-02-07 06:05:44
Edit Download
test DIR
- drwxr-xr-x 2026-02-07 06:05:44
Edit Download
tomllib DIR
- drwxr-xr-x 2026-02-07 06:05:44
Edit Download
unittest DIR
- drwxr-xr-x 2026-02-07 06:05:44
Edit Download
urllib DIR
- drwxr-xr-x 2026-02-07 06:05:43
Edit Download
venv DIR
- drwxr-xr-x 2026-02-07 06:05:44
Edit Download
wsgiref DIR
- drwxr-xr-x 2026-02-07 06:05:44
Edit Download
xml DIR
- drwxr-xr-x 2026-02-07 06:05:44
Edit Download
xmlrpc DIR
- drwxr-xr-x 2026-02-07 06:05:44
Edit Download
zipfile DIR
- drwxr-xr-x 2026-02-07 06:05:43
Edit Download
zoneinfo DIR
- drwxr-xr-x 2026-02-07 06:05:44
Edit Download
- drwxr-xr-x 2026-02-07 06:05:43
Edit Download
- drwxr-xr-x 2026-02-07 06:05:44
Edit Download
6.38 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
33.41 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
500 B lrw-r--r-- 2026-01-22 20:57:42
Edit Download
99.37 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
62.75 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
20.12 KB lrwxr-xr-x 2026-01-22 20:57:42
Edit Download
31.70 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
3.34 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
11.57 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
24.82 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
33.61 KB lrwxr-xr-x 2026-01-22 20:57:42
Edit Download
12.13 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
5.37 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
14.52 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
10.44 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
36.01 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
5.77 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
3.97 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
20.12 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
52.53 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
26.99 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
129 B lrw-r--r-- 2026-01-22 20:57:42
Edit Download
8.21 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
7.44 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
6.40 KB lrwxr-xr-x 2026-01-22 20:57:42
Edit Download
3.82 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
16.00 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
60.31 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
268 B lrw-r--r-- 2026-01-22 20:57:42
Edit Download
320 B lrw-r--r-- 2026-01-22 20:57:42
Edit Download
81.36 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
29.50 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
103.98 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
79.72 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
645 B lrw-r--r-- 2026-01-22 20:57:42
Edit Download
9.95 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
15.35 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
5.86 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
37.17 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
33.92 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
37.23 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
5.44 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
7.31 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
5.85 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
21.24 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
8.53 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
9.43 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
24.28 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
9.13 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
22.48 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
7.54 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
52.59 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
4.29 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
122.48 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
3.50 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
76.46 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
1.05 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
13.61 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
5.52 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
76.72 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
12.97 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
77.06 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
9.11 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
22.35 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
23.14 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
6.76 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
40.12 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
29.32 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
2.82 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
11.20 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
12.87 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
10.71 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
58.95 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
38.85 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
49.95 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
67.83 KB lrwxr-xr-x 2026-01-22 20:57:42
Edit Download
63.38 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
91.66 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
8.77 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
17.85 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
42.32 KB lrwxr-xr-x 2026-01-22 20:57:42
Edit Download
27.91 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
13.95 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
17.21 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
23.59 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
22.55 KB lrwxr-xr-x 2026-01-22 20:57:42
Edit Download
28.60 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
5.99 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
11.13 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
110.44 KB lrwxr-xr-x 2026-01-22 20:57:42
Edit Download
7.69 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
11.23 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
7.01 KB lrwxr-xr-x 2026-01-22 20:57:42
Edit Download
33.87 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
6.42 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
7.64 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
12.60 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
6.20 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
1.94 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
19.21 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
8.36 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
13.04 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
56.76 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
2.44 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
23.34 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
155 B lrw-r--r-- 2024-04-10 05:33:47
Edit Download
42.51 KB lrwxr-xr-x 2026-01-22 20:57:42
Edit Download
7.27 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
36.53 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
27.20 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
231 B lrw-r--r-- 2026-01-22 20:57:42
Edit Download
232 B lrw-r--r-- 2026-01-22 20:57:42
Edit Download
229 B lrw-r--r-- 2026-01-22 20:57:42
Edit Download
49.63 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
5.36 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
49.05 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
11.51 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
12.61 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
257 B lrw-r--r-- 2026-01-22 20:57:42
Edit Download
86.65 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
18.04 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
10.50 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
32.00 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
11.26 KB lrwxr-xr-x 2026-01-22 20:57:42
Edit Download
109.92 KB lrwxr-xr-x 2026-01-22 20:57:42
Edit Download
22.75 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
36.46 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
19.26 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
1003 B lrw-r--r-- 2026-01-22 20:57:42
Edit Download
58.71 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
13.15 KB lrwxr-xr-x 2026-01-22 20:57:42
Edit Download
2.42 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
20.72 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
28.50 KB lrwxr-xr-x 2026-01-22 20:57:42
Edit Download
45.24 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
17.62 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
1.99 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
142.93 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
10.74 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
114.68 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
7.19 KB lrwxr-xr-x 2026-01-22 20:57:42
Edit Download
28.96 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
21.25 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
22.24 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
21.01 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
23.07 KB lrwxr-xr-x 2026-01-22 20:57:42
Edit Download
5.80 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
7.37 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
27.47 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
3.93 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
31.33 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
8.56 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
5.55 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
5.58 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
14.31 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
21.51 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
89.94 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
223.85 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
91.40 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
8.83 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
6.04 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
3.05 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
24.04 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
48.34 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
48.34 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
7.05 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
5.75 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
5.10 KB lrw-r--r-- 2026-01-22 20:57:42
Edit Download
227 B lrw-r--r-- 2026-01-22 20:57:42
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).