Skip to content

Commit 877113e

Browse files
author
Ralf Grubenmann
committed
Changed to proper objects on loading and fix DatasetFile ids for old datasets
1 parent 3a4a74d commit 877113e

File tree

3 files changed

+34
-23
lines changed

3 files changed

+34
-23
lines changed

renku/core/commands/dataset.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -567,7 +567,7 @@ def update_datasets(
567567

568568
file_.dataset = dataset
569569
possible_updates.append(file_)
570-
unique_remotes.add(file_.based_on['url'])
570+
unique_remotes.add(file_.based_on.url)
571571

572572
if ref and len(unique_remotes) > 1:
573573
raise ParameterError(

renku/core/models/datasets.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,12 @@ def convert_filename_path(p):
150150
return Path(p).name
151151

152152

153+
def convert_based_on(v):
154+
"""Convert based_on to DatasetFile."""
155+
if v:
156+
return DatasetFile.from_jsonld(v)
157+
158+
153159
@jsonld.s(
154160
type='schema:DigitalDocument',
155161
slots=True,
@@ -179,7 +185,10 @@ class DatasetFile(Entity, CreatorMixin):
179185
url = jsonld.ib(default=None, context='schema:url', kw_only=True)
180186

181187
based_on = jsonld.ib(
182-
default=None, context='schema:isBasedOn', kw_only=True
188+
default=None,
189+
context='schema:isBasedOn',
190+
kw_only=True,
191+
converter=convert_based_on
183192
)
184193

185194
@added.default
@@ -213,6 +222,11 @@ def __attrs_post_init__(self):
213222
if not self.name:
214223
self.name = self.filename
215224

225+
parsed_id = urllib.parse.urlparse(self._id)
226+
227+
if not parsed_id.scheme:
228+
self._id = 'file://{}'.format(self._id)
229+
216230

217231
def _convert_dataset_files(value):
218232
"""Convert dataset files."""

tests/cli/test_integration_datasets.py

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222

2323
import git
2424
import pytest
25-
import yaml
2625

2726
from renku.cli import cli
2827

@@ -596,13 +595,11 @@ def test_usage_error_in_add_from_git(runner, client, params, n_urls, message):
596595

597596
def read_dataset_file_metadata(client, dataset_name, filename):
598597
"""Return metadata from dataset's YAML file."""
599-
path = client.dataset_path(dataset_name)
600-
assert path.exists()
598+
with client.with_dataset(dataset_name) as dataset:
599+
assert client.dataset_path(dataset.name).exists()
601600

602-
with path.open(mode='r') as fp:
603-
metadata = yaml.safe_load(fp)
604-
for file_ in metadata['files']:
605-
if file_['path'].endswith(filename):
601+
for file_ in dataset.files:
602+
if file_.path.endswith(filename):
606603
return file_
607604

608605

@@ -631,14 +628,14 @@ def test_dataset_update(client, runner, params):
631628
assert 0 == result.exit_code
632629

633630
after = read_dataset_file_metadata(client, 'remote', 'CHANGES.rst')
634-
assert after['_id'] == before['_id']
635-
assert after['_label'] != before['_label']
636-
assert after['added'] == before['added']
637-
assert after['url'] == before['url']
638-
assert after['based_on']['_id'] == before['based_on']['_id']
639-
assert after['based_on']['_label'] != before['based_on']['_label']
640-
assert after['based_on']['path'] == before['based_on']['path']
641-
assert after['based_on']['based_on'] is None
631+
assert after._id == before._id
632+
assert after._label != before._label
633+
assert after.added == before.added
634+
assert after.url == before.url
635+
assert after.based_on._id == before.based_on._id
636+
assert after.based_on._label != before.based_on._label
637+
assert after.based_on.path == before.based_on.path
638+
assert after.based_on.based_on is None
642639

643640

644641
@pytest.mark.integration
@@ -792,12 +789,12 @@ def test_import_from_renku_project(tmpdir, client, runner):
792789
assert 0 == result.exit_code
793790

794791
metadata = read_dataset_file_metadata(client, 'remote-dataset', 'file')
795-
assert metadata['creator'][0]['name'] == remote['creator'][0]['name']
796-
assert metadata['based_on']['_id'] == remote['_id']
797-
assert metadata['based_on']['_label'] == remote['_label']
798-
assert metadata['based_on']['path'] == remote['path']
799-
assert metadata['based_on']['based_on'] is None
800-
assert metadata['based_on']['url'] == REMOTE
792+
assert metadata.creator[0].name == remote.creator[0].name
793+
assert metadata.based_on._id == remote._id
794+
assert metadata.based_on._label == remote._label
795+
assert metadata.based_on.path == remote.path
796+
assert metadata.based_on.based_on is None
797+
assert metadata.based_on.url == REMOTE
801798

802799

803800
@pytest.mark.integration

0 commit comments

Comments
 (0)