58 elif isinstance(o, bytearray): |
58 elif isinstance(o, bytearray): |
59 # codecs.escape_encode() can't handle bytearray, so escapestr fails |
59 # codecs.escape_encode() can't handle bytearray, so escapestr fails |
60 # without coercion. |
60 # without coercion. |
61 yield "bytearray['%s']" % escapestr(bytes(o)) |
61 yield "bytearray['%s']" % escapestr(bytes(o)) |
62 elif isinstance(o, list): |
62 elif isinstance(o, list): |
63 yield '[%s]' % (b', '.join(pprint(a, bprefix=bprefix) for a in o)) |
63 if not o: |
|
64 yield '[]' |
|
65 return |
|
66 |
|
67 yield '[' |
|
68 |
|
69 for i, a in enumerate(o): |
|
70 for chunk in pprintgen(a, bprefix=bprefix): |
|
71 yield chunk |
|
72 |
|
73 if i + 1 < len(o): |
|
74 yield ', ' |
|
75 |
|
76 yield ']' |
64 elif isinstance(o, dict): |
77 elif isinstance(o, dict): |
65 yield '{%s}' % (b', '.join( |
78 if not o: |
66 '%s: %s' % (pprint(k, bprefix=bprefix), |
79 yield '{}' |
67 pprint(v, bprefix=bprefix)) |
80 return |
68 for k, v in sorted(o.items()))) |
81 |
|
82 yield '{' |
|
83 |
|
84 for i, (k, v) in enumerate(sorted(o.items())): |
|
85 for chunk in pprintgen(k, bprefix=bprefix): |
|
86 yield chunk |
|
87 |
|
88 yield ': ' |
|
89 |
|
90 for chunk in pprintgen(v, bprefix=bprefix): |
|
91 yield chunk |
|
92 |
|
93 if i + 1 < len(o): |
|
94 yield ', ' |
|
95 |
|
96 yield '}' |
69 elif isinstance(o, set): |
97 elif isinstance(o, set): |
70 yield 'set([%s])' % (b', '.join( |
98 if not o: |
71 pprint(k, bprefix=bprefix) for k in sorted(o))) |
99 yield 'set([])' |
|
100 return |
|
101 |
|
102 yield 'set([' |
|
103 |
|
104 for i, k in enumerate(sorted(o)): |
|
105 for chunk in pprintgen(k, bprefix=bprefix): |
|
106 yield chunk |
|
107 |
|
108 if i + 1 < len(o): |
|
109 yield ', ' |
|
110 |
|
111 yield '])' |
72 elif isinstance(o, tuple): |
112 elif isinstance(o, tuple): |
73 yield '(%s)' % (b', '.join(pprint(a, bprefix=bprefix) for a in o)) |
113 if not o: |
|
114 yield '()' |
|
115 return |
|
116 |
|
117 yield '(' |
|
118 |
|
119 for i, a in enumerate(o): |
|
120 for chunk in pprintgen(a, bprefix=bprefix): |
|
121 yield chunk |
|
122 |
|
123 if i + 1 < len(o): |
|
124 yield ', ' |
|
125 |
|
126 yield ')' |
74 elif isinstance(o, types.GeneratorType): |
127 elif isinstance(o, types.GeneratorType): |
75 yield 'gen[%s]' % (b', '.join(pprint(a, bprefix=bprefix) for a in o)) |
128 # Special case of empty generator. |
|
129 try: |
|
130 nextitem = next(o) |
|
131 except StopIteration: |
|
132 yield 'gen[]' |
|
133 return |
|
134 |
|
135 yield 'gen[' |
|
136 |
|
137 last = False |
|
138 |
|
139 while not last: |
|
140 current = nextitem |
|
141 |
|
142 try: |
|
143 nextitem = next(o) |
|
144 except StopIteration: |
|
145 last = True |
|
146 |
|
147 for chunk in pprintgen(current, bprefix=bprefix): |
|
148 yield chunk |
|
149 |
|
150 if not last: |
|
151 yield ', ' |
|
152 |
|
153 yield ']' |
76 else: |
154 else: |
77 yield pycompat.byterepr(o) |
155 yield pycompat.byterepr(o) |
78 |
156 |
79 def prettyrepr(o): |
157 def prettyrepr(o): |
80 """Pretty print a representation of a possibly-nested object""" |
158 """Pretty print a representation of a possibly-nested object""" |