@@ -176,11 +176,19 @@ def setlast(self, key, value):
176176 prior = super (_OMD , self ).__getitem__ (key )
177177 prior [- 1 ] = value
178178
179+ def get (self , key , default = None ):
180+ return super (_OMD , self ).get (key , [default ])[- 1 ]
181+
179182 def getall (self , key ):
180183 return super (_OMD , self ).__getitem__ (key )
181184
185+ def items (self ):
186+ """List of (key, last value for key)."""
187+ return [(k , self [k ]) for k in self ]
188+
182189 def items_all (self ):
183- return [(k , self .get (k )) for k in self ]
190+ """List of (key, list of values for key)."""
191+ return [(k , self .getall (k )) for k in self ]
184192
185193
186194class GitConfigParser (with_metaclass (MetaParserBuilder , cp .RawConfigParser , object )):
@@ -481,14 +489,9 @@ def _write(self, fp):
481489 git compatible format"""
482490 def write_section (name , section_dict ):
483491 fp .write (("[%s]\n " % name ).encode (defenc ))
484- for (key , value ) in section_dict .items_all ():
492+ for (key , values ) in section_dict .items_all ():
485493 if key == "__name__" :
486494 continue
487- elif isinstance (value , list ):
488- values = value
489- else :
490- # self._defaults isn't a multidict
491- values = [value ]
492495
493496 for v in values :
494497 fp .write (("\t %s = %s\n " % (key , self ._value_to_string (v ).replace ('\n ' , '\n \t ' ))).encode (defenc ))
@@ -506,25 +509,19 @@ def items(self, section_name):
506509
507510 def items_all (self , section_name ):
508511 """:return: list((option, [values...]), ...) pairs of all items in the given section"""
509- rv = OrderedDict ()
510- for k , v in self ._defaults :
511- rv [k ] = [v ]
512+ rv = _OMD (self ._defaults )
512513
513- for k , v in self ._sections [section_name ].items_all ():
514+ for k , vs in self ._sections [section_name ].items_all ():
514515 if k == '__name__' :
515516 continue
516517
517- if k not in rv :
518- rv [k ] = v
519- continue
520-
521- if rv [k ] == v :
518+ if k in rv and rv .getall (k ) == vs :
522519 continue
523520
524- rv [k ].extend (v )
521+ for v in vs :
522+ rv .add (k , v )
525523
526- # For consistency with items(), return a list, even in Python 3
527- return list (rv .items ())
524+ return rv .items_all ()
528525
529526 @needs_values
530527 def write (self ):
0 commit comments