def test_get_source(PipenvInstance, pypi, lock_first): with PipenvInstance(pypi=pypi, chdir=True) as p: with open(p.pipfile_path, 'w') as f: contents = """ [[source]] url = "{0}" verify_ssl = false name = "testindex" [[source]] url = "https://pypi.python.org/simple" verify_ssl = "true" name = "pypi" [packages] pytz = "*" six = {{version = "*", index = "pypi"}} [dev-packages] """.format(os.environ['PIPENV_TEST_INDEX']).strip() f.write(contents) if lock_first: # force source to be cached c = p.pipenv('lock') assert c.return_code == 0 project = Project() sources = [['pypi', 'https://pypi.python.org/simple'], ['testindex', os.environ.get('PIPENV_TEST_INDEX')]] for src in sources: name, url = src source = [ s for s in project.pipfile_sources if s.get('name') == name ] assert source source = source[0] assert source['name'] == name assert source['url'] == url assert sorted(source.items()) == sorted( project.get_source(name=name).items()) assert sorted(source.items()) == sorted( project.get_source(url=url).items()) assert sorted(source.items()) == sorted( project.find_source(name).items()) assert sorted(source.items()) == sorted( project.find_source(url).items())
def test_get_source(PipenvInstance, pypi, lock_first): with PipenvInstance(pypi=pypi, chdir=True) as p: with open(p.pipfile_path, 'w') as f: contents = """ [[source]] url = "{0}" verify_ssl = false name = "testindex" [[source]] url = "https://pypi.org/simple" verify_ssl = "true" name = "pypi" [packages] pytz = "*" six = {{version = "*", index = "pypi"}} [dev-packages] """.format(os.environ['PIPENV_TEST_INDEX']).strip() f.write(contents) if lock_first: # force source to be cached c = p.pipenv('lock') assert c.return_code == 0 project = Project() sources = [ ['pypi', 'https://pypi.org/simple'], ['testindex', os.environ.get('PIPENV_TEST_INDEX')] ] for src in sources: name, url = src source = [s for s in project.pipfile_sources if s.get('name') == name] assert source source = source[0] assert source['name'] == name assert source['url'] == url assert sorted(source.items()) == sorted(project.get_source(name=name).items()) assert sorted(source.items()) == sorted(project.get_source(url=url).items()) assert sorted(source.items()) == sorted(project.find_source(name).items()) assert sorted(source.items()) == sorted(project.find_source(url).items())
def parse_line( cls, line, # type: str index_lookup=None, # type: Dict[str, str] markers_lookup=None, # type: Dict[str, str] project=None, # type: Optional[Project] ): # type: (...) -> Tuple[Requirement, Dict[str, str], Dict[str, str]] if index_lookup is None: index_lookup = {} if markers_lookup is None: markers_lookup = {} if project is None: from pipenv.project import Project project = Project() index, extra_index, trust_host, remainder = parse_indexes(line) line = " ".join(remainder) req = None # type: Requirement try: req = Requirement.from_line(line) except ValueError: direct_url = DIRECT_URL_RE.match(line) if direct_url: line = "{}#egg={}".format(line, direct_url.groupdict()["name"]) try: req = Requirement.from_line(line) except ValueError: raise ResolutionFailure( f"Failed to resolve requirement from line: {line!s}") else: raise ResolutionFailure( f"Failed to resolve requirement from line: {line!s}") if index: try: index_lookup[req.normalized_name] = project.get_source( url=index, refresh=True).get("name") except TypeError: pass try: req.normalized_name except TypeError: raise RequirementError(req=req) # strip the marker and re-add it later after resolution # but we will need a fallback in case resolution fails # eg pypiwin32 if req.markers: markers_lookup[req.normalized_name] = req.markers.replace('"', "'") return req, index_lookup, markers_lookup