コード例 #1
0
def test_check_failing_distribution(monkeypatch):
    renderer = pretend.stub(
        render=pretend.call_recorder(lambda *a, **kw: None))
    package = pretend.stub(metadata_dictionary=lambda: {
        "description": "blah",
        "description_content_type": 'text/markdown',
    })
    output_stream = check.StringIO()
    warning_stream = "WARNING"

    monkeypatch.setattr(check, "_RENDERERS", {None: renderer})
    monkeypatch.setattr(check, "_find_dists", lambda a: ["dist/dist.tar.gz"])
    monkeypatch.setattr(
        check,
        "PackageFile",
        pretend.stub(from_filename=lambda *a, **kw: package),
    )
    monkeypatch.setattr(check, "_WarningStream", lambda: warning_stream)

    assert check.check("dist/*", output_stream=output_stream)
    assert output_stream.getvalue() == (
        "Checking dist/dist.tar.gz: FAILED\n"
        "  `long_description` has syntax errors in markup and would not be "
        "rendered on PyPI.\n"
        "    WARNING")
    assert renderer.render.calls == [
        pretend.call("blah", stream=warning_stream)
    ]
コード例 #2
0
def test_check_no_distributions(monkeypatch):
    stream = check.StringIO()

    monkeypatch.setattr(check, "_find_dists", lambda a: [])

    assert not check.check("dist/*", output_stream=stream)
    assert stream.getvalue() == "No files to check.\n"
コード例 #3
0
def test_check_failing_distribution(monkeypatch):
    renderer = pretend.stub(
        render=pretend.call_recorder(lambda *a, **kw: None))
    package = pretend.stub(metadata_dictionary=lambda: {"description": "blah"})
    output_stream = check.StringIO()
    warning_stream = "WARNING"

    monkeypatch.setattr(check, "_RENDERERS", {"": renderer})
    monkeypatch.setattr(check, "_find_dists", lambda a: ["dist/dist.tar.gz"])
    monkeypatch.setattr(
        check,
        "PackageFile",
        pretend.stub(from_filename=lambda *a, **kw: package),
    )
    monkeypatch.setattr(check, "_WarningStream", lambda: warning_stream)

    assert check.check("dist/*", output_stream=output_stream)
    assert output_stream.getvalue() == (
        "Checking distribution dist/dist.tar.gz: Failed\n"
        "The project's long_description has invalid markup which will not be "
        "rendered on PyPI. The following syntax errors were detected:\n"
        "WARNING")
    assert renderer.render.calls == [
        pretend.call("blah", stream=warning_stream)
    ]
コード例 #4
0
def test_check_passing_distribution(monkeypatch):
    renderer = pretend.stub(
        render=pretend.call_recorder(lambda *a, **kw: "valid"))
    package = pretend.stub(metadata_dictionary=lambda: {
        "description": "blah",
        "description_content_type": "text/markdown",
    })
    output_stream = io.StringIO()
    warning_stream = ""

    monkeypatch.setattr(check, "_RENDERERS", {None: renderer})
    monkeypatch.setattr(commands, "_find_dists",
                        lambda a: ["dist/dist.tar.gz"])
    monkeypatch.setattr(
        package_file,
        "PackageFile",
        pretend.stub(from_filename=lambda *a, **kw: package),
    )
    monkeypatch.setattr(check, "_WarningStream", lambda: warning_stream)

    assert not check.check("dist/*", output_stream=output_stream)
    assert output_stream.getvalue() == "Checking dist/dist.tar.gz: PASSED\n"
    assert renderer.render.calls == [
        pretend.call("blah", stream=warning_stream)
    ]
コード例 #5
0
ファイル: test_check.py プロジェクト: pypa/twine
def test_check_passing_distribution(monkeypatch):
    renderer = pretend.stub(
        render=pretend.call_recorder(lambda *a, **kw: "valid")
    )
    package = pretend.stub(metadata_dictionary=lambda: {
        "description": "blah", 'description_content_type': 'text/markdown',
    })
    output_stream = check.StringIO()
    warning_stream = ""

    monkeypatch.setattr(check, "_RENDERERS", {None: renderer})
    monkeypatch.setattr(check, "_find_dists", lambda a: ["dist/dist.tar.gz"])
    monkeypatch.setattr(
        check,
        "PackageFile",
        pretend.stub(from_filename=lambda *a, **kw: package),
    )
    monkeypatch.setattr(check, "_WarningStream", lambda: warning_stream)

    assert not check.check("dist/*", output_stream=output_stream)
    assert (
        output_stream.getvalue()
        == "Checking distribution dist/dist.tar.gz: Passed\n"
    )
    assert renderer.render.calls == [
        pretend.call("blah", stream=warning_stream)
    ]
