@@ -663,6 +663,7 @@ def __init__(self, defaults=None, dict_type=_default_dict,
663663 full = tuple (comment_prefixes or ()),
664664 inline = tuple (inline_comment_prefixes or ()),
665665 )
666+ self ._loaded_sources = []
666667 self ._strict = strict
667668 self ._allow_no_value = allow_no_value
668669 self ._empty_lines_in_values = empty_lines_in_values
@@ -682,7 +683,7 @@ def __init__(self, defaults=None, dict_type=_default_dict,
682683 if defaults :
683684 self ._read_defaults (defaults )
684685 self ._allow_unnamed_section = allow_unnamed_section
685- self . _loaded_files = []
686+
686687
687688 def defaults (self ):
688689 return self ._defaults
@@ -746,12 +747,13 @@ def read(self, filenames, encoding=None):
746747 try :
747748 with open (filename , encoding = encoding ) as fp :
748749 self ._read (fp , filename )
750+ self ._loaded_sources .append (filename )
749751 except OSError :
750752 continue
751753 if isinstance (filename , os .PathLike ):
752754 filename = os .fspath (filename )
753755 read_ok .append (filename )
754- self . _loaded_files . extend ( read_ok )
756+
755757 return read_ok
756758
757759 def read_file (self , f , source = None ):
@@ -768,11 +770,13 @@ def read_file(self, f, source=None):
768770 except AttributeError :
769771 source = '<???>'
770772 self ._read (f , source )
773+ self ._loaded_sources .append (source )
771774
772775 def read_string (self , string , source = '<string>' ):
773776 """Read configuration from a given string."""
774777 sfile = io .StringIO (string )
775778 self .read_file (sfile , source )
779+ self ._loaded_sources .append (source )
776780
777781 def read_dict (self , dictionary , source = '<dict>' ):
778782 """Read configuration from a dictionary.
@@ -804,6 +808,8 @@ def read_dict(self, dictionary, source='<dict>'):
804808 raise DuplicateOptionError (section , key , source )
805809 elements_added .add ((section , key ))
806810 self .set (section , key , value )
811+ self ._loaded_sources .append (source )
812+
807813
808814 def get (self , section , option , * , raw = False , vars = None , fallback = _UNSET ):
809815 """Get an option value for a given section.
@@ -1061,12 +1067,15 @@ def __repr__(self):
10611067 "interpolation" : type (self ._interpolation ).__name__ ,
10621068 }
10631069 init_params = {k : v for k , v in init_params .items () if v is not None }
1064-
10651070 state_summary = {
1066- "loaded_files" : self ._loaded_files if hasattr (self , '_loaded_files' ) else "(no files loaded)" ,
1067- "sections" : len (self ._sections ),
1071+ "loaded_sources" : self ._loaded_sources ,
1072+ "sections_count" : len (self ._sections ),
1073+ "sections" : list (self ._sections .keys ())[:5 ], # Limit to 5 section names for readability
10681074 }
10691075
1076+ if len (self ._sections ) > 5 :
1077+ state_summary ["sections_truncated" ] = f"...and { len (self ._sections ) - 5 } more"
1078+
10701079 return (f"<{ self .__class__ .__name__ } ("
10711080 f"params={ init_params } , "
10721081 f"state={ state_summary } )>" )
0 commit comments