async def test_rotten_package(): downloader = PypiPackageInfoDownloader() r = Requirement("requests", "1.1.0", False) version, release_date = await downloader.version_and_release_date(r) r2 = Requirement("requests", "", False) version2, release_date2 = await downloader.version_and_release_date(r2) assert version != version2 assert release_date != release_date2
async def test_fresh_package(): downloader = PypiPackageInfoDownloader() r = Requirement("requests", "", False) version, release_date = await downloader.version_and_release_date(r) r2 = Requirement("requests", str(version), False) version2, release_date2 = await downloader.version_and_release_date(r2) assert version == version2 assert release_date == release_date2
def test_doesnt_go_infinite_loop(self): expected_requirements = [ Requirement("do-not", "0.0.1", False), Requirement("go-infinite", "0.0.2", False), ] actual_requirements = RequirementsParser( "tests/utils/fixtures/requirements-infinite.txt" ).parse() self.assertListEqual(actual_requirements, expected_requirements)
def test_parses_file_correctly(self): expected_requirements = [ Requirement("test", "1.0.0", False), Requirement("recursed-requirement", "0.0.1", False), Requirement("ignored-requirement", "0.1.0", True), Requirement("ignored-requirement2", "0.2.0", True), Requirement("ignored-requirement3", "0.3.0", True), ] actual_requirements = RequirementsParser("tests/utils/fixtures/requirements.txt").parse() self.assertListEqual(actual_requirements, expected_requirements)
def _parse_file(self, file: FileIO) -> Tuple[List[Requirement], List[str]]: requirements: List[Requirement] = [] to_recurse: List[str] = [] for line in file.readlines(): try: requirements.append(Requirement.from_line(line)) except NotFrozenRequirement: if line.startswith("-r "): to_recurse.append(remove_comments(line)) else: continue return requirements, to_recurse
async def _handle_single_requirement(self, requirement: Requirement) -> bool: current_version, current_release_date = await self.pypi.version_and_release_date( requirement) latest_version, latest_release_date = await self.pypi.version_and_release_date( Requirement(requirement.package)) package_info = PackageInfo( name=requirement.package, latest_version=latest_version, latest_release_date=latest_release_date, current_version=current_version, current_release_date=current_release_date, ) is_outdated, message = self.__handle_single_requirement( package_info, requirement) logger.error(message) return is_outdated
def test_creates_requirement_object_from_clean_line(self): line = "test==1.0.0" requirement = Requirement.from_line(line) self.assertEqual(requirement.package, "test") self.assertEqual(requirement.version, "1.0.0") self.assertFalse(requirement.ignore)
def test_raises_exception_on_invalid_line(self): invalid_line = "this is an invalid requirement line" with self.assertRaises(NotFrozenRequirement): Requirement.from_line(invalid_line)
def test_checks_for_norot_comment_with_space(self): line = "test4==4.0.0 # no rot" requirement = Requirement.from_line(line) self.assertEqual(requirement.package, "test4") self.assertEqual(requirement.version, "4.0.0") self.assertTrue(requirement.ignore)
def test_checks_for_norot_comment(self): line = "test3==3.0.0 # norot" requirement = Requirement.from_line(line) self.assertEqual(requirement.package, "test3") self.assertEqual(requirement.version, "3.0.0") self.assertTrue(requirement.ignore)
def test_strips_comments_from_line(self): line = "test2==2.0.0 # cool kids write tests" requirement = Requirement.from_line(line) self.assertEqual(requirement.package, "test2") self.assertEqual(requirement.version, "2.0.0") self.assertFalse(requirement.ignore)