Ejemplo n.º 1
0
 def setUp(self):
     # Current Env:
     self.nodes = [('A', '1.0.0'), ('B', '1.0.0'), ('C', '1.0.0')]
     self.edges = [[('A', '1.0.0'), ('B', '1.0.0'), ('==', '1.0.0')],
                   [('A', '1.0.0'), ('C', '1.0.0'), ('>=', '0.5.0')], ]
     self.ancestors, self.descendants = \
         Package.get_direct_links_to_any_package('A', self.edges)
Ejemplo n.º 2
0
 def setUp(self):
     self.nodes = [('A', '1.0.0'), ('B', '1.0.0'), ('C', '1.0.0')]
     self.edges = [
         [('A', '1.0.0'), ('B', '1.0.0'), ('==', '1.0.0')],
         [('A', '1.0.0'), ('C', '1.0.0'), ('>=', '0.5.0')],
     ]
     self.ancestors, self.descendants = \
         Package.get_direct_links_to_any_package('A', self.edges)
Ejemplo n.º 3
0
    def setUp(self):
        super(TestAncestorDependencies, self).setUp()
        self.package = "fabtools"
        self.version = "0.19.0"
        self.fab_reqs = json.load(
            open("tests/deputils_data/fabtools_0_19_0_req.json", 'r'))

        self.ancestors, self.descendants = \
            Package.get_direct_links_to_any_package(
                self.package, self.venv.edges)
Ejemplo n.º 4
0
    def setUp(self):
        super(TestAncestorDependencies, self).setUp()
        self.package = "fabtools"
        self.version = "0.19.0"
        self.fab_reqs = json.load(
            open("tests/deputils_data/fabtools_0_19_0_req.json", 'r'))

        self.ancestors, self.descendants = \
            Package.get_direct_links_to_any_package(
                self.package, self.venv.edges)
Ejemplo n.º 5
0
    def setUp(self):
        """Augment prior setup for specific requirements"""
        super(TestDependencySet, self).setUp()

        self.package = "fabtools"
        self.version = "0.19.0"
        self.fab_reqs = json.load(
            open("tests/deputils_data/fabtools_0_19_0_req.json", 'r'))

        self.ancestors, self.descendants = \
            Package.get_direct_links_to_any_package(
                self.package, self.venv.edges)
Ejemplo n.º 6
0
    def setUp(self):
        """Augment prior setup for specific requirements"""
        super(TestDependencySet, self).setUp()

        self.package = "fabtools"
        self.version = "0.19.0"
        self.fab_reqs = json.load(
            open("tests/deputils_data/fabtools_0_19_0_req.json", 'r'))

        self.ancestors, self.descendants = \
            Package.get_direct_links_to_any_package(
                self.package, self.venv.edges)
Ejemplo n.º 7
0
    def test_z_fails(self):
        """
        Z should fail with B<1
        """
        package = 'B'
        version = '0.0.1'

        ancestors, _ = Package.get_direct_links_to_any_package('B', self.edges)

        res = DepTools.check_if_ancestors_still_satisfied(
            package, version, ancestors, self.package_requirements)

        self.assertIn('z', res['conflicts'])
Ejemplo n.º 8
0
    def test_z_fails(self):
        """
        Z should fail with B<1
        """
        package = 'B'
        version = '0.0.1'

        ancestors, _ = Package.get_direct_links_to_any_package('B', self.edges)

        res = DepTools.check_if_ancestors_still_satisfied(
            package, version, ancestors, self.package_requirements)

        self.assertIn('z', res['conflicts'])
Ejemplo n.º 9
0
    def setUp(self):
        self.nodes = [
            ('A', '1.0.0'),
            ('B', '1.0.0'),
            ('C', '1.0.0'),
            ('X', '1.0.0'),
            ('Y', '1.0.0'),
            ('Z', '1.0.0'),
        ]
        self.edges = [
            [('A', '1.0.0'), ('B', '1.0.0'), ('==', '1.0.0')],
            [('A', '1.0.0'), ('C', '1.0.0'), ('>=', '0.5.0')],
            [('X', '1.0.0'), ('A', '1.0.0'), ('>=', '1.0.0')],
            [('Y', '1.0.0'), ('A', '1.0.0'), ('<=', '2.0.0')],
            [('Z', '1.0.0'), ('B', '1.0.0'), ('>=', '1.0.0')],
        ]

        self.ancestors, self.descendants = \
            Package.get_direct_links_to_any_package('A', self.edges)

        p_r = {}  # package_requirements: build from edges.
        for e in self.edges:
            print(e)
            project_name = e[0][0]
            version = e[0][1]
            key = project_name.lower()
            if key not in p_r:
                p_r[key] = {
                    'project_name': project_name,
                    'version': version,
                    'requires': {}
                }

            sub_project_name = e[1][0]
            sub_key = sub_project_name.lower()
            sub_version = e[1][1]
            specs = e[2]

            p_r[key]['requires'][sub_key] = {
                'project_name': sub_project_name,
                'version': sub_version,
                'specs': [specs]
            }
        self.package_requirements = p_r
