def test_parse_requirements_with_comments(self): requirements = "flask==0.10.1 # latest version" package = next(rparse.parse(requirements)) self.assertEqual(package.name, "flask") self.assertEqual(package.comment, "# latest version") requirements = "flask # latest version" package = next(rparse.parse(requirements)) self.assertEqual(package.name, "flask") self.assertEqual(package.specs, None) with self.assertRaises(StopIteration): next(rparse.parse("# comment"))
def test_parse_invalid_requirements(self): requirements = """ flask 0.10.1 redis==1.0 """ ast = rparse.parse(requirements) with self.assertRaises(ValueError, message="Invalid requirements line: 'flask 0.10.1'"): next(ast) package = next(ast) self.assertEqual(package.name, "redis") self.assertEqual(package.specs, [("==", "1.0")]) with self.assertRaises(ValueError, message="Invalid requirements line: 'flask=0.10.1'"): next(rparse.parse("flask=0.10.1"))
def handle(self): settings = { "path": self.argument("file"), } absolute_path_to_file = pathlib.Path(settings['path']).absolute() if absolute_path_to_file.exists() == False: self.line_error( f"File path {absolute_path_to_file} does not exist.") return 1 try: parse_requirements_file = rparse.parse( open(absolute_path_to_file, 'r').read()) # type: typing.List[rparse.Requirement] except Exception as error: self.line_error(f"Requirements file is malformed: {error}") for requirement in parse_requirements_file: if len(requirement.specs) > 1: generated_version = "".join(requirement.specs[0]) for req in requirement.specs[1:]: generated_version += f",{''.join(req)}" else: generated_version = "".join(requirement.specs[0]) generated_command = f"poetry install {requirement.name}{generated_version}" if self.option("dry-run") == False: self.call("install", f"{requirement.name}{generated_version}") else: self.line(f"<b>{generated_command}</b>")
def test_parse_loosy_requirement(self): requirements = "flask" package = next(rparse.parse(requirements)) self.assertEqual(package.name, "flask") self.assertEqual(package.specs, None)
def test_parse_multiple_versions(self): requirements = "flask>=0.10.1, <0.11" package = next(rparse.parse(requirements)) self.assertEqual(package.name, "flask") self.assertEqual(package.specs, [(">=", "0.10.1"), ("<", "0.11")])
def test_parse_extra_requirements(self): requirements = "raven[foo, bar]==0.10.1" package = next(rparse.parse(requirements)) self.assertEqual(package.name, "raven") self.assertEqual(package.specs, [("==", "0.10.1")]) self.assertEqual(package.extras, ["foo", "bar"])
def test_parse_strict_requirement(self): requirements = "flask==0.10.1" package = next(rparse.parse(requirements)) self.assertEqual(package.name, "flask") self.assertEqual(package.specs, [("==", "0.10.1")])