Skip to content

Commit a70c7ce

Browse files
jsamjirikuncar
authored andcommitted
feat(cli): add dataset rm command
1 parent f5f04b6 commit a70c7ce

File tree

3 files changed

+83
-32
lines changed

3 files changed

+83
-32
lines changed

renku/api/datasets.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -78,20 +78,23 @@ def datasets(self):
7878
result[path] = Dataset.from_yaml(path)
7979
return result
8080

81+
def dataset_path(self, name):
82+
"""Get dataset path from name."""
83+
from renku.models.refs import LinkReference
84+
path = self.renku_datasets_path / name / self.METADATA
85+
if not path.exists():
86+
path = LinkReference(
87+
client=self, name='datasets/' + name
88+
).reference
89+
return path
90+
8191
def load_dataset(self, name=None):
8292
"""Load dataset reference file."""
83-
from renku.models.refs import LinkReference
8493
path = None
8594
dataset = None
8695

8796
if name:
88-
path = self.renku_datasets_path / name / self.METADATA
89-
90-
if not path.exists():
91-
path = LinkReference(
92-
client=self, name='datasets/' + name
93-
).reference
94-
97+
path = self.dataset_path(name)
9598
if path.exists():
9699
dataset = Dataset.from_yaml(path)
97100

renku/cli/dataset.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,21 @@ def unlink(client, name, include, exclude, yes):
243243
click.secho('OK', fg='green')
244244

245245

