def test_parse_requirements_failure_bad_include(chroot): req_iter = parse_requirements(Source.from_text("\n-r other-requirements.txt")) with pytest.raises(ParseError) as exc_info: next(req_iter) assert exc_info.value.logical_line == LogicalLine( raw_text="-r other-requirements.txt", processed_text="-r other-requirements.txt", source="<string>", start_line=2, end_line=2, )
def test_parse_requirements_failure_bad_requirement(chroot): # type: (str) -> None other_requirement_file = os.path.realpath(os.path.join(chroot, "other-requirements.txt")) with safe_open(other_requirement_file, "w") as fp: fp.write( dedent( """\ GoodRequirement # A comment. AnotherRequirement # Another comment. BadRequirement\\ [extra, another]; \\ bad_marker == "2.7" \\ --global-option=foo # End of line comment. """ ) ) req_iter = parse_requirements(Source.from_text("-r other-requirements.txt")) parsed_requirement = next(req_iter) assert isinstance(parsed_requirement, PyPIRequirement) assert "GoodRequirement" == parsed_requirement.requirement.project_name parsed_requirement = next(req_iter) assert isinstance(parsed_requirement, PyPIRequirement) assert "AnotherRequirement" == parsed_requirement.requirement.project_name with pytest.raises(ParseError) as exc_info: next(req_iter) assert exc_info.value.logical_line == LogicalLine( raw_text=( "BadRequirement\\\n" "[extra, another]; \\\n" 'bad_marker == "2.7" \\\n' " --global-option=foo # End of line comment.\n" ), processed_text='BadRequirement[extra, another]; bad_marker == "2.7" --global-option=foo', source=other_requirement_file, start_line=7, end_line=10, )
start_line=7, end_line=10, ) class MarkerWithEq(Marker): @classmethod def wrap(cls, marker): # type: (Optional[Marker]) -> Optional[MarkerWithEq] return None if marker is None else MarkerWithEq(str(marker)) def __eq__(self, other): return type(other) == MarkerWithEq and str(self) == str(other) DUMMY_LINE = LogicalLine("", "", "<string>", 1, 1) def req( project_name, # type: str extras=None, # type: Optional[Iterable[str]] specifier=None, # type: Optional[str] marker=None, # type: Optional[str] editable=False, # type: bool ): # type: (...) -> PyPIRequirement return PyPIRequirement( line=DUMMY_LINE, requirement=parse_requirement_from_project_name_and_specifier( project_name, extras=extras, specifier=specifier, marker=marker ),