Skip to content

Commit 2713a83

Browse files
committed
perf: use ChainMap in resolve_variables to avoid redundant dict copies
1 parent 09d7cee commit 2713a83

File tree

1 file changed

+6
-7
lines changed

1 file changed

+6
-7
lines changed

src/dotenv/main.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import sys
88
import tempfile
99
from collections import OrderedDict
10+
from collections import ChainMap
1011
from contextlib import contextmanager
1112
from typing import IO, Dict, Iterable, Iterator, Mapping, Optional, Tuple, Union
1213

@@ -247,18 +248,16 @@ def resolve_variables(
247248
) -> Mapping[str, Optional[str]]:
248249
new_values: Dict[str, Optional[str]] = {}
249250

251+
if override:
252+
env = ChainMap(new_values,os.environ)
253+
else:
254+
env = ChainMap(os.environ,new_values)
255+
250256
for name, value in values:
251257
if value is None:
252258
result = None
253259
else:
254260
atoms = parse_variables(value)
255-
env: Dict[str, Optional[str]] = {}
256-
if override:
257-
env.update(os.environ) # type: ignore
258-
env.update(new_values)
259-
else:
260-
env.update(new_values)
261-
env.update(os.environ) # type: ignore
262261
result = "".join(atom.resolve(env) for atom in atoms)
263262

264263
new_values[name] = result

0 commit comments

Comments
 (0)