コード例 #6
0
ファイル: test_check.py プロジェクト: pypa/twine
def test_check_no_distributions(monkeypatch):
    stream = check.StringIO()

    monkeypatch.setattr(check, "_find_dists", lambda a: [])

    assert not check.check("dist/*", output_stream=stream)
    assert stream.getvalue() == ""
コード例 #7
0
ファイル: test_check.py プロジェクト: pypa/twine
def test_check_failing_distribution(monkeypatch):
    renderer = pretend.stub(
        render=pretend.call_recorder(lambda *a, **kw: None)
    )
    package = pretend.stub(metadata_dictionary=lambda: {
        "description": "blah", "description_content_type": 'text/markdown',
    })
    output_stream = check.StringIO()
    warning_stream = "WARNING"

    monkeypatch.setattr(check, "_RENDERERS", {None: renderer})
    monkeypatch.setattr(check, "_find_dists", lambda a: ["dist/dist.tar.gz"])
    monkeypatch.setattr(
        check,
        "PackageFile",
        pretend.stub(from_filename=lambda *a, **kw: package),
    )
    monkeypatch.setattr(check, "_WarningStream", lambda: warning_stream)

    assert check.check("dist/*", output_stream=output_stream)
    assert output_stream.getvalue() == (
        "Checking distribution dist/dist.tar.gz: Failed\n"
        "The project's long_description has invalid markup which will not be "
        "rendered on PyPI. The following syntax errors were detected:\n"
        "WARNING"
    )
    assert renderer.render.calls == [
        pretend.call("blah", stream=warning_stream)
    ]
コード例 #8
0
def test_check_no_description(monkeypatch, capsys):
    package = pretend.stub(metadata_dictionary=lambda: {
        'description': None,
        'description_content_type': None,
    })

    monkeypatch.setattr(check, "_find_dists", lambda a: ["dist/dist.tar.gz"])
    monkeypatch.setattr(
        check,
        "PackageFile",
        pretend.stub(from_filename=lambda *a, **kw: package),
    )

    # used to crash with `AttributeError`
    output_stream = check.StringIO()
    check.check("dist/*", output_stream=output_stream)
    assert output_stream.getvalue() == (
        'Checking dist/dist.tar.gz: PASSED, with warnings\n'
        '  warning: `long_description_content_type` missing.  '
        'defaulting to `text/x-rst`.\n'
        '  warning: `long_description` missing.\n')
コード例 #9
0
ファイル: test_check.py プロジェクト: pypa/twine
def test_check_no_description(monkeypatch, capsys):
    package = pretend.stub(metadata_dictionary=lambda: {
        'description': None, 'description_content_type': None,
    })

    monkeypatch.setattr(check, "_find_dists", lambda a: ["dist/dist.tar.gz"])
    monkeypatch.setattr(
        check,
        "PackageFile",
        pretend.stub(from_filename=lambda *a, **kw: package),
    )

    # used to crash with `AttributeError`
    output_stream = check.StringIO()
    check.check("dist/*", output_stream=output_stream)
    assert output_stream.getvalue() == (
        'Checking distribution dist/dist.tar.gz: '
        'warning: `long_description_content_type` missing.  '
        'defaulting to `text/x-rst`.\n'
        'warning: `long_description` missing.\n'
        'Passed\n'
    )
コード例 #10
0
ファイル: test_check.py プロジェクト: sunjianzhou/twine
def test_check_passing_distribution_with_none_renderer(content_type,
                                                       monkeypatch):
    """Pass when rendering a content type can't fail."""
    package = pretend.stub(metadata_dictionary=lambda: {
        "description": "blah",
        "description_content_type": content_type,
    })

    monkeypatch.setattr(commands, "_find_dists",
                        lambda a: ["dist/dist.tar.gz"])
    monkeypatch.setattr(
        package_file,
        "PackageFile",
        pretend.stub(from_filename=lambda *a, **kw: package),
    )

    output_stream = io.StringIO()
    assert not check.check(["dist/*"], output_stream=output_stream)
    assert output_stream.getvalue() == "Checking dist/dist.tar.gz: PASSED\n"
