Skip to content

Commit 2f8bc9a

Browse files
committed
add OrderedDict and frozenset support
1 parent ca9b0f5 commit 2f8bc9a

File tree

2 files changed

+35
-6
lines changed

2 files changed

+35
-6
lines changed

devtools/prettier.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
PARENTHESES_LOOKUP = [
1818
(list, '[', ']'),
1919
(set, '{', '}'),
20+
(frozenset, 'frozenset({', '})'),
2021
]
2122
__all__ = ['PrettyFormat', 'pformat', 'pprint']
2223

@@ -37,9 +38,9 @@ def __init__(self,
3738
self._width = width
3839
self._type_lookup = [
3940
(dict, self._format_dict),
40-
((tuple, list, set), self._format_list_like),
4141
(str, self._format_str),
4242
(bytes, self._format_bytes),
43+
((tuple, list, set, frozenset), self._format_list_like),
4344
(collections.Generator, self._format_generators),
4445
]
4546

@@ -68,13 +69,18 @@ def _format(self, value: Any, indent_current: int, indent_first: bool):
6869
self._format_raw(value, value_repr, indent_current, indent_new)
6970

7071
def _format_dict(self, value: dict, value_repr: str, indent_current: int, indent_new: int):
71-
self._stream.write('{\n')
72+
open_, before_, split_, after_, close_ = '{\n', indent_new * self._c, ': ', ',\n', '}'
73+
if isinstance(value, collections.OrderedDict):
74+
open_, split_, after_, close_ = 'OrderedDict([\n', ', ', '),\n', '])'
75+
before_ += '('
76+
self._stream.write(open_)
7277
for k, v in value.items():
73-
self._format(k, indent_new, True)
74-
self._stream.write(': ')
78+
self._stream.write(before_)
79+
self._format(k, indent_new, False)
80+
self._stream.write(split_)
7581
self._format(v, indent_new, False)
76-
self._stream.write(',\n')
77-
self._stream.write(indent_current * self._c + '}')
82+
self._stream.write(after_)
83+
self._stream.write(indent_current * self._c + close_)
7884

7985
def _format_list_like(self, value: Union[list, tuple, set], value_repr: str, indent_current: int, indent_new: int):
8086
open_, close_ = '(', ')'

tests/test_prettier.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import string
2+
from collections import OrderedDict
23

34
import numpy
45

@@ -135,3 +136,25 @@ def test_indent_numpy_short():
135136
assert v == """{
136137
'numpy test': array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),
137138
}"""
139+
140+
141+
def test_ordered_dict():
142+
v = pformat(OrderedDict([(1, 2), (3, 4), (5, 6)]))
143+
print(v)
144+
assert v == """\
145+
OrderedDict([
146+
(1, 2),
147+
(3, 4),
148+
(5, 6),
149+
])"""
150+
151+
152+
def test_frozenset():
153+
v = pformat(frozenset(range(3)))
154+
print(v)
155+
assert v == """\
156+
frozenset({
157+
0,
158+
1,
159+
2,
160+
})"""

0 commit comments

Comments
 (0)