def analyze_dependency(config_dict):
    """
    Analyzes Dependency

    :param config_dict: dictionary parsed from config file
    :return:
    """
    config = build_config(config_dict)
    all_dependencies = set()
    analyse_cyclic_dependency(config)
    preload_packages(config.source_paths)
    for dependency_check_input in config.dependency_inputs:
        dependency_checker = DependencyChecker(dependency_check_input.input_package,
                                               dependency_check_input.files,
                                               source_path=config.source_paths,
                                               )
        dependency_checker.load_dependencies()
        all_dependency_details = dependency_checker.get_external_dependencies(
            ignore_dependencies=dependency_check_input.allowed_dependency
        )
        if all_dependency_details:
            all_dependencies.update(all_dependency_details)

    if all_dependencies:
        msg = "Found {} dependency violations:\n{}".format(len(all_dependencies),
                                                           "\n".join([str(i) for i in all_dependencies]))
        raise AssertionError(msg)
    def test_preload_packages(self):
        """Load packages into the snakefood cache, including namespace packages"""
        preload_packages([SOURCE_PATH])
        module_1_expected_path = os.path.abspath(os.path.join(SOURCE_PATH, NS_PKG_1_NAME, NAMESPACE_PKG, "module_1.py"))
        module_2_expected_path = os.path.abspath(os.path.join(SOURCE_PATH, NS_PKG_2_NAME, NAMESPACE_PKG, "module_2.py"))

        self.assertEqual(module_1_expected_path,
                         find_dotted_module("namespacepkg.module_1", "test_method_1", None, 0)[0])
        self.assertEqual(module_1_expected_path, find_dotted_module(NAMESPACE_PKG, "module_1", None, 0)[0])
        self.assertEqual(module_2_expected_path,
                         find_dotted_module("namespacepkg.module_2", "test_method_2", None, 0)[0])
        self.assertEqual(module_2_expected_path, find_dotted_module(NAMESPACE_PKG, "module_2", None, 0)[0])
Пример #3
0
    def test_analysis_on_well_defined_dependency_map(self):
        config = DependencyConfig(
            source_paths=[SOURCE_PATH],
            analysis_packages=[IMPORT_LOCAL_DEPS_PKG],
            dependency_map={IMPORT_LOCAL_DEPS_PKG: ["other_package"]})
        root_cache = preload_packages(config.source_paths)
        package_dependency_map = build_package_dependencies(config, root_cache)

        analyzer = DependencyAnalyzer(config)
        self.assertFalse(analyzer.analyze(package_dependency_map).has_error)
Пример #4
0
    def test_analysis_when_dependency_list_of_package_is_empty(self):
        config = DependencyConfig(source_paths=[SOURCE_PATH],
                                  analysis_packages=[IMPORT_LOCAL_DEPS_PKG],
                                  dependency_map={IMPORT_LOCAL_DEPS_PKG: []})
        root_cache = preload_packages(config.source_paths)
        package_dependency_map = build_package_dependencies(config, root_cache)

        analyzer = DependencyAnalyzer(config)

        # since IMPORT_LOCAL_DEPS_PKG depends on OTHER_PACKAGE
        self.assertTrue(analyzer.analyze(package_dependency_map).has_error)
    def test_analysis_with_redundancy_in_dependency_map(self):
        config = DependencyConfig(
            source_paths=[SOURCE_PATH],
            analysis_packages=[IMPORT_LOCAL_DEPS_PKG],
            dependency_map={IMPORT_LOCAL_DEPS_PKG: ["other_package", "some-legacy-dependency"]}
        )
        root_cache = preload_packages(config.source_paths)
        package_dependency_map = build_package_dependencies(config, root_cache)

        analyzer = DependencyAnalyzer(config)
        self.assertTrue(analyzer.analyze(package_dependency_map).has_error)
    def test_analysis_on_well_defined_dependency_map(self):
        config = DependencyConfig(
            source_paths=[SOURCE_PATH],
            analysis_packages=[IMPORT_LOCAL_DEPS_PKG],
            dependency_map={IMPORT_LOCAL_DEPS_PKG: ["other_package"]}
        )
        root_cache = preload_packages(config.source_paths)
        package_dependency_map = build_package_dependencies(config, root_cache)

        analyzer = DependencyAnalyzer(config)
        self.assertFalse(analyzer.analyze(package_dependency_map).has_error)
Пример #7
0
    def test_analysis_when_analysis_package_not_in_dependency_map(self):
        """If a package in the analysis packages does not have an entry in the dependency map, do not allow any dependencies"""
        config = DependencyConfig(source_paths=[SOURCE_PATH],
                                  analysis_packages=[IMPORT_LOCAL_DEPS_PKG],
                                  dependency_map={})
        root_cache = preload_packages(config.source_paths)
        package_dependency_map = build_package_dependencies(config, root_cache)

        analyzer = DependencyAnalyzer(config)

        # since IMPORT_LOCAL_DEPS_PKG depends on OTHER_PACKAGE
        self.assertTrue(analyzer.analyze(package_dependency_map).has_error)
    def test_analysis_with_source_paths_not_allowed(self):
        config = DependencyConfig(
            source_paths=[SOURCE_PATH],
            analysis_packages=[SOURCE_FOLDER_PACKAGE_NAME2],
            dependency_map={SOURCE_FOLDER_PACKAGE_NAME1: [SOURCE_FOLDER_PACKAGE_NAME2]}
        )
        root_cache = preload_packages(config.source_paths)
        package_dependency_map = build_package_dependencies(config, root_cache)

        analyzer = DependencyAnalyzer(config)
        # deps not allowed from folder 2 to folder 1
        self.assertTrue(analyzer.analyze(package_dependency_map).has_error)