Ejemplo n.º 10
0
    def setUp(self):
        self.nodes = [
            ('A', '1.0.0'),
            ('B', '1.0.0'),
            ('C', '1.0.0'),
            ('X', '1.0.0'),
            ('Y', '1.0.0'),
            ('Z', '1.0.0'),
        ]
        self.edges = [[('A', '1.0.0'), ('B', '1.0.0'), ('==', '1.0.0')],
                      [('A', '1.0.0'), ('C', '1.0.0'), ('>=', '0.5.0')],
                      [('X', '1.0.0'), ('A', '1.0.0'), ('>=', '1.0.0')],
                      [('Y', '1.0.0'), ('A', '1.0.0'), ('<=', '2.0.0')],
                      [('Z', '1.0.0'), ('B', '1.0.0'), ('>=', '1.0.0')], ]

        self.ancestors, self.descendants = \
            Package.get_direct_links_to_any_package('A', self.edges)

        p_r = {}  # package_requirements: build from edges.
        for e in self.edges:
            print(e)
            project_name = e[0][0]
            version = e[0][1]
            key = project_name.lower()
            if key not in p_r:
                p_r[key] = {'project_name': project_name,
                            'version': version, 'requires': {}}

            sub_project_name = e[1][0]
            sub_key = sub_project_name.lower()
            sub_version = e[1][1]
            specs = e[2]

            p_r[key]['requires'][sub_key] = {'project_name': sub_project_name,
                                             'version': sub_version,
                                             'specs': [specs]}
        self.package_requirements = p_r
Ejemplo n.º 11
0
    def detect_upgrade_conflicts(packages, venv, pretty=False):
        """
        Detect conflicts between packages in current environment when upgrading
        other packages.

        At present this routine will look at just the immediate connections
        to a graph in the environment. It does this in 3 major ways:

        1. DEPENDENCY SET - check_changes_in_requirements_vs_env
            Checks the required dependencies of new version against
            current environment to see additions/removals BY NAME ONLY.

        2. REQUIRED VERSIONS - check_req_deps_satisfied_by_current_env
            For all dependencies of new version, checks to see whether
            they are satisfied by current environment versions.

        3. ANCESTOR DEPENDENCIES - check_if_ancestors_still_satisfied
            For all the ancestor nodes that depend on PACKAGE, it checks
            whether the dependency specs are satisfied by the new version.

        :param list packages: List of (package, desired_version)'s
        :param Environment venv: virtual environment
        """

        uc_deps = {}
        conflicts = {}
        for u in packages:
            package = u[0]
            version = u[1]

            p_v = "{0}_{1}".format(package, version.replace('.', '_'))

            uc_deps[p_v] = {}

            p_key = package.lower()
            cur_ver = venv.all_packages[p_key].version
            if parse_version(cur_ver) == parse_version(version):
                s = ("{} version {} is same as current!".format(
                    package, version))
                print_col(s, 'red', 'black', pretty)

                continue

            if not PyPIHelper.check_package_version_on_pypi(package, version):
                continue

            uc_deps[p_v]['requirements'] = \
                DepTools.get_deps_for_package_version(
                    package, version, vex_options=MagellanConfig.vex_options)

            ancestors, descendants = Package.get_direct_links_to_any_package(
                package, venv.edges)

            # 1:  DEPENDENCY SET - check_changes_in_requirements_vs_env
            uc_deps[p_v]['dependency_set'] = \
                DepTools.check_changes_in_requirements_vs_env(
                uc_deps[p_v]['requirements'], descendants)

            # 2. REQUIRED VERSIONS - check_req_deps_satisfied_by_current_env
            uc_deps[p_v]['required_versions'] = \
                DepTools.check_req_deps_satisfied_by_current_env(
                    uc_deps[p_v]['requirements'], venv.nodes)

            # 3. ANCESTOR DEPENDENCIES - check_if_ancestors_still_satisfied
            uc_deps[p_v]['ancestor_dependencies'] = \
                DepTools.check_if_ancestors_still_satisfied(
                    package, version, ancestors, venv.package_requirements)

            conflicts[p_v] = {}
            try:
                conflicts[p_v]['dep_set'] = uc_deps[p_v]['dependency_set']
                conflicts[p_v]['req_ver'] = \
                    uc_deps[p_v]['required_versions']['conflicts']
                conflicts[p_v]['missing_packages'] = \
                    uc_deps[p_v]['required_versions']['missing']
                conflicts[p_v]['anc_dep'] = \
                    uc_deps[p_v]['ancestor_dependencies']['conflicts']
            except TypeError as e:
                maglog.debug(
                    "Error when attempting to assess conflicts {}".format(e))

        return conflicts, uc_deps
