From 45fc6fe21ff93aa0070c010e8341ecdca8af66aa Mon Sep 17 00:00:00 2001 From: Cagtay Fabry Date: Sun, 10 Mar 2024 21:10:06 +0100 Subject: [PATCH] fix parsing --- pydeps2env/environment.py | 14 +++++++++++--- pydeps2env/generate_environment.py | 17 +++++++++-------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/pydeps2env/environment.py b/pydeps2env/environment.py index 406e786..ad521ca 100644 --- a/pydeps2env/environment.py +++ b/pydeps2env/environment.py @@ -10,6 +10,15 @@ import warnings +def split_extras(filename: str) -> tuple[str, set]: + """Split extras requirements indicated in [].""" + if "[" in filename: + filename, extras = filename.split("[",1) + extras = set(extras.split("]",1)[0].split(",")) + else: + extras = {} + return filename, extras + def add_requirement( req: Requirement | str, requirements: dict[str, Requirement], @@ -53,9 +62,8 @@ class Environment: def __post_init__(self): self.extras = set(self.extras) - if isinstance(self.filename, str) and "[" in self.filename: - self.filename, extras = self.filename.split("[",1) - extras = extras.split("]",1)[0].split(",") + if isinstance(self.filename, str): + self.filename, extras = split_extras(self.filename) self.extras |= set(extras) if Path(self.filename).suffix == ".toml": diff --git a/pydeps2env/generate_environment.py b/pydeps2env/generate_environment.py index 1fa1c4d..1ce455a 100644 --- a/pydeps2env/generate_environment.py +++ b/pydeps2env/generate_environment.py @@ -2,6 +2,11 @@ from pathlib import Path +try: + from pydeps2env.environment import Environment, split_extras +except ModuleNotFoundError: # try local file if not installed + from environment import Environment, split_extras + def create_environment_file( filename: list[str], @@ -11,14 +16,9 @@ def create_environment_file( pip: list[str], include_build_system: bool = False, ): - try: - from pydeps2env.environment import Environment - except ModuleNotFoundError: # try local file if not installed - from environment import Environment - env = Environment(filename[0], pip_packages=pip, extras=extras, channels=channels) for f in filename[1:]: - env.combine(Environment(f)) + env.combine(Environment(f, pip_packages=pip, extras=extras, channels=channels)) _include = include_build_system == "include" env.export(output_file, include_build_system=_include) @@ -47,8 +47,9 @@ def main(): args = parser.parse_args() for file in args.setup: - if not Path(file).is_file(): - raise FileNotFoundError(f"Could not find file {args.setup}") + filename, _ = split_extras(file) + if not Path(filename).is_file(): + raise FileNotFoundError(f"Could not find file {filename}") create_environment_file( filename=args.setup,