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'}
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'}
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)
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
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
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'}
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']), )
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
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
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
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
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
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']
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()
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'
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'
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
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
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'
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'}