@ -58,25 +58,25 @@ class _ProjectConfigParser(ConfigParser.SafeConfigParser):
>> > config = _ProjectConfigParser ( " zzz " )
>> > config . readfp ( StringIO ( sample_config ) )
>> > config . get ( " alias " , " enemies " )
' Evil <evil@example.com> '
u ' Evil <evil@example.com> '
# Check to make sure that alias gets overridden by project.
>> > config = _ProjectConfigParser ( " sm " )
>> > config . readfp ( StringIO ( sample_config ) )
>> > config . get ( " alias " , " enemies " )
' Green G. <ugly@example.com> '
u ' Green G. <ugly@example.com> '
# Check to make sure that settings get merged with project.
>> > config = _ProjectConfigParser ( " linux " )
>> > config . readfp ( StringIO ( sample_config ) )
>> > sorted ( config . items ( " settings " ) )
[ ( ' am_hero ' , ' True ' ) , ( ' process_tags ' , ' False ' ) ]
[ ( u ' am_hero ' , u ' True ' ) , ( u ' process_tags ' , u ' False ' ) ]
# Check to make sure that settings works with unknown project.
>> > config = _ProjectConfigParser ( " unknown " )
>> > config . readfp ( StringIO ( sample_config ) )
>> > sorted ( config . items ( " settings " ) )
[ ( ' am_hero ' , ' True ' ) ]
[ ( u ' am_hero ' , u ' True ' ) ]
"""
def __init__ ( self , project_name ) :
""" Construct _ProjectConfigParser.
@ -99,6 +99,17 @@ class _ProjectConfigParser(ConfigParser.SafeConfigParser):
for setting_name , setting_value in project_defaults . items ( ) :
self . set ( project_settings , setting_name , setting_value )
def _to_unicode ( self , val ) :
""" Make sure a value is of type ' unicode '
Args :
val : string or unicode object
Returns :
unicode version of val
"""
return val if isinstance ( val , unicode ) else val . decode ( ' utf-8 ' )
def get ( self , section , option , * args , * * kwargs ) :
""" Extend SafeConfigParser to try project_section before section.
@ -108,14 +119,15 @@ class _ProjectConfigParser(ConfigParser.SafeConfigParser):
See SafeConfigParser .
"""
try :
return ConfigParser . SafeConfigParser . get (
val = ConfigParser . SafeConfigParser . get (
self , " %s _ %s " % ( self . _project_name , section ) , option ,
* args , * * kwargs
)
except ( ConfigParser . NoSectionError , ConfigParser . NoOptionError ) :
return ConfigParser . SafeConfigParser . get (
val = ConfigParser . SafeConfigParser . get (
self , section , option , * args , * * kwargs
)
return self . _to_unicode ( val )
def items ( self , section , * args , * * kwargs ) :
""" Extend SafeConfigParser to add project_section to section.
@ -150,7 +162,8 @@ class _ProjectConfigParser(ConfigParser.SafeConfigParser):
item_dict = dict ( top_items )
item_dict . update ( project_items )
return item_dict . items ( )
return { ( self . _to_unicode ( item ) , self . _to_unicode ( val ) )
for item , val in item_dict . iteritems ( ) }
def ReadGitAliases ( fname ) :
""" Read a git alias file. This is in the form used by git: