Beispiel #1
0
 def __init__(self, name, path=None, file_name=None, parent=None):
     self.name = name
     self.file = file_name
     self.path = path
     self.code = None
     self.parent = parent
     self.global_names = set()
     self.exclude_names = set()
     self.ignore_names = set()
     self.source_is_zip_file = False
     self.in_import = True
     self.store_in_file_system = True
     # distribution files (metadata)
     dist_files = []
     packages = [name]
     try:
         requires = importlib_metadata.requires(packages[0])
     except importlib_metadata.PackageNotFoundError:
         requires = None
     if requires is not None:
         packages += [req.partition(" ")[0] for req in requires]
     for package_name in packages:
         try:
             files = importlib_metadata.files(package_name)
         except importlib_metadata.PackageNotFoundError:
             files = None
         if files is not None:
             # cache file names to use in write modules
             for file in files:
                 if not file.match("*.dist-info/*"):
                     continue
                 dist_path = str(file.locate())
                 arc_path = file.as_posix()
                 dist_files.append((dist_path, arc_path))
     self.dist_files = dist_files
Beispiel #2
0
 def __init__(
     self,
     name: str,
     path: Optional[str] = None,
     file_name: Optional[str] = None,
     parent: Optional["Module"] = None,
     *,
     rootcachedir: TemporaryDirectory,
 ):
     self.name: str = name
     self.path: Optional[str] = path
     self.file: Optional[str] = file_name
     self.parent: Optional["Module"] = parent
     self.rootcachedir = rootcachedir
     self.code: Optional[CodeType] = None
     self.dist_files: List[str] = []
     self.exclude_names: Set[str] = set()
     self.global_names: Set[str] = set()
     self.ignore_names: Set[str] = set()
     self.in_import: bool = True
     self.source_is_zip_file: bool = False
     self._in_file_system: bool = True
     # dist-info files (metadata)
     self._cache_dist_info(name)
     try:
         requires = importlib_metadata.requires(name)
     except importlib_metadata.PackageNotFoundError:
         requires = None
     if requires is not None:
         for req in requires:
             req_name = req.partition(" ")[0]
             self._cache_dist_info(req_name)
Beispiel #3
0
def _get_importlib_metadata_requires(package_name):  # type: (str) -> None
    """Retrieve requires based on the given package."""
    import sys
    import importlib_metadata
    import json

    print(json.dumps(importlib_metadata.requires(package_name)))
    sys.exit(0)
Beispiel #4
0
 def test_requires(self):
     deps = importlib_metadata.requires('importlib_metadata')
     parsed = list(map(packaging.requirements.Requirement, deps))
     assert all(parsed)
     assert any(
         dep.name == 'pathlib2' and dep.marker
         for dep in parsed
         )
Beispiel #5
0
def _get_importlib_metadata_requires(package_name):  # type: (str) -> None
    """Retrieve requires based on the given package."""
    import sys
    try:
        import importlib_metadata
    except ImportError:
        import importlib.metadata as importlib_metadata  # type: ignore
    import json

    print(json.dumps(importlib_metadata.requires(package_name)))
    sys.exit(0)
Beispiel #6
0
def package_deps(package, deps):
    pdeps = pkgmd.requires(package) or ()
    for r in pdeps:
        # skip optional deps
        if ';' in r:
            continue
        for idx, c in enumerate(r):
            if not c.isalnum() and c not in ('-', '_', '.'):
                break
        if idx + 1 == len(r):
            idx += 1
        pkg_name = r[:idx]
        if pkg_name not in deps:
            deps.append(pkg_name)
            package_deps(pkg_name, deps)
    return deps
Beispiel #7
0
    def update_distribution(self, name: str) -> None:
        """Update the distribution cache based on its name.
        This method may be used to link an distribution's name to a module.

        Example: ModuleFinder cannot detects the distribution of _cffi_backend
        but in a hook we can link it to 'cffi'.
        """
        try:
            distribution = DistributionCache.from_name(name)
        except importlib_metadata.PackageNotFoundError:
            distribution = None
        if distribution is None:
            return
        try:
            requires = importlib_metadata.requires(distribution.name) or []
        except importlib_metadata.PackageNotFoundError:
            requires = []
        for req in requires:
            req_name = req.partition(" ")[0]
            with suppress(importlib_metadata.PackageNotFoundError):
                DistributionCache.from_name(req_name)
        self.distribution = distribution
Beispiel #8
0
 def test_requires_dist_info(self):
     deps = requires('distinfo-pkg')
     assert len(deps) == 2
     assert all(deps)
     assert 'wheel >= 1.0' in deps
     assert "pytest; extra == 'test'" in deps
Beispiel #9
0
 def test_requires_egg_info(self):
     deps = requires('egginfo-pkg')
     assert len(deps) == 2
     assert any(dep == 'wheel >= 1.0; python_version >= "2.7"'
                for dep in deps)
Beispiel #10
0
 def test_requires_egg_info_file(self):
     requirements = requires('egginfo-file')
     self.assertIsNone(requirements)
Beispiel #11
0
 def test_requires(self):
     deps = importlib_metadata.requires('egginfo-pkg')
     assert any(dep == 'wheel >= 1.0; python_version >= "2.7"'
                for dep in deps)
Beispiel #12
0
 def test_requires_dist_info(self):
     deps = list(importlib_metadata.requires('distinfo-pkg'))
     assert deps and all(deps)
Beispiel #13
0
 def test_requires_dist_info(self):
     # assume 'packaging' is installed as a wheel with dist-info
     deps = importlib_metadata.requires('packaging')
     parsed = list(map(packaging.requirements.Requirement, deps))
     assert parsed