def generate_basic_manifest(package_name: str, version: str, project_dir: Path) -> None: manifest = create_basic_manifest_from_solc_output(package_name, version, project_dir) builder_fns = (b.validate(), b.write_to_disk(project_dir)) b.build(manifest, *builder_fns) cli_logger.info( f"Manifest successfully created and written to {project_dir}/{manifest['version']}.json." )
def test_to_disk_uses_default_manifest_name(manifest_dir): build( {}, package_name("package"), manifest_version("2"), version("1.0.0"), write_to_disk(manifest_root_dir=manifest_dir), ) actual_manifest = (manifest_dir / "1.0.0.json").read_text() assert actual_manifest == MINIFIED_MANIFEST
def test_builder_to_disk_uses_default_cwd(manifest_dir, monkeypatch): monkeypatch.chdir(manifest_dir) build( {}, package_name("package"), manifest_version("2"), version("1.0.0"), write_to_disk(), ) actual_manifest = (manifest_dir / "1.0.0.json").read_text() assert actual_manifest == MINIFIED_MANIFEST
def test_builder_writes_manifest_to_disk(manifest_dir): build( {}, package_name("package"), manifest_version("2"), version("1.0.0"), write_to_disk(manifest_root_dir=manifest_dir, manifest_name="1.0.0.json", prettify=True), ) actual_manifest = (manifest_dir / "1.0.0.json").read_text() assert actual_manifest == PRETTY_MANIFEST
def test_to_disk_writes_minified_manifest_as_default(manifest_dir): build( {}, package_name("package"), manifest_version("ethpm/3"), version("1.0.0"), write_to_disk(manifest_root_dir=manifest_dir, manifest_name="1.0.0.json"), validate(), ) actual_manifest = (manifest_dir / "1.0.0.json").read_text() assert actual_manifest == MINIFIED_MANIFEST
def generate_custom_manifest(project_dir: Path) -> None: cli_logger.info("Manifest Wizard") cli_logger.info("---------------") cli_logger.info("Create ethPM manifests for local projects.") cli_logger.info("Project directory must include solc output.") cli_logger.info("Follow the steps in the docs to generate solc output.") contracts_dir = project_dir / "contracts" validate_solc_output(project_dir) solc_output_path = project_dir / SOLC_OUTPUT solc_output = json.loads(solc_output_path.read_text())["contracts"] builder_fns = ( gen_package_name(), gen_version(), gen_manifest_version(), gen_description(), gen_license(), gen_authors(), gen_keywords(), gen_links(), *gen_contract_types_and_sources(solc_output, contracts_dir), *gen_deployments(solc_output), # todo: *gen_build_dependencies(), # todo: ipfs pinning support # todo: workflow for adding a single field to existing manifest # -- aka. extend existing manifest with a single deployment gen_validate_manifest(), b.write_to_disk(project_dir), ) final_fns = (fn for fn in builder_fns if fn is not None) cli_logger.info( "Building your manifest. This could take a minute if you're pinning assets to IPFS." ) manifest = b.build({}, *final_fns) cli_logger.info( f"Manifest successfully created and written to {project_dir}/{manifest['version']}.json." )
def test_to_disk_uses_default_manifest_name(manifest_dir): build( {}, package_name("package"), manifest_version("2"), version("1.0.0"), write_to_disk(manifest_root_dir=manifest_dir), ) actual_manifest = (manifest_dir / "1.0.0.json").read_text() assert actual_manifest == MINIFIED_MANIFEST @pytest.mark.parametrize( "write_to_disk_fn", ( write_to_disk(manifest_root_dir=Path("not/a/directory")), write_to_disk(manifest_name="invalid_name"), ), ) def test_to_disk_with_invalid_args_raises_exception(manifest_dir, write_to_disk_fn): with pytest.raises(ManifestBuildingError): build( {}, package_name("package"), manifest_version("2"), version("1.0.0"), write_to_disk_fn, )