@@ -1560,7 +1560,7 @@ def _filename_from_source(self, name, chain=None):
15601560
15611561 trait_spec = self .inputs .trait (name )
15621562 retval = getattr (self .inputs , name )
1563-
1563+ source_ext = None
15641564 if not isdefined (retval ) or "%s" in retval :
15651565 if not trait_spec .name_source :
15661566 return retval
@@ -1589,7 +1589,7 @@ def _filename_from_source(self, name, chain=None):
15891589
15901590 # special treatment for files
15911591 try :
1592- _ , base , _ = split_filename (source )
1592+ _ , base , source_ext = split_filename (source )
15931593 except AttributeError :
15941594 base = source
15951595 else :
@@ -1598,14 +1598,17 @@ def _filename_from_source(self, name, chain=None):
15981598
15991599 chain .append (name )
16001600 base = self ._filename_from_source (ns , chain )
1601+ if isdefined (base ):
1602+ _ , _ , source_ext = split_filename (base )
16011603
16021604 chain = None
16031605 retval = name_template % base
16041606 _ , _ , ext = split_filename (retval )
1605- if trait_spec .keep_extension and ext :
1606- return retval
1607- return self ._overload_extension (retval , name )
1608-
1607+ if trait_spec .keep_extension and (ext or source_ext ):
1608+ if (ext is None or not ext ) and source_ext :
1609+ retval = retval + source_ext
1610+ else :
1611+ retval = self ._overload_extension (retval , name )
16091612 return retval
16101613
16111614 def _gen_filename (self , name ):
0 commit comments