コード例 #11
0
def test_check_passing_distribution(monkeypatch):
    renderer = pretend.stub(
        render=pretend.call_recorder(lambda *a, **kw: "valid"))
    package = pretend.stub(metadata_dictionary=lambda: {"description": "blah"})
    output_stream = check.StringIO()
    warning_stream = ""

    monkeypatch.setattr(check, "_RENDERERS", {"": renderer})
    monkeypatch.setattr(check, "_find_dists", lambda a: ["dist/dist.tar.gz"])
    monkeypatch.setattr(
        check,
        "PackageFile",
        pretend.stub(from_filename=lambda *a, **kw: package),
    )
    monkeypatch.setattr(check, "_WarningStream", lambda: warning_stream)

    assert not check.check("dist/*", output_stream=output_stream)
    assert (output_stream.getvalue() ==
            "Checking distribution dist/dist.tar.gz: Passed\n")
    assert renderer.render.calls == [
        pretend.call("blah", stream=warning_stream)
    ]
コード例 #12
0
def readme(package):
    """Checks setup.py's ``long_description`` syntax.

    This program checks the syntax of the contents of the
    ``long_description`` field at the package's ``setup()`` function.
    It verifies it will be correctly displayed at PyPI.
    """

    for k in package:

        logger.info("Checking python package %s", k)
        # twine check dist/*.zip

        from twine.commands.check import check

        failed = check([k])

        if failed:
            raise RuntimeError("twine check (a.k.a. readme check) %s: FAILED" %
                               k)
        else:
            logger.info("twine check (a.k.a. readme check) %s: OK", k)
コード例 #13
0
ファイル: test_check.py プロジェクト: hugovk/twine
def test_strict_fails_on_warnings(monkeypatch, capsys):
    package = pretend.stub(metadata_dictionary=lambda: {
        "description": None,
        "description_content_type": None,
    })

    monkeypatch.setattr(commands, "_find_dists",
                        lambda a: ["dist/dist.tar.gz"])
    monkeypatch.setattr(
        package_file,
        "PackageFile",
        pretend.stub(from_filename=lambda *a, **kw: package),
    )

    # used to crash with `AttributeError`
    output_stream = io.StringIO()
    assert check.check(["dist/*"], output_stream=output_stream, strict=True)
    assert output_stream.getvalue() == (
        "Checking dist/dist.tar.gz: FAILED, due to warnings\n"
        "  warning: `long_description_content_type` missing. "
        "defaulting to `text/x-rst`.\n"
        "  warning: `long_description` missing.\n")
コード例 #14
0
def build_devtools(obj, twine_check):
    bootstrap = obj["bootstrap"]
    condarc_options = obj["condarc_options"]
    conda_build_config = obj["conda_build_config"]
    work_dir = obj["work_dir"]
    upload_channel = obj["upload_channel"]
    recipe_append = os.path.join(work_dir, "data", "recipe_append.yaml")

    logger.info(
        "Using the following channels during build:\n  - %s",
        "\n  - ".join(condarc_options["channels"]),
    )
    logger.info("Merging conda configuration files...")
    conda_config = make_conda_config(conda_build_config, None, recipe_append,
                                     condarc_options)

    recipe_dir = os.path.join(obj["work_dir"], "conda")
    metadata = get_rendered_metadata(recipe_dir, conda_config)
    paths = get_output_path(metadata, conda_config)

    # asserts we're building at the right location
    for path in paths:
        assert path.startswith(os.path.join(obj["conda_root"], "conda-bld")), (
            'Output path for build (%s) does not start with "%s" - this '
            "typically means this build is running on a shared builder and "
            "the file ~/.conda/environments.txt is polluted with other "
            "environment paths.  To fix, empty that file and set its mode "
            "to read-only for all." %
            (path, os.path.join(obj["conda_root"], "conda-bld")))

    # retrieve the current build number(s) for this build
    build_numbers = [
        next_build_number(upload_channel, os.path.basename(k))[0]
        for k in paths
    ]

    # homogenize to the largest build number
    build_number = max([int(k) for k in build_numbers])

    # runs the build using the conda-build API
    # notice we cannot build from the pre-parsed metadata because it has already
    # resolved the "wrong" build number.  We'll have to reparse after setting the
    # environment variable BOB_BUILD_NUMBER.
    bootstrap.set_environment("BOB_BUILD_NUMBER", str(build_number))
    with root_logger_protection():
        conda_build.api.build(recipe_dir, config=conda_config)

    # checks if long_description of python package renders fine
    if twine_check:
        from twine.commands.check import check

        package = glob.glob("dist/*.zip")
        failed = check(package)

        if failed:
            raise RuntimeError("twine check (a.k.a. readme check) %s: FAILED" %
                               package[0])
        else:
            logger.info("twine check (a.k.a. readme check) %s: OK", package[0])

    git_clean_build(bootstrap.run_cmdline, verbose=(obj["verbose"] >= 3))