예제 #1
0
def test_ast_parser_finds_fully_qualified_setup(setup_py_dir):
    target = setup_py_dir.joinpath(
        "package_using_fully_qualified_setuptools/setup.py"
    ).as_posix()
    parsed = ast_parse_setup_py(target)
    analyzer = ast_parse_file(target)
    expected = {
        "name": "test_package",
        "version": "1.0.0",
        "description": "The Backend HTTP Server",
        "long_description": "This is a package",
        "install_requires": ["six"],
        "tests_require": ["coverage", "flaky"],
        "extras_require": {"testing": ["coverage", "flaky"]},
        "package_dir": {"": "src"},
        "packages": ["test_package"],
        "include_package_data": True,
        "zip_safe": False,
    }
    for k, v in expected.items():
        assert k in parsed
        if isinstance(v, bool):
            assert str(parsed[k]) == str(v), parsed[k]
        else:
            assert parsed[k] == v, parsed[k]
    assert analyzer.parse_setup_function() == parsed
예제 #2
0
def test_ast_parser_finds_variables(setup_py_dir):
    parsed = ast_parse_setup_py(
        setup_py_dir.joinpath(
            "package_with_extras_as_variable/setup.py").as_posix())
    expected = {
        "name": "test_package",
        "version": "1.0.0",
        "description": "The Backend HTTP Server",
        "long_description": "This is a package",
        "install_requires": ["six"],
        "tests_require": ["coverage", "flaky"],
        "extras_require": {
            "testing": ["coverage", "flaky"]
        },
        "package_dir": {
            "": "src"
        },
        "packages": ["test_package"],
        "include_package_data": True,
        "zip_safe": False,
    }
    for k, v in expected.items():
        assert k in parsed
        if isinstance(v, bool):
            assert str(parsed[k]) == str(v), parsed[k]
        else:
            assert parsed[k] == v, parsed[k]
예제 #3
0
def test_ast_parser_handles_exceptions(artifact_dir):
    path = artifact_dir.joinpath("git/pyinstaller/setup.py")
    result = ast_parse_setup_py(path.as_posix())
    analyzer = ast_parse_file(path.as_posix())
    assert result is not None
    assert "altgraph" in result["install_requires"]
    for k, v in analyzer.parse_setup_function().items():
        assert k in result
        assert result[k] == v or (isinstance(v, dict) and isinstance(
            list(v.keys())[0], ast.Attribute))
def test_ast_parser_handles_binops(setup_py_dir):
    target = setup_py_dir.joinpath(
        "package_with_conditional_install_requires/setup.py").as_posix()
    parsed = ast_parse_setup_py(target)
    expected = [
        "azure-common>=1.1.5",
        "cryptography",
        "python-dateutil",
        "requests",
    ]
    assert list(sorted(parsed["install_requires"])) == list(sorted(expected))
def test_ast_parser_handles_binops(setup_py_dir):
    target = setup_py_dir.joinpath(
        "package_with_setup_from_dict/setup.py").as_posix()
    parsed = ast_parse_setup_py(target)
    assert parsed["name"] == "test package"
    assert parsed["version"] == "1.0.0"
    expected = [
        "pytest",
        "flake8",
    ]
    assert list(sorted(parsed["extras_require"]["tests"])) == list(
        sorted(expected))
예제 #6
0
def test_ast_parser_handles_repeated_assignments(setup_py_dir):
    target = setup_py_dir.joinpath(
        "package_with_repeated_assignments/setup.py").as_posix()
    parsed = ast_parse_setup_py(target)
    analyzer = ast_parse_file(target)
    assert parsed["name"] == "test_package_with_repeated_assignments"
    assert isinstance(parsed["version"], str) is False
    assert parsed["install_requires"] == ["six"]
    analyzer_parsed = analyzer.parse_setup_function()
    # the versions in this instance are AST objects as they come from
    # os.environ and will need to be parsed downstream from here, so
    # equality comparisons will fail
    analyzer_parsed.pop("version")
    parsed.pop("version")
    assert analyzer_parsed == parsed
예제 #7
0
def test_ast_parser_handles_binops(setup_py_dir):
    target = setup_py_dir.joinpath(
        "package_with_conditional_install_requires/setup.py").as_posix()
    parsed = ast_parse_setup_py(target)
    analyzer = ast_parse_file(target)
    expected = [
        "azure-common>=1.1.5",
        "cryptography",
        "python-dateutil",
        "requests",
    ]
    if six.PY2:
        expected.append("futures")
    assert list(sorted(parsed["install_requires"])) == list(sorted(expected))
    assert analyzer.parse_setup_function() == parsed
def test_ast_parser_finds_fully_qualified_setup(setup_py_dir):
    target = setup_py_dir.joinpath(
        "package_using_fully_qualified_setuptools/setup.py").as_posix()
    parsed = ast_parse_setup_py(target)
    expected = {
        "name": "test_package",
        "version": "1.0.0",
        "install_requires": ["six"],
        "extras_require": {
            "testing": ["coverage", "flaky"]
        },
    }
    for k, v in expected.items():
        assert k in parsed
        if isinstance(v, bool):
            assert str(parsed[k]) == str(v), parsed[k]
        else:
            assert parsed[k] == v, parsed[k]
예제 #9
0
def test_ast_parser_handles_dependency_on_env_vars(env_vars,
                                                   expected_install_requires,
                                                   setup_py_dir):
    @contextlib.contextmanager
    def modified_environ(**update):
        env = os.environ
        try:
            env.update(update)
            yield
        finally:
            [env.pop(k) for k in update]

    with modified_environ(**env_vars):
        parsed = ast_parse_setup_py(
            setup_py_dir.joinpath(
                "package_with_dependence_on_env_vars/setup.py").as_posix())
        assert list(sorted(parsed["install_requires"])) == list(
            sorted(expected_install_requires))
예제 #10
0
def test_ast_parse_from_dict_with_name(setup_py_dir):
    parsed = ast_parse_setup_py(
        (setup_py_dir /
         "package_with_setup_from_dict_with_name/setup.py").as_posix())
    assert parsed["install_requires"] == ["requests"]
예제 #11
0
def test_ast_parser_handles_annoted_assignments(setup_py_dir):
    parsed = ast_parse_setup_py(
        setup_py_dir.joinpath(
            "package_with_annoted_assignments/setup.py").as_posix())
    assert parsed["extras_require"] == {"docs": ["sphinx", "sphinx-argparse"]}