2323 string_types ,
2424 FileType ,
2525 defenc ,
26+ force_text ,
2627 with_metaclass ,
2728 PY3
2829)
@@ -412,7 +413,7 @@ def write_section(name, section_dict):
412413 fp .write (("[%s]\n " % name ).encode (defenc ))
413414 for (key , value ) in section_dict .items ():
414415 if key != "__name__" :
415- fp .write (("\t %s = %s\n " % (key , str (value ).replace ('\n ' , '\n \t ' ))).encode (defenc ))
416+ fp .write (("\t %s = %s\n " % (key , self . _value_to_string (value ).replace ('\n ' , '\n \t ' ))).encode (defenc ))
416417 # END if key is not __name__
417418 # END section writing
418419
@@ -529,6 +530,11 @@ def get_value(self, section, option, default=None):
529530
530531 return valuestr
531532
533+ def _value_to_string (self , value ):
534+ if isinstance (value , (int , float , bool )):
535+ return str (value )
536+ return force_text (value )
537+
532538 @needs_values
533539 @set_dirty_and_flush_changes
534540 def set_value (self , section , option , value ):
@@ -543,7 +549,7 @@ def set_value(self, section, option, value):
543549 to a string"""
544550 if not self .has_section (section ):
545551 self .add_section (section )
546- self .set (section , option , str (value ))
552+ self .set (section , option , self . _value_to_string (value ))
547553
548554 def rename_section (self , section , new_name ):
549555 """rename the given section to new_name
@@ -558,7 +564,7 @@ def rename_section(self, section, new_name):
558564
559565 super (GitConfigParser , self ).add_section (new_name )
560566 for k , v in self .items (section ):
561- self .set (new_name , k , str (v ))
567+ self .set (new_name , k , self . _value_to_string (v ))
562568 # end for each value to copy
563569
564570 # This call writes back the changes, which is why we don't have the respective decorator
0 commit comments