Beispiel #1
0
 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"))
Beispiel #2
0
 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>")
Beispiel #4
0
 def test_parse_loosy_requirement(self):
     requirements = "flask"
     package = next(rparse.parse(requirements))
     self.assertEqual(package.name, "flask")
     self.assertEqual(package.specs, None)
Beispiel #5
0
 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")])
Beispiel #6
0
 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"])
Beispiel #7
0
 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")])