Example #1
0
def prepare(project, logger):
    target_directory = project.expand_path("$dir_target")
    if not os.path.exists(target_directory):
        logger.debug("Creating target directory %s", target_directory)
        os.mkdir(target_directory)

    reports_directory = project.expand_path("$dir_reports")
    if not os.path.exists(reports_directory):
        logger.debug("Creating reports directory %s", reports_directory)
        os.mkdir(reports_directory)

    plugin_dependency_versions = get_package_version(project.plugin_dependencies, logger)
    for plugin_dependency in project.plugin_dependencies:
        logger.debug("Processing plugin dependency %s" % plugin_dependency)
        if plugin_dependency.name.lower() not in plugin_dependency_versions or not \
                version_satisfies_spec(plugin_dependency.version,
                                       plugin_dependency_versions[plugin_dependency.name.lower()]):
            logger.info("Installing plugin dependency %s" % plugin_dependency)
            log_file = project.expand_path("$dir_reports",
                                           safe_log_file_name("dependency_%s_install.log" % plugin_dependency))
            pip_install(as_pip_install_target(plugin_dependency),
                        index_url=project.get_property("install_dependencies_index_url"),
                        extra_index_url=project.get_property("install_dependencies_extra_index_url"),
                        verbose=project.get_property("verbose"), logger=logger,
                        force_reinstall=plugin_dependency.url is not None, outfile_name=log_file,
                        error_file_name=log_file)
Example #2
0
def prepare(project, logger):
    target_directory = project.expand_path("$dir_target")
    if not os.path.exists(target_directory):
        logger.debug("Creating target directory %s", target_directory)
        os.mkdir(target_directory)

    reports_directory = project.expand_path("$dir_reports")
    if not os.path.exists(reports_directory):
        logger.debug("Creating reports directory %s", reports_directory)
        os.mkdir(reports_directory)

    plugin_dependency_versions = get_package_version(
        project.plugin_dependencies, logger)
    for plugin_dependency in project.plugin_dependencies:
        logger.debug("Processing plugin dependency %s" % plugin_dependency)
        if plugin_dependency.name.lower() not in plugin_dependency_versions or not \
                version_satisfies_spec(plugin_dependency.version,
                                       plugin_dependency_versions[plugin_dependency.name.lower()]):
            logger.info("Installing plugin dependency %s" % plugin_dependency)
            log_file = project.expand_path(
                "$dir_reports",
                safe_log_file_name("dependency_%s_install.log" %
                                   plugin_dependency))
            pip_install(as_pip_install_target(plugin_dependency),
                        index_url=project.get_property(
                            "install_dependencies_index_url"),
                        extra_index_url=project.get_property(
                            "install_dependencies_extra_index_url"),
                        verbose=project.get_property("verbose"),
                        logger=logger,
                        force_reinstall=plugin_dependency.url is not None,
                        outfile_name=log_file,
                        error_file_name=log_file)
Example #3
0
    def test_get_package_version(self):
        # Single item
        self.assertTrue(pip_utils.version_satisfies_spec(">=7.0", pip_utils.get_package_version("pip")["pip"]))
        self.assertTrue(
            "this package does not exist" not in pip_utils.get_package_version("this package does not exist"))
        self.assertTrue("blah" not in pip_utils.get_package_version(core.RequirementsFile("blah")))
        self.assertTrue("blah" not in pip_utils.get_package_version(core.Dependency("blah", url="fake url")))

        # Multiple different items
        multiple_different_items = pip_utils.get_package_version(
            ["pip", core.Dependency("wheel"), core.RequirementsFile("blah")])
        self.assertTrue("pip" in multiple_different_items)
        self.assertTrue("wheel" in multiple_different_items)
        self.assertTrue("blah" not in multiple_different_items)

        # Multiple identical items
        multiple_identical_items = pip_utils.get_package_version(
            ["pip", core.Dependency("pip")])
        self.assertTrue("pip" in multiple_identical_items)
        self.assertEqual(len(multiple_identical_items), 1)

        # Validate case
        lower_case_packages = pip_utils.get_package_version("PiP")
        self.assertTrue("pip" in lower_case_packages)
        self.assertTrue("pIp" not in lower_case_packages)
        self.assertTrue("PiP" not in lower_case_packages)
    def test_get_package_version(self):
        # Single item
        self.assertTrue(pip_utils.version_satisfies_spec(">=7.0", pip_utils.get_package_version("pip")["pip"]))
        self.assertTrue(
            "this package does not exist" not in pip_utils.get_package_version("this package does not exist"))
        self.assertTrue("blah" not in pip_utils.get_package_version(core.RequirementsFile("blah")))
        self.assertTrue("blah" not in pip_utils.get_package_version(core.Dependency("blah", url="fake url")))

        # Multiple different items
        multiple_different_items = pip_utils.get_package_version(
            ["pip", core.Dependency("wheel"), core.RequirementsFile("blah")])
        self.assertTrue("pip" in multiple_different_items)
        self.assertTrue("wheel" in multiple_different_items)
        self.assertTrue("blah" not in multiple_different_items)

        # Multiple identical items
        multiple_identical_items = pip_utils.get_package_version(
            ["pip", core.Dependency("pip")])
        self.assertTrue("pip" in multiple_identical_items)
        self.assertEquals(len(multiple_identical_items), 1)

        # Validate case
        lower_case_packages = pip_utils.get_package_version("PiP")
        self.assertTrue("pip" in lower_case_packages)
        self.assertTrue("pIp" not in lower_case_packages)
        self.assertTrue("PiP" not in lower_case_packages)
