def test_sources_contains_a_source_per_git_requirement(current_platform, requirement_parser): requirement_set = RequirementSet(current_platform) requirement_set.add(requirement_parser.parse("no-git-source")) requirement_set.add( requirement_parser.parse("git+https://url.test/path#egg=test-egg")) assert len(requirement_set.sources()) == 1
class RequirementsCollector: def __init__( self, platform: TargetPlatform, requirement_parser: RequirementParser, logger: Logger, project_directory: str, ): self.platform = platform self.requirement_set = RequirementSet(platform) self.requirement_parser = requirement_parser self.logger = logger self._project_directory = project_directory self._sources = Sources() def requirements(self) -> RequirementSet: return self.requirement_set def add_line(self, line: str) -> None: requirement = self.requirement_parser.parse(line) if isinstance(requirement, PathRequirement): requirement = requirement.change_path( lambda path: self._handle_requirements_path( name=requirement.name(), path=path)) self.requirement_set.add(requirement) def add_file(self, file_path: str) -> None: requirements_file = RequirementsFile(file_path, self._project_directory, self.requirement_parser, self.logger) requirements_file.process() self._sources.update(requirements_file.sources()) added_requirements = RequirementSet.from_file(requirements_file, self.platform, self.requirement_parser, self.logger) self.requirement_set += added_requirements def sources(self) -> Sources: sources = Sources() sources.update(self.requirement_set.sources()) sources.update(self._sources) return sources def _handle_requirements_path(self, name: str, path: str) -> str: self._sources.add(name, PathSource(path)) return os.path.abspath(path)
def test_sources_has_sources_type(current_platform): requirement_set = RequirementSet(current_platform) assert isinstance(requirement_set.sources(), Sources)
class RequirementsCollector: def __init__( self, platform: TargetPlatform, requirement_parser: RequirementParser, logger: Logger, project_directory: str, base_dependency_graph: DependencyGraph, ): self.platform = platform self.requirement_set = RequirementSet(platform) self.requirement_parser = requirement_parser self.logger = logger self._project_directory = project_directory self._sources = Sources() self._base_dependency_graph = base_dependency_graph def requirements(self) -> RequirementSet: return self.requirement_set def add_line(self, line: str) -> None: original_dependency = self.requirement_parser.parse(line) transitive_requirements = self._base_dependency_graph.get_all_build_dependency_names( original_dependency) self._add_line_without_dependency_check(line) for requirement in transitive_requirements: self._add_line_without_dependency_check(requirement) def add_file(self, file_path: str) -> None: requirements_file = RequirementsFile(file_path, self._project_directory, self.requirement_parser, self.logger) requirements_file.process() self._sources.update(requirements_file.sources()) added_requirements = RequirementSet.from_file(requirements_file, self.platform, self.requirement_parser, self.logger) transitive_requirements = set() for requirement in added_requirements: transitive_requirements.update( self._base_dependency_graph.get_all_build_dependency_names( requirement)) for line in transitive_requirements: self._add_line_without_dependency_check(line) self.requirement_set += added_requirements def sources(self) -> Sources: sources = Sources() sources.update(self.requirement_set.sources()) sources.update(self._sources) return sources def _add_line_without_dependency_check(self, line: str) -> None: requirement = self.requirement_parser.parse(line) if isinstance(requirement, PathRequirement): requirement = requirement.change_path( lambda path: self._handle_requirements_path( name=requirement.name(), path=path)) self.requirement_set.add(requirement) def _handle_requirements_path(self, name: str, path: str) -> str: self._sources.add(name, PathSource(path)) return os.path.abspath(path)