def write_sources_to_disk(package: Package, package_dir: Path, ipfs_backend: BaseIPFSBackend) -> None: sources = resolve_sources(package, ipfs_backend) for path, source_contents in sources.items(): target_file = package_dir / SRC_DIR_NAME / path target_dir = target_file.parent if not target_dir.is_dir(): target_dir.mkdir(parents=True) target_file.touch() validate_parent_directory((package_dir / SRC_DIR_NAME), target_file) target_file.write_text(source_contents)
def write_build_deps_to_disk(pkg: Package, pkg_dir: Path, ipfs_backend: BaseIPFSBackend) -> None: if "build_dependencies" in pkg.manifest: child_ethpm_dir = pkg_dir / ETHPM_PACKAGES_DIR child_ethpm_dir.mkdir() for name, uri in pkg.manifest["build_dependencies"].items(): dep_pkg = Package(Namespace(uri=uri, alias=""), ipfs_backend) tmp_dep_dir = child_ethpm_dir / name tmp_dep_dir.mkdir() validate_parent_directory(pkg_dir, tmp_dep_dir) write_pkg_installation_files(dep_pkg, tmp_dep_dir, ipfs_backend)
def install_package(pkg: Package, config: Config) -> None: if is_package_installed(pkg.alias, config): raise InstallError( f"Installation conflict: Package: '{pkg.manifest['package_name']}' " f"aliased to '{pkg.alias}' already installed on the filesystem at " f"{config.ethpm_dir / pkg.alias}. Try installing this package with " "a different alias.") # Create temporary package directory tmp_pkg_dir = Path(tempfile.mkdtemp()) write_pkg_installation_files(pkg, tmp_pkg_dir, config.ipfs_backend) # Copy temp package directory to ethpm dir namespace dest_pkg_dir = config.ethpm_dir / pkg.alias validate_parent_directory(config.ethpm_dir, dest_pkg_dir) shutil.copytree(tmp_pkg_dir, dest_pkg_dir) install_to_ethpm_lock(pkg, (config.ethpm_dir / LOCKFILE_NAME))