Beispiel #1
0
def test_no_rev_two_constraints():
    dep = DependencyMaker.from_params(
        raw_name='Django',
        constraint='',
        source=RootDependency(),
        url='https://github.com/django/django.git',
    )[0]
    assert isinstance(dep.link, VCSLink)
    assert isinstance(dep.repo, GitRepo)
    dep.repo = PatchedGitRepo(dep.link)

    dep2 = DependencyMaker.from_params(
        raw_name='Django',
        constraint='<=1.9',
        source=RootDependency(),
    )[0]
    dep += dep2
    assert isinstance(dep.link, VCSLink)

    releases = set()
    for group in dep.groups:
        releases.update(set(group.releases))
    assert len(releases) == 2

    versions = {str(release.version) for release in releases}
    assert versions == {'1.7', '1.9'}
Beispiel #2
0
def test_with_rev_two_constraints():
    commit = '0cf85e6b074794ac91857aa097f0b3dc3e6d9468'
    dep = DependencyMaker.from_params(
        raw_name='Django',
        constraint='',
        source=RootDependency(),
        url='https://github.com/django/django.git@' + commit,
    )[0]
    assert isinstance(dep.link, VCSLink)
    assert isinstance(dep.repo, GitRepo)
    dep.repo = PatchedGitRepo(dep.link)

    dep2 = DependencyMaker.from_params(
        raw_name='Django',
        constraint='<=1.11',
        source=RootDependency(),
    )[0]
    dep += dep2
    dep3 = DependencyMaker.from_params(
        raw_name='Django',
        constraint='>=1.7',
        source=RootDependency(),
    )[0]
    dep += dep3
    assert isinstance(dep.link, VCSLink)

    releases = set()
    for group in dep.groups:
        releases.update(set(group.releases))
    assert len(releases) == 1

    versions = {str(release.version) for release in releases}
    assert versions == {'1.11'}
Beispiel #3
0
def test_format():
    root = RootDependency()
    text = (
        'hypothesis[django]<=3.0.0; '
        'python_version == "2.7" and '
        'platform_python_implementation == "CPython"'
    )
    req = PackagingRequirement(text)
    deps = DependencyMaker.from_requirement(root, req)

    # test dep
    assert deps[0].name == 'hypothesis'
    assert deps[1].name == 'hypothesis[django]'
    assert str(deps[0].constraint) == '<=3.0.0'
    assert str(deps[0].marker).startswith('python_version == "2.7"')

    # test format
    req = Requirement(dep=deps[0], lock=False)
    req.extra_deps = (deps[1], )
    result = PIPConverter(lock=False)._format_req(req=req)
    assert 'hypothesis[django]' in result
    assert '<=3.0.0' in result
    assert 'python_version == "2.7"' in result
    assert 'from root' not in result
    assert result.startswith(text)
Beispiel #4
0
def test_conda_get_releases_git():
    repo = CondaGitRepo(channels=['conda-forge'])
    root = RootDependency()
    dep = DependencyMaker.from_requirement(source=root, req='textdistance')[0]
    releases = repo.get_releases(dep=dep)
    versions = {str(release.version) for release in releases}
    assert not {'3.0.3', '3.1.0', '4.0.0', '4.1.0'} - versions
Beispiel #5
0
def test_conda_deps_git():
    repo = CondaGitRepo(channels=['bioconda'])
    root = RootDependency()
    dep = DependencyMaker.from_requirement(source=root, req='anvio')[0]
    releases = repo.get_releases(dep=dep)
    deps = {dep.name for dep in releases[0].dependencies}
    assert 'prodigal' in deps
Beispiel #6
0
def test_get_releases(repository_path):
    repo = WarehouseLocalRepo(name='pypi', path=repository_path)
    root = RootDependency()
    dep = DependencyMaker.from_requirement(source=root, req='dephell-discover')[0]
    releases = repo.get_releases(dep=dep)
    releases = {str(r.version): r for r in releases}
    assert set(releases) == {'0.2.4', '0.2.5'}
Beispiel #7
0
def get_deps():
    root = RootDependency()
    response = requests.get(URL)
    for info in response.json()['rows']:
        yield from DependencyMaker.from_requirement(
            source=root,
            req=Requirement(info['project']),
        )
Beispiel #8
0
def test_format_req():
    deps = DependencyMaker.from_params(
        raw_name='Django',
        constraint='>=1.9',
        source=RootDependency(),
    )
    content = PIPFileConverter()._format_req(Requirement(deps[0], lock=False))
    assert content == '>=1.9'
