def test_parse_dandi_url_unknown_instance() -> None: with pytest.raises(UnknownURLError) as excinfo: parse_dandi_url("dandi://not-an-instance/000001") assert str(excinfo.value) == ( "Unknown instance 'not-an-instance'. Valid instances: dandi," " dandi-api-local-docker-tests, dandi-devel, dandi-staging" )
def test_get_nonexistent_asset_folder(text_dandiset: SampleDandiset) -> None: url = (f"dandi://{text_dandiset.api.instance_id}/" f"{text_dandiset.dandiset_id}/does/not/exist/") parsed_url = parse_dandi_url(url) client = text_dandiset.client assert list(parsed_url.get_assets(client)) == [] assert list(parsed_url.get_assets(client, strict=True)) == []
def test_parse_gui_new_redirect() -> None: redirector_base = known_instances["dandi"].redirector responses.add( responses.GET, f"{redirector_base}/server-info", json={ "version": "1.2.0", "cli-minimal-version": "0.6.0", "cli-bad-versions": [], "services": { "webui": { "url": "https://gui.dandirchive.org" }, "api": { "url": "https://api.dandiarchive.org/api" }, "jupyterhub": { "url": "https://hub.dandiarchive.org" }, }, }, ) assert parse_dandi_url( "https://gui.dandiarchive.org/#/dandiset/000003") == DandisetURL( api_url="https://api.dandiarchive.org/api", dandiset_id="000003", version_id=None, )
def test_get_nonexistent_asset_id(local_dandi_api: DandiAPI) -> None: url = f"{local_dandi_api.api_url}/assets/00000000-0000-0000-0000-000000000000/" parsed_url = parse_dandi_url(url) client = local_dandi_api.client assert list(parsed_url.get_assets(client)) == [] with pytest.raises(NotFoundError) as excinfo: next(parsed_url.get_assets(client, strict=True)) assert str(excinfo.value) == "No such asset: '00000000-0000-0000-0000-000000000000'"
def test_parse_dandi_url_redirect(): # Unlikely this one would ever come to existence with pytest.raises(NotFoundError): parse_dandi_url("https://dandiarchive.org/dandiset/999999") # Is there ATM assert _assert_parse_girder_url( "https://dandiarchive.org/dandiset/000003") == ( "dandiset", { "dandiset_id": "000003", "version": "draft" }, ) # And this one would point to a folder assert ( follow_redirect("https://bit.ly/dandi12") == "https://gui.dandiarchive.org/#/file-browser/folder/5e72b6ac3da50caa9adb0498" )
def test_get_nonexistent_asset_prefix(text_dandiset: SampleDandiset) -> None: url = ( f"{text_dandiset.api.api_url}/dandisets/" f"{text_dandiset.dandiset_id}/versions/draft/assets/?path=does/not/exist" ) parsed_url = parse_dandi_url(url) client = text_dandiset.client assert list(parsed_url.get_assets(client)) == [] assert list(parsed_url.get_assets(client, strict=True)) == []
def test_get_nonexistent_asset_path(text_dandiset: SampleDandiset) -> None: url = (f"dandi://{text_dandiset.api.instance_id}/" f"{text_dandiset.dandiset_id}/does/not/exist") parsed_url = parse_dandi_url(url) client = text_dandiset.client assert list(parsed_url.get_assets(client)) == [] with pytest.raises(NotFoundError) as excinfo: next(parsed_url.get_assets(client, strict=True)) assert str(excinfo.value) == "No asset at path 'does/not/exist'"
def test_get_nonexistent_dandiset_asset_path(local_dandi_api: DandiAPI, version_suffix: str) -> None: url = f"dandi://{local_dandi_api.instance_id}/999999{version_suffix}/does/not/exist" parsed_url = parse_dandi_url(url) client = local_dandi_api.client assert list(parsed_url.get_assets(client)) == [] with pytest.raises(NotFoundError) as excinfo: next(parsed_url.get_assets(client, strict=True)) assert str(excinfo.value) == "No such Dandiset: '999999'"
def test_get_nonexistent_dandiset_asset_prefix(local_dandi_api: DandiAPI, version: str) -> None: url = (f"{local_dandi_api.api_url}/dandisets/999999/versions/{version}" "/assets/?path=does/not/exist") parsed_url = parse_dandi_url(url) client = local_dandi_api.client assert list(parsed_url.get_assets(client)) == [] with pytest.raises(NotFoundError) as excinfo: next(parsed_url.get_assets(client, strict=True)) assert str(excinfo.value) == "No such Dandiset: '999999'"
def test_get_dandiset_nonexistent_asset_id( text_dandiset: SampleDandiset) -> None: url = (f"{text_dandiset.api.api_url}/dandisets/" f"{text_dandiset.dandiset_id}/versions/draft/assets/" "00000000-0000-0000-0000-000000000000/") parsed_url = parse_dandi_url(url) client = text_dandiset.client assert list(parsed_url.get_assets(client)) == [] with pytest.raises(NotFoundError) as excinfo: next(parsed_url.get_assets(client, strict=True)) assert str(excinfo.value) == ( "No such asset: '00000000-0000-0000-0000-000000000000' for" f" DANDI-API-LOCAL-DOCKER-TESTS:{text_dandiset.dandiset_id}/draft")
def test_parse_girder_url(url, asset_type, asset_id): st, s, a, aid = parse_dandi_url(url) assert st == "girder" assert s == known_instances["dandi"].girder + "/" assert a == asset_type assert aid == asset_id
def test_parse_dandi_url_not_found() -> None: # Unlikely this one would ever come to existence with pytest.raises(NotFoundError): parse_dandi_url("https://dandiarchive.org/dandiset/999999")
def test_parse_bad_api_url(url: str) -> None: with pytest.raises(UnknownURLError): parse_dandi_url(url)
def test_parse_api_url(url: str, parsed_url: ParsedDandiURL) -> None: assert parse_dandi_url(url) == parsed_url
def test_parse_api_url(url, parsed_url): assert parse_dandi_url(url) == parsed_url
def _assert_parse_api_url(url, instance="dandi-api"): st, s, a, aid = parse_dandi_url(url) assert st == "api" assert s == known_instances[instance].api + "/" return a, aid
def _assert_parse_girder_url(url): st, s, a, aid = parse_dandi_url(url) assert st == "girder" assert s == known_instances["dandi"].girder + "/" return a, aid
def test_parse_api_url(url, instance, asset_type, asset_id): st, s, a, aid = parse_dandi_url(url) assert st == "api" assert s == known_instances[instance].api + "/" assert a == asset_type assert aid == asset_id