def _write_to_disk( manifest_root_dir: Optional[Path], manifest_name: Optional[str], prettify: Optional[bool], manifest: Manifest, ) -> Manifest: if manifest_root_dir: if manifest_root_dir.is_dir(): cwd = manifest_root_dir else: raise ManifestBuildingError( f"Manifest root directory: {manifest_root_dir} cannot be found, please " "provide a valid directory for writing the manifest to disk. " "(Path obj // leave manifest_root_dir blank to default to cwd)" ) else: cwd = Path.cwd() if manifest_name: if not manifest_name.lower().endswith(".json"): raise ManifestBuildingError( f"Invalid manifest name: {manifest_name}. All manifest names must end in .json" ) disk_manifest_name = manifest_name else: disk_manifest_name = manifest["version"] + ".json" contents = format_manifest(manifest, prettify=prettify) if (cwd / disk_manifest_name).is_file(): raise ManifestBuildingError( f"Manifest: {disk_manifest_name} already exists in cwd: {cwd}") (cwd / disk_manifest_name).write_text(contents) return manifest
def pin_to_ipfs( manifest: Manifest, *, backend: BaseIPFSBackend, prettify: Optional[bool] = False ) -> List[Dict[str, str]]: """ Returns the IPFS pin data after pinning the manifest to the provided IPFS Backend. `pin_to_ipfs()` Should *always* be the last argument in a builder, as it will return the pin data and not the manifest. """ contents = format_manifest(manifest, prettify=prettify) with tempfile.NamedTemporaryFile() as temp: temp.write(to_bytes(text=contents)) temp.seek(0) return backend.pin_assets(Path(temp.name))