@@ -38,7 +38,7 @@ class Repr:
3838 def __init__ (
3939 self , * , maxlevel = 6 , maxtuple = 6 , maxlist = 6 , maxarray = 5 , maxdict = 4 ,
4040 maxset = 6 , maxfrozenset = 6 , maxdeque = 6 , maxstring = 30 , maxlong = 40 ,
41- maxother = 30 , fillvalue = '...' ,
41+ maxother = 30 , fillvalue = '...' , indent = None ,
4242 ):
4343 self .maxlevel = maxlevel
4444 self .maxtuple = maxtuple
@@ -52,6 +52,7 @@ def __init__(
5252 self .maxlong = maxlong
5353 self .maxother = maxother
5454 self .fillvalue = fillvalue
55+ self .indent = indent
5556
5657 def repr (self , x ):
5758 return self .repr1 (x , self .maxlevel )
@@ -66,6 +67,26 @@ def repr1(self, x, level):
6667 else :
6768 return self .repr_instance (x , level )
6869
70+ def _join (self , pieces , level ):
71+ if self .indent is None :
72+ return ', ' .join (pieces )
73+ if not pieces :
74+ return ''
75+ indent = self .indent
76+ if isinstance (indent , int ):
77+ if indent < 0 :
78+ raise ValueError (
79+ f'Repr.indent cannot be negative int (was { indent !r} )'
80+ )
81+ indent *= ' '
82+ try :
83+ sep = ',\n ' + (self .maxlevel - level + 1 ) * indent
84+ except TypeError as error :
85+ raise TypeError (
86+ f'Repr.indent must be a str, int or None, not { type (indent )} '
87+ ) from error
88+ return sep .join (('' , * pieces , '' ))[1 :- len (indent ) or None ]
89+
6990 def _repr_iterable (self , x , level , left , right , maxiter , trail = '' ):
7091 n = len (x )
7192 if level <= 0 and n :
@@ -76,8 +97,8 @@ def _repr_iterable(self, x, level, left, right, maxiter, trail=''):
7697 pieces = [repr1 (elem , newlevel ) for elem in islice (x , maxiter )]
7798 if n > maxiter :
7899 pieces .append (self .fillvalue )
79- s = ', ' . join (pieces )
80- if n == 1 and trail :
100+ s = self . _join (pieces , level )
101+ if n == 1 and trail and self . indent is None :
81102 right = trail + right
82103 return '%s%s%s' % (left , s , right )
83104
@@ -124,7 +145,7 @@ def repr_dict(self, x, level):
124145 pieces .append ('%s: %s' % (keyrepr , valrepr ))
125146 if n > self .maxdict :
126147 pieces .append (self .fillvalue )
127- s = ', ' . join (pieces )
148+ s = self . _join (pieces , level )
128149 return '{%s}' % (s ,)
129150
130151 def repr_str (self , x , level ):
0 commit comments