def test_get_releases():
    root = RootDependency()
    dep = DependencyMaker.from_requirement(source=root, req='dephell')[0]
    repo = WarehouseSimpleRepo(name='pypi', url=DEFAULT_WAREHOUSE)
    releases = repo.get_releases(dep=dep)
    releases = {str(r.version): r for r in releases}
    assert '0.7.0' in set(releases)
    assert str(releases['0.7.0'].python) == '>=3.5'
    assert len(releases['0.7.0'].hashes) == 2
Beispiel #10
0
def make_root(root, **releases) -> RootDependency:
    release_objects = []
    for name, fakes in releases.items():
        for fake in fakes:
            release = Release(
                raw_name=name,
                version=str(fake.version),
                time=DEFAULT_TIME,
            )
            release_objects.append(release)
            for extra in fake.extras:
                release = Release(
                    raw_name=name,
                    extra=extra,
                    version=str(fake.version),
                    time=DEFAULT_TIME,
                )

    constraints = defaultdict(dict)
    for name, fakes in releases.items():
        for fake in fakes:
            constraints[name][fake.version] = tuple(
                PackagingRequirement(dep) for dep in fake.deps)
            for extra, deps in fake.extras.items():
                cname = '{}[{}]'.format(name, extra)
                constraints[cname][fake.version] = tuple(
                    PackagingRequirement(dep) for dep in deps)

    repo = ReleaseRepo(*release_objects, deps=constraints)

    deps = []
    root_dep = RootDependency(raw_name=''.join(sorted(releases)))
    root_dep.repo = repo
    for constr in root.deps:
        subdeps = DependencyMaker.from_requirement(
            req=PackagingRequirement(constr),
            source=root_dep,
        )
        for dep in subdeps:
            dep.repo = repo
        deps.extend(subdeps)
    root_dep.attach_dependencies(deps)
    return root_dep
Beispiel #11
0
def test_get_releases_mocked(requests_mock, temp_cache, fixtures_path):
    url = 'https://artifactory.example.org/pypi/'
    text = (fixtures_path / 'warehouse-simple.html').read_text()
    requests_mock.get(url + 'dephell-shells/', text=text)

    root = RootDependency()
    dep = DependencyMaker.from_requirement(source=root, req='dephell-shells')[0]
    repo = WarehouseSimpleRepo(name='pypi', url=url)
    releases = repo.get_releases(dep=dep)

    assert requests_mock.call_count == 1
    assert len(releases) == 4
Beispiel #12
0
def test_with_rev_two_constraints_unresolved():
    commit = '0cf85e6b074794ac91857aa097f0b3dc3e6d9468'
    dep = DependencyMaker.from_params(
        raw_name='Django',
        constraint='',
        source=RootDependency(),
        url='https://github.com/django/django.git@' + commit,
    )[0]
    assert isinstance(dep.link, VCSLink)
    assert isinstance(dep.repo, GitRepo)
    dep.repo = PatchedGitRepo(dep.link)

    dep2 = DependencyMaker.from_params(
        raw_name='Django',
        constraint='<=1.9',
        source=RootDependency(),
    )[0]
    dep += dep2
    for group in dep.groups:
        assert group.empty
    assert not dep.compat
Beispiel #13
0
def test_get_releases(requests_mock, temp_cache, fixtures_path: Path):
    url = 'https://pypi.org/pypi/'
    text = (fixtures_path / 'warehouse-api-package.json').read_text()
    requests_mock.get(url + 'dephell-shells/json', text=text)

    root = RootDependency()
    dep = DependencyMaker.from_requirement(source=root,
                                           req='dephell-shells')[0]
    repo = WarehouseAPIRepo(name='pypi', url=url)
    releases = repo.get_releases(dep=dep)

    assert requests_mock.call_count == 1
    assert len(releases) == 4
Beispiel #14
0
def test_conda_dumps_new():
    root = RootDependency(raw_name='check-me')

    deps = []
    deps.extend(DependencyMaker.from_requirement(source=root, req='matplotlib==2.0.2'))
    deps.extend(DependencyMaker.from_requirement(source=root, req='numpy'))

    reqs = [Requirement(dep=dep, lock=False) for dep in deps]
    content = CondaConverter().dumps(reqs=reqs, project=root)

    doc = yaml_load(content)
    assert doc['name'] == 'check-me'
    assert doc['channels'] == ['defaults']
    assert doc['dependencies'] == ['matplotlib ==2.0.2', 'numpy']
Beispiel #15
0
def test_extract_modules(temp_path: Path, requirements_path: Path):
    config = Config()
    config.attach(dict(project=str(temp_path)))
    command = VendorDownloadCommand(argv=[], config=config)
    dep = DependencyMaker.from_requirement(source=RootDependency(),
                                           req='dephell')[0]
    result = command._extract_modules(
        dep=dep,
        archive_path=requirements_path / 'wheel.whl',
        output_path=temp_path,
    )
    assert result is True
    assert (temp_path / 'dephell').exists()
    assert (temp_path / 'dephell' / '__init__.py').exists()
