diff --git a/renku/core/commands/dataset.py b/renku/core/commands/dataset.py index fd8233a12d..25ce71b3b3 100644 --- a/renku/core/commands/dataset.py +++ b/renku/core/commands/dataset.py @@ -543,10 +543,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/dataverse.py b/renku/core/commands/providers/dataverse.py index 07ba4c69ae..c00cb8ecb0 100644 --- a/renku/core/commands/providers/dataverse.py +++ b/renku/core/commands/providers/dataverse.py @@ -214,8 +214,10 @@ 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') + if not self.files: + raise LookupError( + 'no files have been found - deposit is empty or protected' + ) return [DataverseFileSerializer(**file_) for file_ in self.files] diff --git a/renku/core/commands/providers/zenodo.py b/renku/core/commands/providers/zenodo.py index f6c4583f99..c5c863a360 100644 --- a/renku/core/commands/providers/zenodo.py +++ b/renku/core/commands/providers/zenodo.py @@ -236,8 +236,10 @@ def get_jsonld(self): def get_files(self): """Get Zenodo files metadata as ``ZenodoFile``.""" - if len(self.files) == 0: - raise LookupError('no files have been found') + if not self.files: + raise LookupError( + 'no files have been found - deposit is empty or protected' + ) return [ZenodoFileSerializer(**file_) for file_ in self.files] @@ -272,7 +274,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 15717227a3..90f03de2f0 100644 --- a/tests/cli/test_integration_datasets.py +++ b/tests/cli/test_integration_datasets.py @@ -165,18 +165,22 @@ 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'), + ('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) -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( @@ -198,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):