Skip to content

Commit

Permalink
refactor(dotenv.variables): optimize code performance
Browse files Browse the repository at this point in the history
  • Loading branch information
pivoshenko committed Sep 1, 2024
1 parent c68aa40 commit d2a1b20
Showing 1 changed file with 8 additions and 9 deletions.
17 changes: 8 additions & 9 deletions src/poetry_plugin_dotenv/dotenv/variables.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,27 +48,26 @@ class Variable:
def resolve(self, env: OrderedDict[str, str], *args, **kwargs) -> str: # type: ignore[no-untyped-def]
"""Get a variable value."""

default = self.default if self.default else ""
env_val = env.get(self.name, default)
return env_val if env_val else ""
return env.get(self.name, self.default) or "" # type: ignore[arg-type]


def parse(value: str) -> Iterator[Literal | Variable]:
"""Parse values."""

cursor = 0
value_length = len(value)
matches = list(_posix_variable.finditer(value))

for match in _posix_variable.finditer(value):
for match in matches:
start, end = match.span()
name = match.groupdict()["name"]
default = match.groupdict()["default"]
name = match.group("name")
default = match.group("default")

if start > cursor:
yield Literal(value=value[cursor:start])

yield Variable(name=name, default=default)
cursor = end

length = len(value)
if cursor < length:
yield Literal(value=value[cursor:length])
if cursor < value_length:
yield Literal(value=value[cursor:])

0 comments on commit d2a1b20

Please sign in to comment.