Changeset 19
- Timestamp:
- 22/11/07 04:14:01 (14 months ago)
- Files:
-
- 1 modified
-
betterprint/trunk/betterprint.py (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
betterprint/trunk/betterprint.py
r18 r19 6 6 orig_pprint.PrettyPrinter.__init__(self, indent, width, depth, stream) 7 7 self._indent = indent 8 self._colours = { 9 'syntax': '\x1b[0;37m', 10 'key': '\x1b[0;93m', 11 'value': '\x1b[0;38m', 12 } 8 13 9 def orig_pprint(self, object):14 def pprint(self, object): 10 15 self._format(object, self._stream, self._indent, self._depth, {}, 0) 11 self._stream.write( "\n")16 self._stream.write('\n') 12 17 13 18 def pformat(self, object): 14 sio = _StringIO()19 sio = orig_pprint._StringIO() 15 20 self._format(object, sio, self._indent, self._depth, {}, 0) 16 21 return sio.getvalue() 17 22 18 23 def _format(self, object, stream, indent, allowance, context, level): 24 if not allowance: 25 allowance = 0 19 26 level = level + 1 20 27 objid = id(object) 21 28 if objid in context: 29 stream.write(self._colours['value']) 22 30 stream.write(orig_pprint._recursion(object)) 23 31 self._recursive = True … … 28 36 write = stream.write 29 37 30 r = getattr(typ, "__repr__", None)38 r = getattr(typ, '__repr__', None) 31 39 if issubclass(typ, dict) and r is dict.__repr__: 32 40 write('{') 33 write('\n')34 write((indent * level) * ' ')35 41 length = len(object) 36 42 if length: 43 write('\n') 44 write((indent * level) * ' ') 37 45 context[objid] = 1 38 46 items = object.items() … … 40 48 key, ent = items[0] 41 49 rep = self._repr(key, context, level) 50 write(self._colours['key']) 42 51 write(rep) 52 write(self._colours['syntax']) 43 53 write(': ') 44 self._format(ent, stream, indent, allowance + 1, context, level) 45 if 1 or length > 1: 46 for key, ent in items[1:]: 47 rep = self._repr(key, context, level) 48 write(',') 49 write('\n') 50 write(' ' * (indent * level)) 51 write(rep) 52 self._format(ent, stream, indent, allowance + 1, context, level) 54 self._format(ent, stream, indent, allowance + 1, context, \ 55 level) 56 for key, ent in items[1:]: 57 rep = self._repr(key, context, level) 58 write(self._colours['syntax']) 59 write(',') 60 write('\n') 61 write(' ' * (indent * level)) 62 write(self._colours['key']) 63 write(rep) 64 write(self._colours['syntax']) 65 write(': ') 66 self._format(ent, stream, indent, allowance + 1, \ 67 context, level) 53 68 del context[objid] 54 write(',') 55 write('\n') 56 write(' ' * (indent * (level - 1))) 69 write(self._colours['syntax']) 70 write(',') 71 write('\n') 72 write(' ' * (indent * (level - 1))) 73 write(self._colours['syntax']) 57 74 write('}') 58 75 return 59 76 60 77 if (issubclass(typ, list) and r is list.__repr__) or \ 61 (issubclass(typ, tuple) and r is tuple.__repr__): 78 (issubclass(typ, tuple) and r is tuple.__repr__): 79 write(self._colours['syntax']) 62 80 if issubclass(typ, list): 63 81 write('[') 64 endchar = ']'82 endchar = self._colours['syntax'] + ']' 65 83 else: 66 84 write('(') 67 endchar = ')' 68 write('\n') 69 write(' ' * (indent * level)) 85 endchar = self._colours['syntax'] + ')' 70 86 length = len(object) 71 87 if length: 88 write('\n') 89 write(' ' * (indent * level)) 72 90 context[objid] = 1 73 self._format(object[0], stream, indent, allowance + 1, context, level) 74 if length > 1: 75 for ent in object[1:]: 76 write(',') 77 write('\n') 78 write(' ' * (indent * level)) 79 self._format(ent, stream, indent, allowance + 1, context, level) 91 self._format(object[0], stream, indent, allowance + 1, \ 92 context, level) 93 for ent in object[1:]: 94 write(self._colours['syntax']) 95 write(',') 96 write('\n') 97 write(' ' * (indent * level)) 98 self._format(ent, stream, indent, allowance + 1, \ 99 context, level) 80 100 del context[objid] 81 #if issubclass(typ, tuple) and length == 1:82 write(',')83 write('\n')84 write(' ' * (indent * (level - 1)))101 write(self._colours['syntax']) 102 write(',') 103 write('\n') 104 write(' ' * (indent * (level - 1))) 85 105 write(endchar) 86 106 return 87 107 108 write(self._colours['value']) 88 109 write(rep) 89 110 … … 92 113 printer = MyPrettyPrinter( 93 114 stream=stream, indent=indent, width=width, depth=depth) 94 printer. orig_pprint(object)115 printer.pprint(object) 95 116 96 117 def __pformat(object, indent=4, width=80, depth=None): 97 118 """Format a Python object into a pretty-printed representation.""" 98 return MyPrettyPrinter(indent=indent, width=width, depth=depth).pformat(object) 119 printer = MyPrettyPrinter(indent=indent, width=width, depth=depth) 120 return printer.pformat(object) 99 121 100 122 orig_pprint.orig_pprint = __pprint 101 orig_pprint. pformat = __pformat123 orig_pprint.orig_pformat = __pformat 102 124 103 125 pprint = __pprint … … 105 127 106 128 if __name__ == '__main__': 129 130 pprint([1, 2, 3, 4]) 131 pprint({ 132 1: 'a', 133 2: 'b', 134 3: 'c', 135 4: 'd', 136 }) 137 pprint({ 138 1: {}, 139 2: {}, 140 3: {}, 141 4: {}, 142 }) 143 pprint({ 144 1: {1: {}}, 145 2: {2: {}}, 146 3: {3: {}}, 147 4: {4: {}}, 148 }) 149 pprint({ 150 1: [], 151 2: [], 152 3: [], 153 4: [], 154 }) 155 pprint({ 156 'a': [], 157 'b': [], 158 'c': [], 159 'd': [], 160 }) 161 pprint({ 162 1: [[]], 163 2: [[]], 164 3: [[]], 165 4: [[]], 166 }) 167 pprint({ 168 1: (), 169 2: (), 170 3: (), 171 4: (), 172 }) 173 107 174 a = {} 108 175 a[0] = a 109 pprint .pprint(176 pprint( 110 177 [ 178 [ 1, 2, 3 ], 179 [ 2, 3, 4], 111 180 a, 112 181 'list', … … 118 187 'wow', 119 188 {'lots': {'of': {'depth': {'goes': 'here'}}}} 120 ] 121 ,depth=2189 ], 190 depth=2, 122 191 ) 123 192