Esempio n. 1
0
    def test_file_writing(self):
        crate = ROCrate()
        # dereference added files
        sample_file = self.test_data_dir / 'sample_file.txt'
        file_returned = crate.add_file(sample_file)
        self.assertEqual(file_returned.id, 'sample_file.txt')
        file_returned_subdir = crate.add_file(sample_file,
                                              'subdir/sample_file2.csv')
        self.assertEqual(file_returned_subdir.id, 'subdir/sample_file2.csv')
        test_dir_path = self.test_data_dir / 'test_add_dir'
        test_dir_entity = crate.add_directory(test_dir_path, 'test_add_dir')
        self.assertTrue(test_dir_entity is None)  # is this intended?
        out_path = pathlib.Path(tempfile.gettempdir()) / 'ro_crate_out'

        crate.name = 'Test crate'

        new_person = crate.add_person('001', {'name': 'Lee Ritenour'})
        crate.creator = new_person

        out_path.mkdir(exist_ok=True)
        crate.write_crate(out_path)

        metadata_path = out_path / 'ro-crate-metadata.jsonld'
        self.assertTrue(metadata_path.exists())

        preview_path = out_path / 'ro-crate-preview.html'
        self.assertTrue(preview_path.exists())
        file1 = out_path / 'sample_file.txt'
        file2 = out_path / 'subdir' / 'sample_file2.csv'
        file_subdir = out_path / 'test_add_dir' / 'sample_file_subdir.txt'
        self.assertTrue(file1.exists())
        self.assertTrue(file2.exists())
        self.assertTrue(file_subdir.exists())
Esempio n. 2
0
def test_test_suites_prop(test_data_dir):
    top_dir = test_data_dir / "ro-crate-galaxy-sortchangecase"
    wf_path = top_dir / "sort-and-change-case.ga"
    crate = ROCrate()
    wf = crate.add(ComputationalWorkflow(crate, str(wf_path), wf_path.name))
    crate.mainEntity = wf
    suites = set()
    assert not crate.test_suites
    s1 = crate.add(TestSuite(crate, "s1"))
    suites.add(s1)
    crate.root_dataset["mentions"] = [s1]
    assert suites == set(crate.test_suites)
    s2 = crate.add(TestSuite(crate, "s2"))
    crate.root_dataset["about"] = [s2]
    suites.add(s2)
    assert suites == set(crate.test_suites)
    test_dir = crate.add_directory(dest_path="test")
    assert crate.test_dir is test_dir
    assert suites == set(crate.test_suites)  # no "about" yet
    s3 = crate.add(TestSuite(crate, "s3"))
    suites.add(s3)
    test_dir["about"] = [s3]
    assert suites == set(crate.test_suites)
    # check for duplicates
    crate.root_dataset["about"] = [s1, s2]
    assert sum(_ is s1 for _ in crate.test_suites) == 1
Esempio n. 3
0
def test_dereferencing_equivalent_id(test_data_dir, name):
    test_ids = [name, f'./{name}', f'.//{name}', f'./a/../{name}']
    path = test_data_dir / name
    if name.endswith("/"):
        path.mkdir()
        test_ids.extend([f"{name}/", f"{name}//"])
    else:
        path.touch()
    for id_ in test_ids:
        crate = ROCrate()
        if name.endswith("/"):
            entity = crate.add_directory(path, name)
        else:
            entity = crate.add_file(path, name)
        deref_entity = crate.dereference(id_)
        assert deref_entity is entity
Esempio n. 4
0
    def test_write_zip(self):
        crate = ROCrate()

        # dereference added files
        sample_file = self.test_data_dir / 'sample_file.txt'
        file_returned = crate.add_file(sample_file)
        self.assertEqual(file_returned.id, 'sample_file.txt')
        file_returned_subdir = crate.add_file(sample_file,
                                              'subdir/sample_file2.csv')
        self.assertEqual(file_returned_subdir.id, 'subdir/sample_file2.csv')
        test_dir_path = self.test_data_dir / 'test_add_dir'
        test_dir_entity = crate.add_directory(test_dir_path, 'test_add_dir')
        self.assertTrue(test_dir_entity is None)  # is this intended?
        # write to zip
        zip_path = tempfile.NamedTemporaryFile(mode='w',
                                               delete=False,
                                               suffix='.zip')
        crate.write_zip(zip_path.name)
        zip_path.close()
        read_zip = zipfile.ZipFile(zip_path.name, mode='r')
        self.assertEqual(read_zip.getinfo('sample_file.txt').file_size, 12)
        self.assertEqual(
            read_zip.getinfo('test_add_dir/sample_file_subdir.txt').file_size,
            18)
Esempio n. 5
0
def test_file_writing(test_data_dir, tmpdir, helpers, to_zip):
    crate = ROCrate()
    crate_name = 'Test crate'
    crate.name = crate_name
    creator_id = '001'
    creator_name = 'Lee Ritenour'
    new_person = crate.add_person(creator_id, {'name': creator_name})
    crate.creator = new_person

    sample_file_id = 'sample_file.txt'
    sample_file2_id = 'subdir/sample_file2.csv'
    test_dir_id = 'test_add_dir/'
    data_entity_ids = [sample_file_id, sample_file2_id, test_dir_id]
    file_subdir_id = 'sample_file_subdir.txt'

    sample_file = test_data_dir / sample_file_id
    file_returned = crate.add_file(sample_file)
    assert file_returned.id == sample_file_id
    file_returned_subdir = crate.add_file(sample_file, sample_file2_id)
    assert file_returned_subdir.id == sample_file2_id
    test_dir_path = test_data_dir / test_dir_id
    test_dir_entity = crate.add_directory(test_dir_path, test_dir_id)
    assert isinstance(test_dir_entity, Dataset)

    out_path = tmpdir / 'ro_crate_out'
    if to_zip:
        zip_path = tmpdir / 'ro_crate_out.crate.zip'
        crate.write_zip(zip_path)
        with zipfile.ZipFile(zip_path, "r") as zf:
            zf.extractall(out_path)
    else:
        out_path.mkdir()
        crate.write_crate(out_path)

    metadata_path = out_path / helpers.METADATA_FILE_NAME
    assert metadata_path.exists()
    preview_path = out_path / helpers.PREVIEW_FILE_NAME
    assert preview_path.exists()
    file1 = out_path / sample_file_id
    file2 = out_path / sample_file2_id
    file_subdir = out_path / test_dir_id / file_subdir_id
    assert file1.exists()
    with open(sample_file) as f1, open(file1) as f2:
        sample_file_content = f1.read()
        assert sample_file_content == f2.read()
    assert file2.exists()
    with open(file2) as f:
        assert sample_file_content == f.read()
    assert file_subdir.exists()
    with open(test_dir_path / file_subdir_id) as f1, open(file_subdir) as f2:
        assert f1.read() == f2.read()

    json_entities = helpers.read_json_entities(out_path)
    helpers.check_crate(json_entities, data_entity_ids=data_entity_ids)
    root = json_entities["./"]
    assert root["name"] == crate_name
    assert "datePublished" in root
    formatted_creator_id = f"#{creator_id}"
    assert root["creator"] == {"@id": formatted_creator_id}
    assert formatted_creator_id in json_entities
    assert json_entities[formatted_creator_id]["name"] == creator_name
    assert helpers.PREVIEW_FILE_NAME in json_entities
    preview = json_entities[helpers.PREVIEW_FILE_NAME]
    assert preview["@type"] == "CreativeWork"
    assert preview["about"] == {"@id": "./"}