def test_update(test_data_dir, tmpdir, helpers): crate = ROCrate() assert not crate.root_dataset["hasPart"] wf_path = test_data_dir / "test_galaxy_wf.ga" john = crate.add(Person(crate, '#john', {'name': 'John Doe'})) file_ = crate.add_file(wf_path) assert crate.root_dataset["hasPart"] == [file_] file_["author"] = john assert isinstance(file_, File) assert crate.mainEntity is None wf = crate.add_workflow(wf_path, main=True, lang="galaxy") assert isinstance(wf, ComputationalWorkflow) assert wf["author"] is None assert crate.mainEntity is wf assert crate.dereference(john.id) is john assert crate.dereference(file_.id) is wf assert crate.root_dataset["hasPart"] == [wf] assert crate.root_dataset.properties()["hasPart"] == [{ "@id": "test_galaxy_wf.ga" }] out_path = tmpdir / "ro_crate_out" out_path.mkdir() crate.write_crate(out_path) json_entities = helpers.read_json_entities(out_path) helpers.check_wf_crate(json_entities, wf.id)
def make_crate(crate_dir, target_owner, planemo_version): wf_id = get_wf_id(crate_dir) planemo_id, planemo_source = get_planemo_id(crate_dir, wf_id) crate = ROCrate(gen_preview=False) wf_source = Path(crate_dir) / wf_id with open(wf_source) as f: code = json.load(f) workflow = crate.add_workflow(wf_source, wf_id, main=True, lang="galaxy", gen_cwl=False) handle_creator(code, crate, workflow) workflow["name"] = crate.root_dataset["name"] = get_workflow_name( crate_dir) try: workflow["version"] = code["release"] except KeyError: pass wf_url = f"https://github.com/{target_owner}/{crate_dir.name}" workflow["url"] = crate.root_dataset["isBasedOn"] = wf_url try: crate.root_dataset["license"] = code["license"] except KeyError: pass readme_source = Path(crate_dir) / "README.md" if readme_source.is_file(): crate.add_file(readme_source, "README.md") suite = crate.add_test_suite(identifier="#test1") resource = f"repos/{target_owner}/{crate_dir.name}/actions/workflows/{CI_WORKFLOW.name}" crate.add_test_instance(suite, GH_API_URL, resource=resource, service="github", identifier="test1_1") crate.add_test_definition(suite, source=planemo_source, dest_path=planemo_id, engine="planemo", engine_version=planemo_version) crate.metadata.write(crate_dir)