Example #1
0
def test_diamond_dependency_resolution(make_dist):
    make_dist(name="dist1", install_requires=["dist2a", "dist2b"])
    make_dist(name="dist2a", install_requires=["dist3[y]>0.2"])
    make_dist(name="dist2b", install_requires=["dist3[x,z]<0.4"])
    make_dist(name="dist3", version="0.2")
    make_dist(name="dist3", version="0.3")
    make_dist(name="dist3", version="0.4")
    jdist = JohnnyDist("dist1")
    dist1, dist2a, dist2b, dist3 = flatten_deps(jdist)

    assert dist1 is jdist
    assert dist1.requires == ["dist2a", "dist2b"]
    assert dist1.required_by == []

    assert dist2a.name == "dist2a"
    assert dist2a.requires == ["dist3[y]>0.2"]
    assert dist2a.required_by == ["dist1"]

    assert dist2b.name == "dist2b"
    assert dist2b.requires == ["dist3[x,z]<0.4"]
    assert dist2b.required_by == ["dist1"]

    assert dist3.name == "dist3"
    assert dist3.required_by == ["dist2a", "dist2b"]
    assert dist3.extras_requested == ["x", "y", "z"]  # merged
    assert dist3.versions_available == ["0.2", "0.3", "0.4"]
    assert dist3.version_latest == "0.4"
    assert dist3.version_latest_in_spec == "0.3"
    assert str(dist3.req.specifier) == "<0.4,>0.2"
Example #2
0
def test_flatten_dist_with_deps():
    dist = JohnnyDist('fakedist[dev]')
    reqs = list(flatten_deps(dist))
    [dist0, dist1] = reqs
    assert dist0.name == 'fakedist'
    assert dist0 is dist
    assert str(dist1.req) == 'wheel>=0.30.0'
Example #3
0
def test_flatten_dist_with_deps(make_dist):
    make_dist(name="root", install_requires=["dep"])
    make_dist(name="dep")
    jdist = JohnnyDist("root")
    reqs = list(flatten_deps(jdist))
    [dist0, dist1] = reqs
    assert dist0 is jdist
    assert dist1.name == "dep"
Example #4
0
def test_resolve_unresolvable():
    dist = JohnnyDist('distX')
    data = dist.serialise(recurse=False,
                          fields=['project_name', 'summary', 'requires'])
    assert data == [{
        'project_name': 'distX',
        'summary': 'Dist with unresolvable dependencies',
        'requires':
        ['distC (<=0.1)',
         'distC (>0.2)'],  # this installation requirement can not be resolved
    }]
    gen = flatten_deps(dist)
    assert next(gen) is dist
    with ShouldRaise(
            DistributionNotFound(
                'No matching distribution found for distc<=0.1,>0.2')):
        next(gen)
Example #5
0
def test_resolve_unresolvable(make_dist):
    make_dist(name="dist1",
              description="unresolvable",
              install_requires=["dist2<=0.1", "dist2>0.2"])
    make_dist(name="dist2", version="0.1")
    make_dist(name="dist2", version="0.3")
    dist = JohnnyDist("dist1")
    data = dist.serialise(recurse=False,
                          fields=["project_name", "summary", "requires"])
    assert data == [{
        "project_name": "dist1",
        "summary": "unresolvable",
        "requires": ["dist2<=0.1", "dist2>0.2"],
    }]
    gen = flatten_deps(dist)
    assert next(gen) is dist
    with pytest.raises(CalledProcessError) as cm:
        next(gen)
    msg = "DistributionNotFound: No matching distribution found for dist2<=0.1,>0.2\n"
    assert cm.value.output.decode().endswith(msg)
Example #6
0
def test_flatten_dist_with_nodeps(make_dist):
    make_dist()
    jdist = JohnnyDist("jdtest")
    reqs = list(flatten_deps(jdist))
    assert reqs == [jdist]
Example #7
0
def test_flatten_dist_with_nodeps():
    dist = JohnnyDist('fakedist')
    reqs = list(flatten_deps(dist))
    assert reqs == [dist]