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
def test_file_hash_repr(self): try: assertRegex = self.assertRegex except AttributeError: # Python 2 assertRegex = self.assertRegexpMatches util = [p for p in files('distinfo-pkg') if p.name == 'mod.py'][0] assertRegex(repr(util.hash), '<FileHash mode: sha256 value: .*>')
def get_ranger_script(): scripts = importlib_metadata.files("ranger-fm") if scripts is not None: ranger_script_paths = [ path for path in scripts if path.name == "ranger" ] if ranger_script_paths: return ranger_script_paths[0].locate().resolve() return shutil.which("ranger")
def abspath_from_egg(egg: str, path: str) -> Optional[Path]: """Given a path relative to the egg root, find the absolute filesystem path for that resource. For instance this file's absolute path can be found passing derex/runner/utils.py to this function. """ for file in importlib_metadata.files(egg): if str(file) == path: return file.locate() return None
def _get_importlib_metadata_files(package_name): # type: (str) -> None """Retrieve information about files present for the given package.""" import sys from importlib_metadata import files import json print( json.dumps([{ "hash": f.hash.__dict__ if f.hash else None, "size": f.size, "path": str(f) } for f in files(package_name)], ), ) sys.exit(0)
def test_file_hash_repr(self): try: assertRegex = self.assertRegex except AttributeError: # Python 2 assertRegex = self.assertRegexpMatches util = [ p for p in importlib_metadata.files('wheel') if p.name == 'util.py' ][0] assertRegex( repr(util.hash), '<FileHash mode: sha256 value: .*>')
def _get_importlib_metadata_files(package_name): # type: (str) -> None """Retrieve information about files present for the given package.""" import sys try: import importlib_metadata except ImportError: import importlib.metadata as importlib_metadata # type: ignore import json print( json.dumps([{ "hash": f.hash.__dict__ if f.hash else None, "size": f.size, "path": str(f) } for f in importlib_metadata.files(package_name)], ), ) sys.exit(0)
def _cache_dist_info(self, package_name) -> None: """Cache the dist-info files.""" try: files = importlib_metadata.files(package_name) except importlib_metadata.PackageNotFoundError: files = None if files is None: return # select only dist-info files files = [file for file in files if file.match("*.dist-info/*")] if files: for file in files: dist_path = os.path.join( self.rootcachedir.name, os.path.normpath(file.as_posix()) ) os.makedirs(os.path.dirname(dist_path), exist_ok=True) shutil.copyfile(str(file.locate()), dist_path) self.dist_files.append(file.as_posix())
def read_config_from_master_package() -> Config: entry_points = importlib_metadata.entry_points().get( "pyfony.bootstrap", ()) if not entry_points: raise Exception( "pyfony.bootstrap entry points is missing in the master package, try rebuilding the package" ) if hasattr(tuple(entry_points)[0], "dist"): dist_path = tuple(entry_points)[0].dist else: package_name = entry_points.value dist_path = files(package_name)[0].dist raw_config = json.loads(dist_path.read_text("bootstrap_config.json")) return pyfony_config_factory.create(raw_config, "pyfony.bootstrap entry point")
def test_read_text(self): top_level = [ path for path in importlib_metadata.files('importlib_metadata') if path.name == 'top_level.txt' ][0] self.assertEqual(top_level.read_text(), 'importlib_metadata\n')
def test_files_dist_info(self): self._test_files(importlib_metadata.files('distinfo-pkg'))
def test_files_egg_info(self): self._test_files(importlib_metadata.files('egginfo-pkg'))
def test_files(self): for file in files('example'): path = str(file.dist.locate_file(file)) assert '.egg/' in path, path
def get_distributed_files(package): return {str(f): f for f in importlib_metadata.files(package) or []}
def get_dist_files(dist): for path in files(dist.project_name): path = os.path.normpath(os.path.join(dist.location, path)) yield path
def test_read_text(self): top_level = [ path for path in files('egginfo-pkg') if path.name == 'top_level.txt' ][0] self.assertEqual(top_level.read_text(), 'mod\n')
def test_files_egg_info(self): self._test_files(files('egginfo-pkg'))
def test_files_dist_info(self): self._test_files(importlib_metadata.files('pip'))
def test_file_hash_repr(self): util = [p for p in files('distinfo-pkg') if p.name == 'mod.py'][0] self.assertRegex(repr(util.hash), '<FileHash mode: sha256 value: .*>')
def test_files(self): files = importlib_metadata.files('example') for file in files: path = str(file.dist.locate_file(file)) assert '.whl/' in path, path
def __init__(self, dist, *args, **kwargs): super().__init__(*args, **kwargs) self.dist = dist self.files = [ str(pp.locate()) for pp in importlib_metadata.files(dist) ]
def test_files_dist_info(self): self._test_files(files('distinfo-pkg'))