Ejemplo n.º 1
0
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"
    )
Ejemplo n.º 2
0
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)) == []
Ejemplo n.º 3
0
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,
        )
Ejemplo n.º 4
0
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'"
Ejemplo n.º 5
0
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"
    )
Ejemplo n.º 6
0
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)) == []
Ejemplo n.º 7
0
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'"
Ejemplo n.º 8
0
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'"
Ejemplo n.º 9
0
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'"
Ejemplo n.º 10
0
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")
Ejemplo n.º 11
0
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
Ejemplo n.º 12
0
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")
Ejemplo n.º 13
0
def test_parse_bad_api_url(url: str) -> None:
    with pytest.raises(UnknownURLError):
        parse_dandi_url(url)
Ejemplo n.º 14
0
def test_parse_api_url(url: str, parsed_url: ParsedDandiURL) -> None:
    assert parse_dandi_url(url) == parsed_url
Ejemplo n.º 15
0
def test_parse_api_url(url, parsed_url):
    assert parse_dandi_url(url) == parsed_url
Ejemplo n.º 16
0
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
Ejemplo n.º 17
0
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
Ejemplo n.º 18
0
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