]> git.proxmox.com Git - mirror_edk2.git/blame - AppPkg/Applications/Python/Python-2.7.2/Lib/repr.py
EmbeddedPkg: Extend NvVarStoreFormattedLib LIBRARY_CLASS
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.2 / Lib / repr.py
CommitLineData
4710c53d 1"""Redo the builtin repr() (representation) but with limits on most sizes."""\r
2\r
3__all__ = ["Repr","repr"]\r
4\r
5import __builtin__\r
6from itertools import islice\r
7\r
8class Repr:\r
9\r
10 def __init__(self):\r
11 self.maxlevel = 6\r
12 self.maxtuple = 6\r
13 self.maxlist = 6\r
14 self.maxarray = 5\r
15 self.maxdict = 4\r
16 self.maxset = 6\r
17 self.maxfrozenset = 6\r
18 self.maxdeque = 6\r
19 self.maxstring = 30\r
20 self.maxlong = 40\r
21 self.maxother = 20\r
22\r
23 def repr(self, x):\r
24 return self.repr1(x, self.maxlevel)\r
25\r
26 def repr1(self, x, level):\r
27 typename = type(x).__name__\r
28 if ' ' in typename:\r
29 parts = typename.split()\r
30 typename = '_'.join(parts)\r
31 if hasattr(self, 'repr_' + typename):\r
32 return getattr(self, 'repr_' + typename)(x, level)\r
33 else:\r
34 s = __builtin__.repr(x)\r
35 if len(s) > self.maxother:\r
36 i = max(0, (self.maxother-3)//2)\r
37 j = max(0, self.maxother-3-i)\r
38 s = s[:i] + '...' + s[len(s)-j:]\r
39 return s\r
40\r
41 def _repr_iterable(self, x, level, left, right, maxiter, trail=''):\r
42 n = len(x)\r
43 if level <= 0 and n:\r
44 s = '...'\r
45 else:\r
46 newlevel = level - 1\r
47 repr1 = self.repr1\r
48 pieces = [repr1(elem, newlevel) for elem in islice(x, maxiter)]\r
49 if n > maxiter: pieces.append('...')\r
50 s = ', '.join(pieces)\r
51 if n == 1 and trail: right = trail + right\r
52 return '%s%s%s' % (left, s, right)\r
53\r
54 def repr_tuple(self, x, level):\r
55 return self._repr_iterable(x, level, '(', ')', self.maxtuple, ',')\r
56\r
57 def repr_list(self, x, level):\r
58 return self._repr_iterable(x, level, '[', ']', self.maxlist)\r
59\r
60 def repr_array(self, x, level):\r
61 header = "array('%s', [" % x.typecode\r
62 return self._repr_iterable(x, level, header, '])', self.maxarray)\r
63\r
64 def repr_set(self, x, level):\r
65 x = _possibly_sorted(x)\r
66 return self._repr_iterable(x, level, 'set([', '])', self.maxset)\r
67\r
68 def repr_frozenset(self, x, level):\r
69 x = _possibly_sorted(x)\r
70 return self._repr_iterable(x, level, 'frozenset([', '])',\r
71 self.maxfrozenset)\r
72\r
73 def repr_deque(self, x, level):\r
74 return self._repr_iterable(x, level, 'deque([', '])', self.maxdeque)\r
75\r
76 def repr_dict(self, x, level):\r
77 n = len(x)\r
78 if n == 0: return '{}'\r
79 if level <= 0: return '{...}'\r
80 newlevel = level - 1\r
81 repr1 = self.repr1\r
82 pieces = []\r
83 for key in islice(_possibly_sorted(x), self.maxdict):\r
84 keyrepr = repr1(key, newlevel)\r
85 valrepr = repr1(x[key], newlevel)\r
86 pieces.append('%s: %s' % (keyrepr, valrepr))\r
87 if n > self.maxdict: pieces.append('...')\r
88 s = ', '.join(pieces)\r
89 return '{%s}' % (s,)\r
90\r
91 def repr_str(self, x, level):\r
92 s = __builtin__.repr(x[:self.maxstring])\r
93 if len(s) > self.maxstring:\r
94 i = max(0, (self.maxstring-3)//2)\r
95 j = max(0, self.maxstring-3-i)\r
96 s = __builtin__.repr(x[:i] + x[len(x)-j:])\r
97 s = s[:i] + '...' + s[len(s)-j:]\r
98 return s\r
99\r
100 def repr_long(self, x, level):\r
101 s = __builtin__.repr(x) # XXX Hope this isn't too slow...\r
102 if len(s) > self.maxlong:\r
103 i = max(0, (self.maxlong-3)//2)\r
104 j = max(0, self.maxlong-3-i)\r
105 s = s[:i] + '...' + s[len(s)-j:]\r
106 return s\r
107\r
108 def repr_instance(self, x, level):\r
109 try:\r
110 s = __builtin__.repr(x)\r
111 # Bugs in x.__repr__() can cause arbitrary\r
112 # exceptions -- then make up something\r
113 except Exception:\r
114 return '<%s instance at %x>' % (x.__class__.__name__, id(x))\r
115 if len(s) > self.maxstring:\r
116 i = max(0, (self.maxstring-3)//2)\r
117 j = max(0, self.maxstring-3-i)\r
118 s = s[:i] + '...' + s[len(s)-j:]\r
119 return s\r
120\r
121\r
122def _possibly_sorted(x):\r
123 # Since not all sequences of items can be sorted and comparison\r
124 # functions may raise arbitrary exceptions, return an unsorted\r
125 # sequence in that case.\r
126 try:\r
127 return sorted(x)\r
128 except Exception:\r
129 return list(x)\r
130\r
131aRepr = Repr()\r
132repr = aRepr.repr\r