246+
@dataset.command('rm')
247+
@click.argument('names', nargs=-1)
248+
@pass_local_client(clean=True, commit=True)
249+
def remove(client, names):
250+
"""Delete a dataset."""
251+
datasets = {client.dataset_path(name) for name in names}
252+
with progressbar(
253+
datasets, item_show_func=lambda item: str(item) if item else ''
254+
) as bar:
255+
for dataset in bar:
256+
if dataset and dataset.exists():
257+
dataset.unlink()
258+
click.secho('OK', fg='green')
259+
260+
246261
def _include_exclude(file_path, include=None, exclude=None):
247262
"""Check if file matches one of include filters and not in exclude filter.
248263

tests/cli/test_datasets.py

Lines changed: 57 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -322,11 +322,11 @@ def test_datasets_ls_files_tabular_empty(runner, project):
322322
"""Test listing of data within empty dataset."""
323323
# create a dataset
324324
result = runner.invoke(cli.cli, ['dataset', 'create', 'my-dataset'])
325-
assert result.exit_code == 0
325+
assert 0 == result.exit_code
326326

327327
# list all files in dataset
328328
result = runner.invoke(cli.cli, ['dataset', 'ls-files', 'my-dataset'])
329-
assert result.exit_code == 0
329+
assert 0 == result.exit_code
330330

331331
# check output
332332
output = result.output.split('\n')
@@ -341,14 +341,14 @@ def test_datasets_ls_files_check_exit_code(output_format, runner, project):
341341
"""Test file listing exit codes for different formats."""
342342
format_option = '--format={0}'.format(output_format)
343343
result = runner.invoke(cli.cli, ['dataset', 'ls-files', format_option])
344-
assert result.exit_code == 0
344+
assert 0 == result.exit_code
345345

346346

347347
def test_datasets_ls_files_tabular_dataset_filter(tmpdir, runner, project):
348348
"""Test listing of data within dataset."""
349349
# create a dataset
350350
result = runner.invoke(cli.cli, ['dataset', 'create', 'my-dataset'])
351-
assert result.exit_code == 0
351+
assert 0 == result.exit_code
352352

353353
# create some data
354354
paths = []
@@ -365,11 +365,11 @@ def test_datasets_ls_files_tabular_dataset_filter(tmpdir, runner, project):
365365
['dataset', 'add', 'my-dataset'] + paths,
366366
catch_exceptions=False,
367367
)
368-
assert result.exit_code == 0
368+
assert 0 == result.exit_code
369369

370370
# list all files in non empty dataset
371371
result = runner.invoke(cli.cli, ['dataset', 'ls-files', 'my-dataset'])
372-
assert result.exit_code == 0
372+
assert 0 == result.exit_code
373373

374374
# check output from ls-files command
375375
output = result.output.split('\n')
@@ -392,7 +392,7 @@ def test_datasets_ls_files_tabular_patterns(tmpdir, runner, project):
392392

393393
# create a dataset
394394
result = runner.invoke(cli.cli, ['dataset', 'create', 'my-dataset'])
395-
assert result.exit_code == 0
395+
assert 0 == result.exit_code
396396

397397
# create some data
398398
subdir = tmpdir.mkdir('sub')
@@ -411,14 +411,14 @@ def test_datasets_ls_files_tabular_patterns(tmpdir, runner, project):
411411
['dataset', 'add', 'my-dataset'] + paths,
412412
catch_exceptions=False,
413413
)
414-
assert result.exit_code == 0
414+
assert 0 == result.exit_code
415415

416416
# check include / exclude filters
417417
result = runner.invoke(
418418
cli.cli,
419419
['dataset', 'ls-files', '--include=**/file*', '--exclude=**/file_2']
420420
)
421-
assert result.exit_code == 0
421+
assert 0 == result.exit_code
422422

423423
# check output
424424
assert 'file_0' in result.output
@@ -429,7 +429,7 @@ def test_datasets_ls_files_tabular_patterns(tmpdir, runner, project):
429429
result = runner.invoke(
430430
cli.cli, ['dataset', 'ls-files', '--include=**/sub/*']
431431
)
432-
assert result.exit_code == 0
432+
assert 0 == result.exit_code
433433

434434
# check output
435435
assert 'sub_file_0' in result.output
@@ -441,7 +441,7 @@ def test_datasets_ls_files_tabular_authors(tmpdir, runner, project, client):
441441
"""Test listing of data within dataset with authors filters."""
442442
# create a dataset
443443
result = runner.invoke(cli.cli, ['dataset', 'create', 'my-dataset'])
444-
assert result.exit_code == 0
444+
assert 0 == result.exit_code
445445

446446
# create some data
447447
paths = []
@@ -456,7 +456,7 @@ def test_datasets_ls_files_tabular_authors(tmpdir, runner, project, client):
456456
['dataset', 'add', 'my-dataset'] + paths,
457457
catch_exceptions=False,
458458
)
459-
assert result.exit_code == 0
459+
assert 0 == result.exit_code
460460

461461
authors = None
462462
with client.with_dataset(name='my-dataset') as dataset:
@@ -466,7 +466,7 @@ def test_datasets_ls_files_tabular_authors(tmpdir, runner, project, client):
466466
result = runner.invoke(
467467
cli.cli, ['dataset', 'ls-files', '--authors={0}'.format(authors)]
468468
)
469-
assert result.exit_code == 0
469+
assert 0 == result.exit_code
470470

471471
# check output
472472
for file_ in paths:
@@ -477,7 +477,7 @@ def test_datasets_ls_files_correct_paths(tmpdir, runner, project):
477477
"""Test listing of data within dataset and check that paths are correct."""
478478
# create a dataset
479479
result = runner.invoke(cli.cli, ['dataset', 'create', 'my-dataset'])
480-
assert result.exit_code == 0
480+
assert 0 == result.exit_code
481481

482482
# create some data
483483
paths = []
@@ -492,13 +492,13 @@ def test_datasets_ls_files_correct_paths(tmpdir, runner, project):
492492
['dataset', 'add', 'my-dataset'] + paths,
493493
catch_exceptions=False,
494494
)
495-
assert result.exit_code == 0
495+
assert 0 == result.exit_code
496496

497497
# check include / exclude filters
498498
result = runner.invoke(
499499
cli.cli, ['dataset', 'ls-files', '--format=json-ld']
500500
)
501-
assert result.exit_code == 0
501+
assert 0 == result.exit_code
502502

503503
output = json.loads(result.output)
504504
for record in output:
@@ -509,21 +509,21 @@ def test_dataset_unlink_file_not_found(runner, project):
509509
"""Test unlinking of file from dataset with no files found."""
510510
# create a dataset
511511
result = runner.invoke(cli.cli, ['dataset', 'create', 'my-dataset'])
512-
assert result.exit_code == 0
512+
assert 0 == result.exit_code
513513

514514
result = runner.invoke(
515515
cli.cli,
516516
['dataset', 'unlink', 'my-dataset', '--include', 'notthere.csv']
517517
)
518-
assert result.exit_code == 0
518+
assert 0 == result.exit_code
519519
assert '' == result.output
520520

521521

522522
def test_dataset_unlink_file_abort_unlinking(tmpdir, runner, project):
523523
"""Test unlinking of file from dataset and aborting."""
524524
# create a dataset
525525
result = runner.invoke(cli.cli, ['dataset', 'create', 'my-dataset'])
526-
assert result.exit_code == 0
526+
assert 0 == result.exit_code
527527

528528
# create data file
529529
new_file = tmpdir.join('datafile.csv')
@@ -534,15 +534,15 @@ def test_dataset_unlink_file_abort_unlinking(tmpdir, runner, project):
534534
cli.cli, ['dataset', 'add', 'my-dataset',
535535
str(new_file)]
536536
)
537-
assert result.exit_code == 0
537+
assert 0 == result.exit_code
538538

539539
# unlink file from dataset
540540
result = runner.invoke(
541541
cli.cli,
542542
['dataset', 'unlink', 'my-dataset', '--include', new_file.basename],
543543
input='n'
544544
)
545-
assert result.exit_code == 1
545+
assert 1 == result.exit_code
546546

547547
# check output
548548
assert 'Aborted!' in result.output
@@ -552,7 +552,7 @@ def test_dataset_unlink_file(tmpdir, runner, client):
552552
"""Test unlinking of file and check removal from dataset"""
553553
# create a dataset
554554
result = runner.invoke(cli.cli, ['dataset', 'create', 'my-dataset'])
555-
assert result.exit_code == 0
555+
assert 0 == result.exit_code
556556

557557
# create data file
558558
new_file = tmpdir.join('datafile.csv')
@@ -563,7 +563,7 @@ def test_dataset_unlink_file(tmpdir, runner, client):
563563
cli.cli, ['dataset', 'add', 'my-dataset',
564564
str(new_file)]
565565
)
566-
assert result.exit_code == 0
566+
assert 0 == result.exit_code
567567

568568
with client.with_dataset(name='my-dataset') as dataset:
569569
assert new_file.basename in [
@@ -576,9 +576,42 @@ def test_dataset_unlink_file(tmpdir, runner, client):
576576
'-y'
577577
]
578578
)
579-
assert result.exit_code == 0
579+
assert 0 == result.exit_code
580580

581581
with client.with_dataset(name='my-dataset') as dataset:
582582
assert new_file.basename not in [
583583
file_.path.name for file_ in dataset.files.values()
584584
]
585+
586+
587+
def test_dataset_rm(tmpdir, runner, project, client):
588+
"""Test removal of a dataset."""
589+
# create a dataset
590+
result = runner.invoke(cli.cli, ['dataset', 'create', 'my-dataset'])
591+
assert 0 == result.exit_code
592+
593+
# create some data
594+
paths = []
595+
for i in range(3):
596+
new_file = tmpdir.join('file_{0}'.format(i))
597+
new_file.write(str(i))
598+
paths.append(str(new_file))
599+
600+
# add data to dataset
601+
result = runner.invoke(
602+
cli.cli,
603+
['dataset', 'add', 'my-dataset'] + paths,
604+
catch_exceptions=False,
605+
)
606+
assert 0 == result.exit_code
607+
608+
# try to delete a non empty dataset
609+
result = runner.invoke(cli.cli, ['dataset', 'rm', 'my-dataset'])
610+
assert 0 == result.exit_code
611+
612+
# check output
613+
assert 'OK' in result.output
614+
assert not client.load_dataset(name='my-dataset')
615+
616+
result = runner.invoke(cli.cli, ['doctor'], catch_exceptions=False)
617+
assert 0 == result.exit_code

0 commit comments

Comments
 (0)