@@ -81,7 +81,9 @@ class Loader(Convert[T]):
81
81
82
82
def __init__ (self , section : Section , overrides : list [Override ]) -> None :
83
83
self ._section = section
84
- self .overrides : dict [str , Override ] = {o .key : o for o in overrides }
84
+ self .overrides : dict [str , list [Override ]] = {}
85
+ for override in overrides :
86
+ self .overrides .setdefault (override .key , []).append (override )
85
87
self .parent : Loader [Any ] | None = None
86
88
87
89
@property
@@ -130,31 +132,35 @@ def load( # noqa: PLR0913
130
132
"""
131
133
from tox .config .set_env import SetEnv # noqa: PLC0415
132
134
133
- override = self .overrides .get (key )
134
- if override :
135
- converted_override = _STR_CONVERT .to (override .value , of_type , factory )
136
- if not override .append :
137
- return converted_override
135
+ overrides = self .overrides .get (key , [])
136
+
138
137
try :
139
138
raw = self .load_raw (key , conf , args .env_name )
140
139
except KeyError :
141
- if override :
142
- return converted_override
143
- raise
144
- converted = self .build (key , of_type , factory , conf , raw , args )
145
- if override and override .append :
146
- if isinstance (converted , list ) and isinstance (converted_override , list ):
147
- converted += converted_override
148
- elif isinstance (converted , dict ) and isinstance (converted_override , dict ):
149
- converted .update (converted_override )
150
- elif isinstance (converted , SetEnv ) and isinstance (converted_override , SetEnv ):
151
- converted .update (converted_override , override = True )
152
- elif isinstance (converted , PythonDeps ) and isinstance (converted_override , PythonDeps ):
153
- converted += converted_override
140
+ converted = None
141
+ if not overrides :
142
+ raise
143
+ else :
144
+ converted = self .build (key , of_type , factory , conf , raw , args )
145
+
146
+ for override in overrides :
147
+ converted_override = _STR_CONVERT .to (override .value , of_type , factory )
148
+ if override .append and converted is not None :
149
+ if isinstance (converted , list ) and isinstance (converted_override , list ):
150
+ converted += converted_override
151
+ elif isinstance (converted , dict ) and isinstance (converted_override , dict ):
152
+ converted .update (converted_override )
153
+ elif isinstance (converted , SetEnv ) and isinstance (converted_override , SetEnv ):
154
+ converted .update (converted_override , override = True )
155
+ elif isinstance (converted , PythonDeps ) and isinstance (converted_override , PythonDeps ):
156
+ converted += converted_override
157
+ else :
158
+ msg = "Only able to append to lists and dicts"
159
+ raise ValueError (msg )
154
160
else :
155
- msg = "Only able to append to lists and dicts"
156
- raise ValueError ( msg )
157
- return converted
161
+ converted = converted_override
162
+
163
+ return converted # type: ignore[return-value]
158
164
159
165
def build ( # noqa: PLR0913
160
166
self ,
0 commit comments