Пример #9
0
    def test_analysis_with_source_paths_not_allowed(self):
        config = DependencyConfig(
            source_paths=[SOURCE_PATH],
            analysis_packages=[SOURCE_FOLDER_PACKAGE_NAME2],
            dependency_map={
                SOURCE_FOLDER_PACKAGE_NAME1: [SOURCE_FOLDER_PACKAGE_NAME2]
            })
        root_cache = preload_packages(config.source_paths)
        package_dependency_map = build_package_dependencies(config, root_cache)

        analyzer = DependencyAnalyzer(config)
        # deps not allowed from folder 2 to folder 1
        self.assertTrue(analyzer.analyze(package_dependency_map).has_error)
Пример #10
0
    def test_analysis_with_redundancy_in_dependency_map(self):
        config = DependencyConfig(
            source_paths=[SOURCE_PATH],
            analysis_packages=[IMPORT_LOCAL_DEPS_PKG],
            dependency_map={
                IMPORT_LOCAL_DEPS_PKG:
                ["other_package", "some-legacy-dependency"]
            })
        root_cache = preload_packages(config.source_paths)
        package_dependency_map = build_package_dependencies(config, root_cache)

        analyzer = DependencyAnalyzer(config)
        self.assertTrue(analyzer.analyze(package_dependency_map).has_error)
    def test_analysis_when_dependency_list_of_package_is_empty(self):
        config = DependencyConfig(
            source_paths=[SOURCE_PATH],
            analysis_packages=[IMPORT_LOCAL_DEPS_PKG],
            dependency_map={IMPORT_LOCAL_DEPS_PKG: []}
        )
        root_cache = preload_packages(config.source_paths)
        package_dependency_map = build_package_dependencies(config, root_cache)

        analyzer = DependencyAnalyzer(config)

        # since IMPORT_LOCAL_DEPS_PKG depends on OTHER_PACKAGE
        self.assertTrue(analyzer.analyze(package_dependency_map).has_error)
Пример #12
0
def analyze_dependency(config_dict):
    """
    Analyzes Dependency

    :param config_dict: dictionary parsed from config file
    :return:
    """
    config = build_config(config_dict)
    analyse_cyclic_dependency(config)
    root_cache = preload_packages(config.source_paths)

    package_dependency_map = build_package_dependencies(config, root_cache)
    analyze_results([analyzer.analyze(package_dependency_map) for analyzer in build_analyzers(config)])
    def test_analysis_when_analysis_package_not_in_dependency_map(self):
        """If a package in the analysis packages does not have an entry in the dependency map, do not allow any dependencies"""
        config = DependencyConfig(
            source_paths=[SOURCE_PATH],
            analysis_packages=[IMPORT_LOCAL_DEPS_PKG],
            dependency_map={}
        )
        root_cache = preload_packages(config.source_paths)
        package_dependency_map = build_package_dependencies(config, root_cache)

        analyzer = DependencyAnalyzer(config)

        # since IMPORT_LOCAL_DEPS_PKG depends on OTHER_PACKAGE
        self.assertTrue(analyzer.analyze(package_dependency_map).has_error)
    def test_preload_packages(self):
        """Load packages into the snakefood cache, including namespace packages"""
        preload_packages([SOURCE_PATH])
        module_1_expected_path = os.path.abspath(
            os.path.join(SOURCE_PATH, NS_PKG_1_NAME, NAMESPACE_PKG,
                         "module_1.py"))
        module_2_expected_path = os.path.abspath(
            os.path.join(SOURCE_PATH, NS_PKG_2_NAME, NAMESPACE_PKG,
                         "module_2.py"))

        self.assertEqual(
            module_1_expected_path,
            find_dotted_module("namespacepkg.module_1", "test_method_1", None,
                               0)[0])
        self.assertEqual(
            module_1_expected_path,
            find_dotted_module(NAMESPACE_PKG, "module_1", None, 0)[0])
        self.assertEqual(
            module_2_expected_path,
            find_dotted_module("namespacepkg.module_2", "test_method_2", None,
                               0)[0])
        self.assertEqual(
            module_2_expected_path,
            find_dotted_module(NAMESPACE_PKG, "module_2", None, 0)[0])
Пример #15
0
def analyze_dependency(config_dict):
    """
    Analyzes Dependency

    :param config_dict: dictionary parsed from config file
    :return:
    """
    config = build_config(config_dict)
    analyse_cyclic_dependency(config)
    root_cache = preload_packages(config.source_paths)

    package_dependency_map = build_package_dependencies(config, root_cache)
    analyze_results([
        analyzer.analyze(package_dependency_map)
        for analyzer in build_analyzers(config)
    ])
 def setUp(self):
     preload_packages([SOURCE_PATH])
 def setUp(self):
     preload_packages([SOURCE_PATH])