Beispiel #16
0
def test_get_releases_auth(requests_mock, temp_cache, fixtures_path):
    url = 'https://artifactory.example.org/pypi/'
    text = (fixtures_path / 'warehouse-simple.html').read_text()
    requests_mock.get(url + 'dephell-shells/', text=text)

    root = RootDependency()
    dep = DependencyMaker.from_requirement(source=root, req='dephell-shells')[0]
    auth = Auth(
        hostname='artifactory.example.org',
        username='******',
        password='******',
    )
    repo = WarehouseSimpleRepo(name='pypi', url=url, auth=auth)
    releases = repo.get_releases(dep=dep)

    assert requests_mock.call_count == 1
    assert len(releases) == 4
    assert requests_mock.last_request.headers['Authorization'] == 'Basic Z3JhbTp0ZXN0'
Beispiel #17
0
def test_get_releases_auth(requests_mock, temp_cache, fixtures_path: Path):
    url = 'https://custom.pypi.org/pypi/'
    text = (fixtures_path / 'warehouse-api-package.json').read_text()
    requests_mock.get(url + 'dephell-shells/json', text=text)

    root = RootDependency()
    dep = DependencyMaker.from_requirement(source=root,
                                           req='dephell-shells')[0]
    repo = WarehouseAPIRepo(name='pypi',
                            url=url,
                            auth=Auth(
                                hostname='custom.pypi.org',
                                username='******',
                                password='******',
                            ))
    releases = repo.get_releases(dep=dep)

    assert requests_mock.call_count == 1
    assert len(releases) == 4
    assert requests_mock.last_request.headers[
        'Authorization'] == 'Basic Z3JhbTp0ZXN0'
Beispiel #18
0
def test_repository_preserve(converter):
    repo = RepositoriesRegistry()
    repo.add_repo(url='https://example.com', name='insane')
    repo.add_repo(url='https://pypi.org/simple/', name='pypi')
    root = RootDependency()
    dep1 = DependencyMaker.from_params(
        source=root,
        raw_name='dephell',
        constraint='*',
        repo=repo,
    )[0]
    req = Requirement(dep=dep1, roots=[root.name], lock=False)

    content1 = converter.dumps([req], project=root)
    root2 = converter.loads(content1)
    assert len(root2.dependencies) == 1
    dep2 = root2.dependencies[0]

    repos1 = [attr.asdict(repo) for repo in dep1.repo.repos]
    repos2 = [attr.asdict(repo) for repo in dep2.repo.repos]
    assert repos1 == repos2
Beispiel #19
0
def test_patch_imports(temp_path: Path):
    (temp_path / 'project').mkdir()
    (temp_path / 'project' / '__init__.py').write_text('import requests\nimport django')
    (temp_path / 'project' / 'vendor' / 'requests').mkdir(parents=True)
    (temp_path / 'project' / 'vendor' / 'requests' / '__init__.py').touch()

    config = Config()
    config.attach(dict(project=str(temp_path)))
    package = PackageRoot(name='project', path=temp_path)
    root = RootDependency(raw_name='project', package=package)
    resolver = Resolver(
        graph=Graph(root),
        mutator=Mutator(),
    )
    command = VendorImportCommand(argv=[], config=config)
    command._patch_imports(
        resolver=resolver,
        output_path=temp_path / 'project' / 'vendor',
    )

    expected = 'import project.vendor.requests as requests\nimport django'
    assert (temp_path / 'project' / '__init__.py').read_text() == expected
Beispiel #20
0
def test_with_rev_one_constraint():
    commit = '0cf85e6b074794ac91857aa097f0b3dc3e6d9468'
    dep = DependencyMaker.from_params(
        raw_name='Django',
        constraint='',
        source=RootDependency(),
        url='https://github.com/django/django.git@' + commit,
    )[0]
    assert isinstance(dep.link, VCSLink)
    assert isinstance(dep.repo, GitRepo)
    dep.repo = PatchedGitRepo(dep.link)

    releases = set()
    non_empty = 0
    for group in dep.groups:
        non_empty += not group.empty
        releases.update(set(group.releases))
    assert non_empty == 1
    assert len(releases) == 1

    release = list(releases)[0]
    assert isinstance(release, GitRelease)
    assert release.commit == commit
    assert str(release.version) == '1.11'
Beispiel #21
0
def test_from_requirement():
    root = RootDependency()
    req = Requirement('Django>=1.5,<=1.9')
    dep = DependencyMaker.from_requirement(source=root, req=req)[0]
    assert dep.raw_name == 'Django'
    assert set(str(dep.constraint).split(',')) == {'>=1.5', '<=1.9'}