def get_pkg_reqs( self, pkg_name, pkg_version: Version, extras=None) -> Tuple[List[Requirement], List[Requirement]]: """ Get requirements for package """ if pkg_version not in self._get_candidates(pkg_name): raise PackageNotFound(pkg_name, pkg_version, self.name) pkg = self._get_candidates(pkg_name)[pkg_version] requirements = dict(setup_requires=[], install_requires=[]) for t in ("setup_requires", "install_requires"): if t not in pkg: requirements[t] = [] else: reqs_raw = pkg[t] reqs = parse_reqs(reqs_raw) requirements[t] = list( filter_reqs_by_eval_marker(reqs, self.context)) if not extras: extras = [] # even if no extras are selected we need to collect reqs for extras, # because some extras consist of only a marker which needs to be evaluated requirements['install_requires'] += self.get_reqs_for_extras( pkg_name, pkg_version, extras) return requirements['install_requires'], requirements['setup_requires']
def get_pkg_reqs(self, pkg_name, pkg_version: Version, extras=None) -> Tuple[List[Requirement], List[Requirement]]: """ Get requirements for package """ reqs_raw = self._choose_wheel(pkg_name, pkg_version).requires_dist if reqs_raw is None: reqs_raw = [] # handle extras by evaluationg markers install_reqs = list(filter_reqs_by_eval_marker(parse_reqs(reqs_raw), self.context_wheel, extras)) return install_reqs, []
def get_pkg_reqs(self, c: Candidate) -> Tuple[List[Requirement], List[Requirement]]: """ Get requirements for package """ reqs_raw = c.provider_info.data.requires_dist if reqs_raw is None: reqs_raw = [] # handle extras by evaluationg markers install_reqs = list(filter_reqs_by_eval_marker(parse_reqs(reqs_raw), self.context_wheel, c.selected_extras)) return install_reqs, []
def get_reqs_for_extras(self, pkg_name, pkg_ver, extras): name = self.unify_key(pkg_name) pkg = self._get_candidates(name)[pkg_ver] extras = set(extras) requirements = [] if 'extras_require' in pkg: for name, reqs_str in pkg['extras_require'].items(): # handle extras with marker in key if ':' in name: name, marker = name.split(':') if not distlib.markers.interpret(marker, self.context): continue if name == '' or name in extras: requirements += list(filter_reqs_by_eval_marker(parse_reqs(reqs_str), self.context)) return requirements
def _get_reqs_for_extras(self, pkg, extras): if extras is None: return [] extras = set(extras) requirements = [] if 'extras_require' in pkg: for name, reqs_str in pkg['extras_require'].items(): # handle extras with marker in key if ':' in name: name, marker = name.split(':') if not distlib.markers.interpret(marker, self.context): continue if name == '' or name in extras: requirements += list(filter_reqs_by_eval_marker(parse_reqs(reqs_str), self.context)) return requirements
def do(): providers_json = load_env('providers') conda_channels_json = load_env('conda_channels_json') disable_checks = load_env('disable_checks') nixpkgs_json = load_env('nixpkgs_json') out_file = load_env('out_file') provider_settings = ProviderSettings(providers_json) py_ver_str = load_env('py_ver_str') pypi_deps_db_src = load_env('pypi_deps_db_src') pypi_fetcher_commit = load_env('pypi_fetcher_commit') pypi_fetcher_sha256 = load_env('pypi_fetcher_sha256') requirements = load_env('requirements') platform, system = load_env('system').split('-') py_ver = PyVer(py_ver_str) nixpkgs = NixpkgsIndex(nixpkgs_json) deps_provider = CombinedDependencyProvider( conda_channels_json=conda_channels_json, nixpkgs=nixpkgs, provider_settings=provider_settings, pypi_deps_db_src=pypi_deps_db_src, py_ver=py_ver, platform=platform, system=system) generator = OverridesGenerator( py_ver, nixpkgs, pypi_fetcher_commit, pypi_fetcher_sha256, disable_checks, ResolvelibResolver(nixpkgs, deps_provider), ) reqs = filter_reqs_by_eval_marker(parse_reqs(requirements), context(py_ver, platform, system)) try: expr = generator.generate(reqs) except ResolutionImpossible as e: handle_resolution_impossible(e, requirements, providers_json, py_ver_str) exit(1) else: with open(out_file, 'w') as f: f.write(expr)
def get_pkg_reqs(self, c: Candidate) -> Tuple[List[Requirement], List[Requirement]]: """ Get requirements for package """ pkg = c.provider_info.data requirements = dict( setup_requires=[], install_requires=[] ) for t in ("setup_requires", "install_requires"): if t not in pkg: requirements[t] = [] else: reqs_raw = pkg[t] reqs = parse_reqs(reqs_raw) requirements[t] = list(filter_reqs_by_eval_marker(reqs, self.context)) # even if no extras are selected we need to collect reqs for extras, # because some extras consist of only a marker which needs to be evaluated requirements['install_requires'] += self._get_reqs_for_extras(pkg, c.selected_extras) return requirements['install_requires'], requirements['setup_requires']