Example #5
0
def _filter_dependencies(logger, project, dependencies):
    dependencies = as_list(dependencies)
    installed_packages = get_package_version(dependencies)
    dependencies_to_install = []

    for dependency in dependencies:
        logger.debug("Inspecting dependency '%s'" % dependency)
        if isinstance(dependency, RequirementsFile):
            # Always add requirement file-based dependencies
            logger.debug(
                "Dependency '%s' is a requirement file and will be included" %
                dependency)
            dependencies_to_install.append(dependency)
            continue
        elif isinstance(dependency, Dependency):
            if dependency.url:
                # Always add dependency that is url-based
                logger.debug(
                    "Dependency '%s' is URL-based and will be included" %
                    dependency)
                dependencies_to_install.append(dependency)
                continue
            if should_update_package(dependency.version) and not getattr(
                    dependency, "version_not_a_spec", False):
                # Always add dependency that has a version specifier indicating desire to always update
                logger.debug(
                    "Dependency '%s' has a non-exact version specifier and will be included"
                    % dependency)
                dependencies_to_install.append(dependency)
                continue

        dependency_name = dependency.name.lower()
        if dependency_name not in installed_packages:
            # If dependency not installed at all then install it
            logger.debug(
                "Dependency '%s' is not installed and will be included" %
                dependency)
            dependencies_to_install.append(dependency)
            continue

        if dependency.version and not version_satisfies_spec(
                dependency.version, installed_packages[dependency_name]):
            # If version is specified and version constraint is not satisfied
            logger.debug(
                "Dependency '%s' is not satisfied by installed dependency version '%s' and will be included"
                % (dependency, installed_packages[dependency_name]))
            dependencies_to_install.append(dependency)
            continue

        logger.debug(
            "Dependency '%s' is already up-to-date and will be skipped" %
            dependency)

    return dependencies_to_install, installed_packages
def prepare(project, logger):
    target_directory = project.expand_path("$dir_target")
    if not os.path.exists(target_directory):
        logger.debug("Creating target directory %s", target_directory)
        os.mkdir(target_directory)

    reports_directory = project.expand_path("$dir_reports")
    if not os.path.exists(reports_directory):
        logger.debug("Creating reports directory %s", reports_directory)
        os.mkdir(reports_directory)

    plugin_dependency_versions = pip_utils.get_package_version(
        project.plugin_dependencies, logger)
    for plugin_dependency in project.plugin_dependencies:
        logger.debug("Processing plugin dependency %s" % plugin_dependency)
        dependency_name = plugin_dependency.name.lower()
        no_version_installed = dependency_name not in plugin_dependency_versions
        if not no_version_installed:
            version_satisfies = pip_utils.version_satisfies_spec(
                plugin_dependency.version,
                plugin_dependency_versions[dependency_name])
        if no_version_installed or not version_satisfies:
            logger.info("Installing plugin dependency %s" % plugin_dependency)
            log_file = project.expand_path(
                "$dir_reports",
                safe_log_file_name("dependency_%s_install.log" %
                                   plugin_dependency))
            install_targets = pip_utils.as_pip_install_target(
                plugin_dependency)
            result = pip_utils.pip_install(
                install_targets=install_targets,
                index_url=project.get_property(
                    "install_dependencies_index_url"),
                extra_index_url=project.get_property(
                    "install_dependencies_extra_index_url"),
                verbose=project.get_property("verbose"),
                logger=logger,
                force_reinstall=plugin_dependency.url is not None,
                outfile_name=log_file,
                error_file_name=log_file)
            if result:
                log_lines = list(tail(log_file))
                log = log_lines[-1] if not project.get_property(
                    "debug") else "\n".join(log_lines)
                if no_version_installed:
                    raise MissingPluginDependencyException(
                        ",".join(install_targets), log)
                else:
                    logger.error("Failed to install '%s':\n%s",
                                 plugin_dependency, log)
def _filter_dependencies(logger, project, dependencies):
    dependencies = as_list(dependencies)
    installed_packages = pip_utils.get_package_version(dependencies)
    dependencies_to_install = []
    dependency_constraints = []

    for dependency in dependencies:
        logger.debug("Inspecting dependency '%s'" % dependency)
        if isinstance(dependency, RequirementsFile):
            # Always add requirement file-based dependencies
            logger.debug("Dependency '%s' is a requirement file and will be included" % dependency)
            dependencies_to_install.append(dependency)
            continue
        elif isinstance(dependency, Dependency):
            if dependency.version:
                dependency_constraints.append(dependency)
                logger.debug(
                    "Dependency '%s' is added to the list of installation constraints" % dependency)

            if dependency.url:
                # Always add dependency that is url-based
                logger.debug("Dependency '%s' is URL-based and will be included" % dependency)
                dependencies_to_install.append(dependency)
                continue
            if pip_utils.should_update_package(dependency.version) \
                    and not getattr(dependency, "version_not_a_spec", False):
                # Always add dependency that has a version specifier indicating desire to always update
                logger.debug("Dependency '%s' has a non-exact version specifier and will be included" % dependency)
                dependencies_to_install.append(dependency)
                continue

        dependency_name = dependency.name.lower()
        if dependency_name not in installed_packages:
            # If dependency not installed at all then install it
            logger.debug("Dependency '%s' is not installed and will be included" % dependency)
            dependencies_to_install.append(dependency)
            continue

        if dependency.version \
                and not pip_utils.version_satisfies_spec(dependency.version, installed_packages[dependency_name]):
            # If version is specified and version constraint is not satisfied
            logger.debug("Dependency '%s' is not satisfied by installed dependency version '%s' and will be included" %
                         (dependency, installed_packages[dependency_name]))
            dependencies_to_install.append(dependency)
            continue

        logger.debug("Dependency '%s' is already up-to-date and will be skipped" % dependency)

    return dependencies_to_install, installed_packages, dependency_constraints