Example #1
0
 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']
Example #2
0
 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, []
Example #3
0
 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, []
Example #4
0
 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
Example #5
0
 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
Example #6
0
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)
Example #7
0
 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']