Beispiel #1
0
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."
    )
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
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
Beispiel #6
0
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."
    )
Beispiel #7
0
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,
        )