@@ -186,6 +186,7 @@ class LogWrap:
186
186
"__log_traceback" ,
187
187
"__logger" ,
188
188
"__max_indent" ,
189
+ "__max_iter" ,
189
190
)
190
191
191
192
def __init__ (
@@ -194,6 +195,7 @@ def __init__(
194
195
log_level : int = DEBUG ,
195
196
exc_level : int = ERROR ,
196
197
max_indent : int = 20 ,
198
+ max_iter : int = 0 ,
197
199
blacklisted_names : Iterable [str ] | None = None ,
198
200
blacklisted_exceptions : Iterable [type [Exception ]] | None = None ,
199
201
log_call_args : bool = True ,
@@ -211,6 +213,8 @@ def __init__(
211
213
:type exc_level: int
212
214
:param max_indent: maximum indent before classic `repr()` call.
213
215
:type max_indent: int
216
+ :param max_iter: maximum number of elements in iterable before ellipsis.
217
+ :type max_iter: int
214
218
:param blacklisted_names: Blacklisted argument names. Arguments with this names will be skipped in log.
215
219
:type blacklisted_names: Iterable[str] | None
216
220
:param blacklisted_exceptions: list of exception, which should be re-raised
@@ -229,6 +233,7 @@ def __init__(
229
233
.. versionchanged:: 5.1.0 log_traceback parameter
230
234
.. versionchanged:: 8.0.0 pick up logger from target module if possible
231
235
.. versionchanged:: 9.0.0 Only LogWrap instance act as decorator
236
+ .. versionchanged:: 12.0.0 max_iter parameter
232
237
"""
233
238
# Typing fix:
234
239
if blacklisted_names is None :
@@ -248,6 +253,7 @@ def __init__(
248
253
self .__log_level : int = log_level
249
254
self .__exc_level : int = exc_level
250
255
self .__max_indent : int = max_indent
256
+ self .__max_iter : int = max_iter
251
257
self .__log_call_args : bool = log_call_args
252
258
self .__log_call_args_on_exc : bool = log_call_args_on_exc
253
259
self .__log_traceback : bool = log_traceback
@@ -336,6 +342,27 @@ def max_indent(self, val: int) -> None:
336
342
raise TypeError (f"Unexpected type: { val .__class__ .__name__ } . Should be { int .__name__ } ." )
337
343
self .__max_indent = val
338
344
345
+ @property
346
+ def max_iter (self ) -> int :
347
+ """Maximum number of elements in iterable before ellipsis.
348
+
349
+ :return: maximum number of elements in iterable before ellipsis
350
+ :rtype: int
351
+ """
352
+ return self .__max_iter
353
+
354
+ @max_iter .setter
355
+ def max_iter (self , val : int ) -> None :
356
+ """Maximum number of elements in iterable before ellipsis.
357
+
358
+ :param val: maximum number of elements in iterable before ellipsis
359
+ :type val: int
360
+ :raises TypeError: max_iter is not integer
361
+ """
362
+ if not isinstance (val , int ):
363
+ raise TypeError (f"Unexpected type: { val .__class__ .__name__ } . Should be { int .__name__ } ." )
364
+ self .__max_iter = val
365
+
339
366
@property
340
367
def blacklisted_names (self ) -> list [str ]:
341
368
"""List of arguments names to ignore in log.
@@ -459,6 +486,7 @@ def __repr__(self) -> str:
459
486
f"log_level={ self .log_level } , "
460
487
f"exc_level={ self .exc_level } , "
461
488
f"max_indent={ self .max_indent } , "
489
+ f"max_iter={ self .max_iter } , "
462
490
f"blacklisted_names={ self .blacklisted_names } , "
463
491
f"blacklisted_exceptions={ self .blacklisted_exceptions } , "
464
492
f"log_call_args={ self .log_call_args } , "
@@ -519,6 +547,7 @@ def _safe_val_repr(self, value: Any) -> str:
519
547
indent = INDENT ,
520
548
no_indent_start = True ,
521
549
max_indent = self .max_indent ,
550
+ max_iter = self .max_iter ,
522
551
)
523
552
except Exception as exc :
524
553
base_name : str = getattr (value , "name" , getattr (value , "__name__" , value .__class__ .__name__ ))
@@ -610,7 +639,9 @@ def _make_done_record(
610
639
msg : str = f"Done: { func_name !r} "
611
640
612
641
if self .log_result_obj :
613
- msg += f" with result:\n { repr_utils .pretty_repr (result , max_indent = self .max_indent )} "
642
+ msg += (
643
+ f" with result:\n { repr_utils .pretty_repr (result , max_indent = self .max_indent , max_iter = self .max_iter )} "
644
+ )
614
645
logger .log (level = self .log_level , msg = msg )
615
646
616
647
def _make_calling_record (
@@ -743,6 +774,7 @@ def logwrap(
743
774
log_level : int = DEBUG ,
744
775
exc_level : int = ERROR ,
745
776
max_indent : int = 20 ,
777
+ max_iter : int = 20 ,
746
778
blacklisted_names : Iterable [str ] | None = None ,
747
779
blacklisted_exceptions : Iterable [type [Exception ]] | None = None ,
748
780
log_call_args : bool = True ,
@@ -762,6 +794,7 @@ def logwrap(
762
794
log_level : int = DEBUG ,
763
795
exc_level : int = ERROR ,
764
796
max_indent : int = 20 ,
797
+ max_iter : int = 20 ,
765
798
blacklisted_names : Iterable [str ] | None = None ,
766
799
blacklisted_exceptions : Iterable [type [Exception ]] | None = None ,
767
800
log_call_args : bool = True ,
@@ -781,6 +814,7 @@ def logwrap(
781
814
log_level : int = DEBUG ,
782
815
exc_level : int = ERROR ,
783
816
max_indent : int = 20 ,
817
+ max_iter : int = 0 ,
784
818
blacklisted_names : Iterable [str ] | None = None ,
785
819
blacklisted_exceptions : Iterable [type [Exception ]] | None = None ,
786
820
log_call_args : bool = True ,
@@ -799,6 +833,7 @@ def logwrap(
799
833
log_level : int = DEBUG ,
800
834
exc_level : int = ERROR ,
801
835
max_indent : int = 20 ,
836
+ max_iter : int = 0 ,
802
837
blacklisted_names : Iterable [str ] | None = None ,
803
838
blacklisted_exceptions : Iterable [type [Exception ]] | None = None ,
804
839
log_call_args : bool = True ,
@@ -818,6 +853,8 @@ def logwrap(
818
853
:type exc_level: int
819
854
:param max_indent: maximum indent before classic `repr()` call.
820
855
:type max_indent: int
856
+ :param max_iter: maximum number of elements to log from iterables.
857
+ :type max_iter: int
821
858
:param blacklisted_names: Blacklisted argument names. Arguments with this names will be skipped in log.
822
859
:type blacklisted_names: Iterable[str] | None
823
860
:param blacklisted_exceptions: list of exceptions, which should be re-raised
@@ -840,12 +877,14 @@ def logwrap(
840
877
.. versionchanged:: 5.1.0 log_traceback parameter
841
878
.. versionchanged:: 8.0.0 pick up logger from target module if possible
842
879
.. versionchanged:: 9.0.0 Only LogWrap instance act as decorator
880
+ .. versionchanged:: 12.0.0 max_iter parameter
843
881
"""
844
882
wrapper = LogWrap (
845
883
log = log ,
846
884
log_level = log_level ,
847
885
exc_level = exc_level ,
848
886
max_indent = max_indent ,
887
+ max_iter = max_iter ,
849
888
blacklisted_names = blacklisted_names ,
850
889
blacklisted_exceptions = blacklisted_exceptions ,
851
890
log_call_args = log_call_args ,
0 commit comments