def test_merge_pypi_sdist_metadata(): recipe = PyPi(name="gsw", version="3.3.1") pypi_metadata = recipe._get_pypi_metadata(name="gsw", version="3.3.1") sdist_metadata = recipe._get_sdist_metadata(pypi_metadata["sdist_url"], "gsw") merged_data = PyPi._merge_pypi_sdist_metadata(pypi_metadata, sdist_metadata) assert merged_data["compilers"] == ["c"] assert sorted(merged_data["setup_requires"]) == sorted(["numpy"])
def test_panel_entry_points(tmpdir): recipe = PyPi(name="panel", version="0.9.1") recipe.generate_recipe(folder_path=str(tmpdir)) recipe_path = str(tmpdir / "panel" / "meta.yaml") with open(recipe_path, "r") as f: content = f.read() assert "- panel = panel.cli:main" in content
def test_injection_distutils_compiler_gsw(): recipe = PyPi(name="gsw", version="3.3.1") data = recipe._get_sdist_metadata( "https://pypi.io/packages/source/g/gsw/gsw-3.3.1.tar.gz", "gsw" ) assert data.get("compilers") == ["c"] assert data["packages"] == ["gsw"]
def test_recipe_extension(): recipe = PyPi(name="azure-identity", version="1.3.1") assert ( recipe["source"]["url"][0].value == "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/" "azure-identity-{{ version }}.zip" )
def test_get_all_selectors_pypi(): recipe = PyPi(name="pytest", version="5.3.1") assert recipe._get_all_selectors_pypi([ ("(", "sys_platform", "==", "win32", "", "and"), ("", "python_version", "==", "2.7", ")", "and"), ("", "extra", "==", "socks", "", ""), ]) == ["(", "win", "and", "py==27", ")"]
def test_zipp_recipe_tags_on_deps(): recipe = PyPi(name="zipp", version="3.0.0") assert recipe["build"]["noarch"] assert recipe["requirements"]["host"] == [ "pip", "python >=3.6", "setuptools_scm >=3.4.1", ]
def test_requests_recipe_extra_deps(capsys): CLIConfig().stdout = True recipe = PyPi(name="requests", version="2.22.0") captured_stdout = capsys.readouterr() assert "win-inet-pton" not in recipe["requirements"]["run"] assert recipe["build"]["noarch"] assert not recipe["build"]["skip"] assert f"{Fore.GREEN}{Style.BRIGHT}python" in captured_stdout.out
def test_injection_distutils_setup_reqs_ensure_list(): pkg_name, pkg_ver = "pyinstaller-hooks-contrib", "2020.7" recipe = PyPi(name=pkg_name, version=pkg_ver) data = recipe._get_sdist_metadata( f"https://pypi.io/packages/source/p/{pkg_name}/{pkg_name}-{pkg_ver}.tar.gz", pkg_name, ) assert data.get("setup_requires") == ["setuptools >= 30.3.0"]
def test_run_requirements_sdist(): recipe = PyPi(name="botocore", version="1.14.17") assert sorted(recipe["requirements"]["run"]) == sorted([ "docutils >=0.10,<0.16", "jmespath >=0.7.1,<1.0.0", "python", "python-dateutil >=2.1,<3.0.0", "urllib3 >=1.20,<1.26", ])
def test_ciso_recipe(): recipe = PyPi(name="ciso", version="0.1.0") assert sorted(recipe["requirements"]["host"]) == sorted( ["cython", "numpy", "pip", "python", "versioneer"]) assert sorted(recipe["requirements"]["run"]) == sorted( ["cython", "python", "<{ pin_compatible('numpy') }}"]) assert recipe["test"]["commands"] == "pip check" assert recipe["test"]["requires"] == "pip" assert recipe["test"]["imports"] == "ciso"
def test_pymc_recipe_fortran(): recipe = PyPi(name="pymc", version="2.3.6") assert sorted(recipe["requirements"]["build"]) == sorted( ["<{ compiler('c') }}", "<{ compiler('fortran') }}"]) assert sorted(recipe["requirements"]["host"]) == sorted( ["numpy", "python", "pip"]) assert sorted(recipe["requirements"]["run"]) == sorted( ["<{ pin_compatible('numpy') }}", "python"]) assert not recipe["build"]["noarch"]
def test_pytest_recipe_entry_points(): recipe = PyPi(name="pytest", version="5.3.5") assert sorted(recipe["build"]["entry_points"]) == sorted( ["pytest=pytest:main", "py.test=pytest:main"]) assert recipe["about"]["license"] == "MIT" assert recipe["about"]["license_file"] == "LICENSE" assert recipe["build"]["skip"].values[0].value assert recipe["build"]["skip"].values[0].selector == "py2k" assert not recipe["build"]["noarch"]
def test_deps_comments(): recipe = PyPi(name="kubernetes_asyncio", version="11.2.0") assert recipe["requirements"]["run"] == [ "aiohttp >=2.3.10,<4.0.0", "certifi >=14.05.14", "python", "python-dateutil >=2.5.3", "pyyaml >=3.12", "setuptools >=21.0.0", "six >=1.9.0", "urllib3 >=1.24.2", ]
def test_injection_distutils(): recipe = PyPi(name="hypothesis", version="5.5.1") data = recipe._get_sdist_metadata( "https://pypi.io/packages/source/h/hypothesis/hypothesis-5.5.1.tar.gz", "hypothesis", ) assert sorted(data["install_requires"]) == sorted( ["attrs>=19.2.0", "sortedcontainers>=2.1.0,<3.0.0"]) assert data["entry_points"] == { "pytest11": ["hypothesispytest = hypothesis.extra.pytestplugin"] } assert data["version"] == "5.5.1" assert data["name"] == "hypothesis" assert not data.get("compilers")
def test_mypy_deps_normalization_and_entry_points(): recipe = PyPi(name="mypy", version="0.770") assert "mypy_extensions >=0.4.3,<0.5.0" in recipe["requirements"]["run"] assert "mypy-extensions >=0.4.3,<0.5.0" not in recipe["requirements"]["run"] assert "typed-ast >=1.4.0,<1.5.0" in recipe["requirements"]["run"] assert "typed_ast <1.5.0,>=1.4.0" not in recipe["requirements"]["run"] assert "typing-extensions >=3.7.4" in recipe["requirements"]["run"] assert "typing_extensions >=3.7.4" not in recipe["requirements"]["run"] assert recipe["build"]["entry_points"].values == [ "mypy=mypy.__main__:console_entry", "stubgen=mypy.stubgen:main", "stubtest=mypy.stubtest:main", "dmypy=mypy.dmypy.client:console_entry", ]
def test_sequence_inside_another_in_dependencies(): recipe = PyPi(name="unittest2", version="1.1.0") assert recipe["requirements"]["host"] == [ "argparse", "pip", "python", "six >=1.4", "traceback2", ] assert recipe["requirements"]["run"] == [ "argparse", "python", "six >=1.4", "traceback2", ]
def test_extract_pypi_requirements(pypi_metadata): recipe = PyPi(name="pytest", version="5.3.1") pypi_reqs = recipe._extract_requirements(pypi_metadata["info"]) assert sorted(pypi_reqs["host"]) == sorted(["python", "pip"]) assert sorted(pypi_reqs["run"]) == sorted([ "python", "py >=1.5.0", "packaging", "attrs >=17.4.0", "more-itertools >=4.0.0", "pluggy <1.0,>=0.12", "wcwidth", "pathlib2 >=2.2.0 # [py<36]", "importlib-metadata >=0.12 # [py<38]", "atomicwrites >=1.0 # [win]", "colorama # [win]", ])
def test_injection_distutils_pytest(): recipe = PyPi(name="pytest", version="5.3.2") data = recipe._get_sdist_metadata( "https://pypi.io/packages/source/p/pytest/pytest-5.3.2.tar.gz", "pytest") assert sorted(data["install_requires"]) == sorted([ "py>=1.5.0", "packaging", "attrs>=17.4.0", "more-itertools>=4.0.0", 'atomicwrites>=1.0;sys_platform=="win32"', 'pathlib2>=2.2.0;python_version<"3.6"', 'colorama;sys_platform=="win32"', "pluggy>=0.12,<1.0", 'importlib-metadata>=0.12;python_version<"3.8"', "wcwidth", ]) assert sorted(data["setup_requires"]) == sorted( ["setuptools>=40.0", "setuptools_scm"]) assert not data.get("compilers")
def test_tzdata_without_setup_py(): recipe = PyPi(name="tzdata", version="2020.1") assert recipe["build"]["noarch"] == "python" assert recipe["about"]["home"] == "https://github.com/python/tzdata"
def test_botocore_recipe_license_name(): recipe = PyPi(name="botocore", version="1.15.8") assert recipe["about"]["license"] == "Apache-2.0"
def test_keyring_host_appearing_twice(): recipe = PyPi(name="keyring", version="21.1.1") assert "importlib-metadata" in recipe["requirements"]["run"] assert "importlib_metadata" not in recipe["requirements"]["run"]
def test_requests_recipe_extra_deps(): recipe = PyPi(name="requests", version="2.22.0") assert "win-inet-pton" not in recipe["requirements"]["run"] assert recipe["build"]["noarch"] assert not recipe["build"]["skip"]
def test_cythongsl_recipe_build(): recipe = PyPi(name="cythongsl", version="0.2.2") assert recipe["requirements"]["build"] == "<{ compiler('c') }}" assert recipe["requirements"]["host"] == ["cython >=0.16", "pip", "python"] assert not recipe["build"]["noarch"]
def test_python_requires_setup_py(): recipe = PyPi(name="pygments", version="2.6.1") assert "noarch" in recipe["build"] assert "python >=3.5" in recipe["requirements"]["host"] assert "python >=3.5" in recipe["requirements"]["run"]
def test_django_rest_framework_xml_license(): recipe = PyPi(name="djangorestframework-xml", version="1.4.0") assert recipe["about"]["license"] == "BSD-3-Clause" assert recipe["about"]["license_file"] == "LICENSE" assert recipe["test"]["imports"][0].value == "rest_framework_xml"
def test_nbdime_license_type(): recipe = PyPi(name="nbdime", version="2.0.0") assert recipe["about"]["license"] == "BSD-3-Clause" assert "setupbase" not in recipe["requirements"]["host"]
def test_build_noarch_skip(): recipe = PyPi(name="hypothesis", version="5.5.2") assert recipe["build"]["noarch"].values[0] == "python" assert not recipe["build"]["skip"].values
def test_recipe_with_just_py_modules(): recipe = PyPi(name="python-markdown-math", version="0.7") assert recipe["test"]["imports"] == "mdx_math"
def test_multiples_exit_setup(): """Bug fix #146""" recipe = PyPi(name="pyproj", version="2.6.1") assert recipe
def test_keep_filename_license(): recipe = PyPi(name="respx", version="0.10.1") assert recipe["about"]["license_file"] == "LICENSE.md"