@@ -176,11 +176,19 @@ def setlast(self, key, value):
176
176
prior = super (_OMD , self ).__getitem__ (key )
177
177
prior [- 1 ] = value
178
178
179
+ def get (self , key , default = None ):
180
+ return super (_OMD , self ).get (key , [default ])[- 1 ]
181
+
179
182
def getall (self , key ):
180
183
return super (_OMD , self ).__getitem__ (key )
181
184
185
+ def items (self ):
186
+ """List of (key, last value for key)."""
187
+ return [(k , self [k ]) for k in self ]
188
+
182
189
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 ]
184
192
185
193
186
194
class GitConfigParser (with_metaclass (MetaParserBuilder , cp .RawConfigParser , object )):
@@ -481,14 +489,9 @@ def _write(self, fp):
481
489
git compatible format"""
482
490
def write_section (name , section_dict ):
483
491
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 ():
485
493
if key == "__name__" :
486
494
continue
487
- elif isinstance (value , list ):
488
- values = value
489
- else :
490
- # self._defaults isn't a multidict
491
- values = [value ]
492
495
493
496
for v in values :
494
497
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):
506
509
507
510
def items_all (self , section_name ):
508
511
""":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 )
512
513
513
- for k , v in self ._sections [section_name ].items_all ():
514
+ for k , vs in self ._sections [section_name ].items_all ():
514
515
if k == '__name__' :
515
516
continue
516
517
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 :
522
519
continue
523
520
524
- rv [k ].extend (v )
521
+ for v in vs :
522
+ rv .add (k , v )
525
523
526
- # For consistency with items(), return a list, even in Python 3
527
- return list (rv .items ())
524
+ return rv .items_all ()
528
525
529
526
@needs_values
530
527
def write (self ):
0 commit comments