Ejemplo n.º 12
0
 def test_empty_list_returned_from_invalid_package(self):
     """[],[] should be returned if package is invalid."""
     anc, dec = Package.get_direct_links_to_any_package(
         'NONSENSE_PACKAGE', self.edges)
     self.assertEqual(anc, [])
     self.assertEqual(dec, [])
Ejemplo n.º 13
0
 def test_return_from_celery(self):
     """ancestors and descendants should match test data."""
     anc, dec = Package.get_direct_links_to_any_package(
         'celery', self.edges)
     self.assertEqual(anc, self.celery_ancestors)
     self.assertEqual(dec, self.celery_descendants)
Ejemplo n.º 14
0
    def detect_upgrade_conflicts(packages, venv, pretty=False):
        """
        Detect conflicts between packages in current environment when upgrading
        other packages.

        At present this routine will look at just the immediate connections
        to a graph in the environment. It does this in 3 major ways:

        1. DEPENDENCY SET - check_changes_in_requirements_vs_env
            Checks the required dependencies of new version against
            current environment to see additions/removals BY NAME ONLY.

        2. REQUIRED VERSIONS - check_req_deps_satisfied_by_current_env
            For all dependencies of new version, checks to see whether
            they are satisfied by current environment versions.

        3. ANCESTOR DEPENDENCIES - check_if_ancestors_still_satisfied
            For all the ancestor nodes that depend on PACKAGE, it checks
            whether the dependency specs are satisfied by the new version.

        :param list packages: List of (package, desired_version)'s
        :param Environment venv: virtual environment
        """

        uc_deps = {}
        conflicts = {}
        for u in packages:
            package = u[0]
            version = u[1]

            p_v = "{0}_{1}".format(package, version.replace('.', '_'))

            uc_deps[p_v] = {}

            p_key = package.lower()
            cur_ver = venv.all_packages[p_key].version
            if parse_version(cur_ver) == parse_version(version):
                s = ("{} version {} is same as current!"
                     .format(package, version))
                print_col(s, 'red', 'black', pretty)

                continue

            if not PyPIHelper.check_package_version_on_pypi(package, version):
                continue

            uc_deps[p_v]['requirements'] = \
                DepTools.get_deps_for_package_version(
                    package, version, vex_options=MagellanConfig.vex_options)

            ancestors, descendants = Package.get_direct_links_to_any_package(
                package, venv.edges)

            # 1:  DEPENDENCY SET - check_changes_in_requirements_vs_env
            uc_deps[p_v]['dependency_set'] = \
                DepTools.check_changes_in_requirements_vs_env(
                uc_deps[p_v]['requirements'], descendants)

            # 2. REQUIRED VERSIONS - check_req_deps_satisfied_by_current_env
            uc_deps[p_v]['required_versions'] = \
                DepTools.check_req_deps_satisfied_by_current_env(
                    uc_deps[p_v]['requirements'], venv.nodes)

            # 3. ANCESTOR DEPENDENCIES - check_if_ancestors_still_satisfied
            uc_deps[p_v]['ancestor_dependencies'] = \
                DepTools.check_if_ancestors_still_satisfied(
                    package, version, ancestors, venv.package_requirements)

            conflicts[p_v] = {}
            try:
                conflicts[p_v]['dep_set'] = uc_deps[p_v]['dependency_set']
                conflicts[p_v]['req_ver'] = \
                    uc_deps[p_v]['required_versions']['conflicts']
                conflicts[p_v]['missing_packages'] = \
                    uc_deps[p_v]['required_versions']['missing']
                conflicts[p_v]['anc_dep'] = \
                    uc_deps[p_v]['ancestor_dependencies']['conflicts']
            except TypeError as e:
                maglog.debug("Error when attempting to assess conflicts {}"
                             .format(e))

        return conflicts, uc_deps
Ejemplo n.º 15
0
 def test_empty_list_returned_from_invalid_package(self):
     """[],[] should be returned if package is invalid."""
     anc, dec = Package.get_direct_links_to_any_package(
         'NONSENSE_PACKAGE', self.edges)
     self.assertEqual(anc, [])
     self.assertEqual(dec, [])
Ejemplo n.º 16
0
 def test_return_from_celery(self):
     """ancestors and descendants should match test data."""
     anc, dec = Package.get_direct_links_to_any_package(
         'celery', self.edges)
     self.assertEqual(anc, self.celery_ancestors)
     self.assertEqual(dec, self.celery_descendants)