diff --git a/neon_utils/packaging_utils.py b/neon_utils/packaging_utils.py index 400818c6..e7a1f7ef 100644 --- a/neon_utils/packaging_utils.py +++ b/neon_utils/packaging_utils.py @@ -296,3 +296,24 @@ def install_packages_from_pip(core_module: str, packages: List[str]) -> int: if result != 0: return result return 0 + + +def get_installed_prereleases() -> List[Tuple[str, str]]: + """ + Get a list of installed pre-release packages. + @return: List of tuple (pkg_name, version) + """ + from subprocess import run + packages = run(["pip", "list"], + capture_output=True).stdout.decode("utf-8") + prerelease_pkgs = list() + for line in packages.split('\n'): + if not line: + continue + name, version = line.split() + if not version.replace('.', '').isnumeric(): + if "post" in version: + LOG.debug(f"post release {name}:{version}") + continue + prerelease_pkgs.append((name, version)) + return prerelease_pkgs diff --git a/tests/packaging_util_tests.py b/tests/packaging_util_tests.py index 943c6c54..69a2185d 100644 --- a/tests/packaging_util_tests.py +++ b/tests/packaging_util_tests.py @@ -168,6 +168,20 @@ def test_install_packages_from_pip(self): self.assertEqual(0, test_result) mock_method.assert_called_once() + @patch("subprocess.run") + def test_get_installed_prereleases(self, run): + run.return_value.stdout = """stable_package 1.0.0 +beta_package 0.2.2b3 +alpha_package 0.0.0a0 +date_package 24.4.30 +post_package 2.0.0post10 +""".encode("utf-8") + from neon_utils.packaging_utils import get_installed_prereleases + prereleases = get_installed_prereleases() + self.assertEqual(len(prereleases), 2) + for pkg in prereleases: + self.assertTrue(pkg[0].endswith("_package")) + self.assertEqual(len(pkg[1].split('.')), 3) if __name__ == '__main__':