From 592c32d1b73c4bfa9bea8716b7626fc5469a2f1c Mon Sep 17 00:00:00 2001 From: sam Date: Tue, 17 Mar 2020 18:17:27 +0100 Subject: [PATCH 1/5] fix(datasets): raises correct error message on import of protected datasets --- renku/core/commands/dataset.py | 4 ++-- renku/core/commands/providers/__init__.py | 8 ++++---- renku/core/commands/providers/zenodo.py | 4 ++-- tests/cli/test_integration_datasets.py | 17 +++++++++-------- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/renku/core/commands/dataset.py b/renku/core/commands/dataset.py index ec89946ca9..6461bffc53 100644 --- a/renku/core/commands/dataset.py +++ b/renku/core/commands/dataset.py @@ -541,10 +541,10 @@ def import_dataset( 'Unable to fetch metadata due to {1}'.format(uri, e) )) - except LookupError: + except LookupError as e: raise ParameterError( ('Could not process {0}.\n' - 'URI not found.'.format(uri)) + 'Reason: {1}'.format(uri, str(e))) ) if files: diff --git a/renku/core/commands/providers/__init__.py b/renku/core/commands/providers/__init__.py index 98598e2c8b..c88b30dad5 100644 --- a/renku/core/commands/providers/__init__.py +++ b/renku/core/commands/providers/__init__.py @@ -54,15 +54,15 @@ def from_uri(uri): if is_doi_ and provider is None: return None, ( - warning + 'Provider {} not found. '.format( + warning + 'Reason: provider {} not found'.format( uri.split('/')[1].split('.')[0] # Get DOI provider name. - ) + 'Currently supporting following providers: {}'. + ) + '\nHint: Supported providers are: {}'. format(supported_providers) ) elif provider is None: return None, ( - warning + 'Provider not found for {}. '.format(uri) + - 'Currently supporting following providers: {}'. + warning + 'Reason: provider not found for {} '.format(uri) + + '\nHint: Supported providers are: {}'. format(supported_providers) ) else: diff --git a/renku/core/commands/providers/zenodo.py b/renku/core/commands/providers/zenodo.py index f6c4583f99..9e5a51d79c 100644 --- a/renku/core/commands/providers/zenodo.py +++ b/renku/core/commands/providers/zenodo.py @@ -236,7 +236,7 @@ def get_jsonld(self): def get_files(self): """Get Zenodo files metadata as ``ZenodoFile``.""" - if len(self.files) == 0: + if not self.files: raise LookupError('no files have been found') return [ZenodoFileSerializer(**file_) for file_ in self.files] @@ -272,7 +272,7 @@ def as_dataset(self, client): @attr.s class ZenodoDeposition: - """Zenodo record for deposit.""" + """Zenodo record for a deposit.""" exporter = attr.ib() id = attr.ib(default=None) diff --git a/tests/cli/test_integration_datasets.py b/tests/cli/test_integration_datasets.py index 0c4fb9e8ac..6590789e6f 100644 --- a/tests/cli/test_integration_datasets.py +++ b/tests/cli/test_integration_datasets.py @@ -165,18 +165,19 @@ def test_dataset_import_real_doi_warnings(runner, project, sleep_after): @pytest.mark.parametrize( - 'doi', [('10.5281/zenodo.5979642342', 'Zenodo'), - ('10.7910/DVN/S8MSVFXXXX', 'DVN')] + 'doi,err', [ + ('10.5281/zenodo.5979642342', 'record not found'), + ('10.7910/DVN/S8MSVFXXXX', 'provider DVN not found'), + ('10.5281/zenodo.1494915', 'no files have been found') + ] ) @pytest.mark.integration @flaky(max_runs=10, min_passes=1) -def test_dataset_import_fake_doi(runner, project, doi): - """Test error raising for non-existing DOI.""" - result = runner.invoke(cli, ['dataset', 'import', doi[0]], input='y') - +def test_dataset_import_expected_err(runner, project, doi, err): + """Test error raising for invalid DOI.""" + result = runner.invoke(cli, ['dataset', 'import', doi], input='y') assert 2 == result.exit_code - assert 'URI not found.' in result.output \ - or 'Provider {} not found'.format(doi[1]) in result.output + assert err in result.output @pytest.mark.parametrize( From 3eacd463c158a2cb80292450d6a09c9534d03e93 Mon Sep 17 00:00:00 2001 From: sam Date: Tue, 17 Mar 2020 18:18:13 +0100 Subject: [PATCH 2/5] chore: codeformat --- tests/cli/test_integration_datasets.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/tests/cli/test_integration_datasets.py b/tests/cli/test_integration_datasets.py index 6590789e6f..4ff211c758 100644 --- a/tests/cli/test_integration_datasets.py +++ b/tests/cli/test_integration_datasets.py @@ -165,11 +165,9 @@ def test_dataset_import_real_doi_warnings(runner, project, sleep_after): @pytest.mark.parametrize( - 'doi,err', [ - ('10.5281/zenodo.5979642342', 'record not found'), - ('10.7910/DVN/S8MSVFXXXX', 'provider DVN not found'), - ('10.5281/zenodo.1494915', 'no files have been found') - ] + 'doi,err', [('10.5281/zenodo.5979642342', 'record not found'), + ('10.7910/DVN/S8MSVFXXXX', 'provider DVN not found'), + ('10.5281/zenodo.1494915', 'no files have been found')] ) @pytest.mark.integration @flaky(max_runs=10, min_passes=1) From 66b02e2cb263ca1260048d7cdbca4ab537559374 Mon Sep 17 00:00:00 2001 From: sam Date: Tue, 17 Mar 2020 19:02:29 +0100 Subject: [PATCH 3/5] test: cleanup --- tests/cli/test_integration_datasets.py | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/tests/cli/test_integration_datasets.py b/tests/cli/test_integration_datasets.py index 4ff211c758..cc4778f073 100644 --- a/tests/cli/test_integration_datasets.py +++ b/tests/cli/test_integration_datasets.py @@ -167,7 +167,12 @@ def test_dataset_import_real_doi_warnings(runner, project, sleep_after): @pytest.mark.parametrize( 'doi,err', [('10.5281/zenodo.5979642342', 'record not found'), ('10.7910/DVN/S8MSVFXXXX', 'provider DVN not found'), - ('10.5281/zenodo.1494915', 'no files have been found')] + ('10.5281/zenodo.1494915', 'no files have been found'), + ('https://zenodo.org/record/2621201248', 'record not found'), + (( + 'https://dataverse.harvard.edu/dataset.xhtml' + '?persistentId=doi:10.7910/DVN/F4NUMRXXXX' + ), 'record not found')] ) @pytest.mark.integration @flaky(max_runs=10, min_passes=1) @@ -197,23 +202,6 @@ def test_dataset_import_real_http(runner, project, url, sleep_after): assert 'OK' in result.output -@pytest.mark.parametrize( - 'url', [ - 'https://zenodo.org/record/2621201248', - 'https://dataverse.harvard.edu/dataset.xhtml' + - '?persistentId=doi:10.7910/DVN/F4NUMRXXXX' - ] -) -@pytest.mark.integration -@flaky(max_runs=10, min_passes=1) -def test_dataset_import_fake_http(runner, project, url): - """Test dataset import through HTTPS.""" - result = runner.invoke(cli, ['dataset', 'import', url], input='y') - - assert 2 == result.exit_code - assert 'URI not found.' in result.output - - @pytest.mark.integration @flaky(max_runs=10, min_passes=1) def test_dataset_import_and_extract(runner, project, client, sleep_after): From 392098c2d994e6dbaf95d92dc9bffa32168c525f Mon Sep 17 00:00:00 2001 From: sam Date: Thu, 19 Mar 2020 11:34:44 +0100 Subject: [PATCH 4/5] chore: updated messaging --- renku/core/commands/providers/dataverse.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/renku/core/commands/providers/dataverse.py b/renku/core/commands/providers/dataverse.py index 07ba4c69ae..a40ed6cceb 100644 --- a/renku/core/commands/providers/dataverse.py +++ b/renku/core/commands/providers/dataverse.py @@ -215,7 +215,9 @@ def get_jsonld(self): def get_files(self): """Get Dataverse files metadata as ``DataverseFileSerializer``.""" if len(self.files) == 0: - raise LookupError('no files have been found') + raise LookupError( + 'no files have been found - deposit is empty or protected' + ) return [DataverseFileSerializer(**file_) for file_ in self.files] From 1c1335c6d6608c531ab49a2b3bbf62086bf1e117 Mon Sep 17 00:00:00 2001 From: sam Date: Thu, 19 Mar 2020 11:47:45 +0100 Subject: [PATCH 5/5] chore: updated messaging --- renku/core/commands/providers/dataverse.py | 2 +- renku/core/commands/providers/zenodo.py | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/renku/core/commands/providers/dataverse.py b/renku/core/commands/providers/dataverse.py index a40ed6cceb..c00cb8ecb0 100644 --- a/renku/core/commands/providers/dataverse.py +++ b/renku/core/commands/providers/dataverse.py @@ -214,7 +214,7 @@ def get_jsonld(self): def get_files(self): """Get Dataverse files metadata as ``DataverseFileSerializer``.""" - if len(self.files) == 0: + if not self.files: raise LookupError( 'no files have been found - deposit is empty or protected' ) diff --git a/renku/core/commands/providers/zenodo.py b/renku/core/commands/providers/zenodo.py index 9e5a51d79c..c5c863a360 100644 --- a/renku/core/commands/providers/zenodo.py +++ b/renku/core/commands/providers/zenodo.py @@ -237,7 +237,9 @@ def get_jsonld(self): def get_files(self): """Get Zenodo files metadata as ``ZenodoFile``.""" if not self.files: - raise LookupError('no files have been found') + raise LookupError( + 'no files have been found - deposit is empty or protected' + ) return [ZenodoFileSerializer(**file_) for file_ in self.files]