@@ -72,19 +72,15 @@ def method(
72
72
field = field_or_factory (missing = missing , ** kwargs )
73
73
else :
74
74
field = field_or_factory (subcast = subcast , missing = missing , ** kwargs )
75
- parsed_key , raw_value , proxied_key = self ._get_from_environ (name , ma .missing )
75
+ parsed_key , value , proxied_key = self ._get_from_environ (name , field .missing )
76
76
self ._fields [parsed_key ] = field
77
77
source_key = proxied_key or parsed_key
78
- if raw_value is ma . missing and field . missing is ma .missing :
78
+ if value is ma .missing :
79
79
if self .eager :
80
80
raise EnvError ('Environment variable "{}" not set' .format (proxied_key or parsed_key ))
81
81
else :
82
82
self ._errors [parsed_key ].append ("Environment variable not set." )
83
83
return None
84
- if raw_value or raw_value == "" :
85
- value = raw_value
86
- else :
87
- value = field .missing if field .missing is not ma .missing else None
88
84
if preprocess :
89
85
value = preprocess (value , subcast = subcast , ** kwargs )
90
86
try :
@@ -438,10 +434,12 @@ def _get_from_environ(
438
434
if hasattr (value , "strip" ):
439
435
expand_match = self .expand_vars and _EXPANDED_VAR_PATTERN .match (value )
440
436
if expand_match : # Full match expand_vars - special case keep default
441
- proxied_key = expand_match .groups ()[0 ]
442
- subs_default = expand_match .groups ()[1 ]
437
+ proxied_key : _StrType = expand_match .groups ()[0 ]
438
+ subs_default : typing . Optional [ _StrType ] = expand_match .groups ()[1 ]
443
439
if subs_default is not None :
444
440
default = subs_default [2 :]
441
+ elif value == default : # if we have used default, don't use it recursively
442
+ default = ma .missing
445
443
return (key , self ._get_from_environ (proxied_key , default , proxied = True )[1 ], proxied_key )
446
444
expand_search = self .expand_vars and _EXPANDED_VAR_PATTERN .search (value )
447
445
if expand_search : # Multiple or in text match expand_vars - General case - default lost
0 commit comments